在此系列前两篇文章中,我们介绍了 UEFI 的基础概念与核心组件,以及如何将 UEFI 适配到 RISC-V 架构的 SpacemiT K1 上。作为系列的第三篇内容,本文将以 MUSE Pi Pro 开发板为例,完整展示如何基于 SpacemiT 提供的官方文档和工具链,手动构建适用于该平台的 UEFI 固件与启动镜像。
我们将从构建 Bianbu 系统所需的 rootfs 开始,逐步完成 QEMU 环境配置、镜像生成、UEFI 固件编译、GRUB 安装与配置,并最终打包生成可用于 MUSE Pi Pro 启动的完整启动镜像包 bianbu-custom.zip。
首先按照这个官方文档教程:
完成制作的环境要求,如图:
制作bianbu minimal的rootfs:
本例制作的是基于Bianbu Desktop的rootfs,旨在展示构建流程。由于Desktop rootfs体积较大,建议选择 Bianbu Minimal构建,以获得更轻量、高效的系统镜像。
按照这个文档制作rootfs:
首先是docker的安装,按照官方的教程:Install | Docker Docs
如果连接不到docker官方源,可切换为阿里云或腾讯云镜像:
sudo vim /etc/docker/daemon.json
{
“registry-mirrors”:[“https://mirror.ccs.tencentyun.com”]
}
sudo systemctl daemon-reload
sudo systemctl restart docker
验证是否安装成功,sudo docker run hello-world,出现以下打印:
注册qemu,在下载定制版的qemu时:
wget https://archive.spacemit.com/qemu/qemu-user-static_8.0.4%2Bdfsg-1ubuntu3.23.10.1_amd64.deb
可能会出现下图报错,加上–no-check-certificate即可:
在生成bootfs.ext4和rootfs.ext4时,若选择构建Desktop版本镜像,需将默认的镜像大小参数从2048M调整为10240M ,以确保有足够的存储空间完成文件系统写入。建议优先采用Minimal版本进行构建。
uefi固件制作
回到这个教程:UEFI固件与系统镜像制作指南 | Bianbu | 进迭时空开发者社区 按照命令打印出下图后,即uefi固件制作成功:
grub的安装与配置
首先是创建esp分区,需要在MUSE Pi Pro上制作
这里的uuid需要记录下来粘贴到host computer上,我这里选择的是在MUSE Pi Pro上把他们记录成.txt,然后通过scp命令传到host电脑上。
scp root@10.0.90.74:/home/bianbu/文档/uuid.txt ~/
这里的10.0.90.74是我的MUSE Pi Pro的ip地址,这条命令在宿主电脑上执行,就能将MUSE Pi Pro上的uuid.txt复制到宿主电脑的根目录下了。
这里我们制作的是desktop的文件系统,所以rootfs.ext4文件系统大小改为10240M:
根据教程执行,制作的bianbu-custom.zip在image-workspace目录下:
至此,Titan固件包制作完成。
视频教程
uefi on MUSE Pi Pro固件制作_高清1080P在线观看平台_腾讯视频
YooLc
2
请问有使用 Muse Pi Pro 的 UEFI 在 U 盘或者 nvme 硬盘启动的成功案例吗
我把 bianbu-computer-s1-uefi-release-for-pipro-v1.3-release-20250529141832.img 通过 dd 刷到 U 盘上,但是在 UEFI 启动项里找不到 U 盘,进入 UEFI shell 后,输入 devices,输出如下:
InstallProtocolInterface: 387477C2-69C7-11D2-8E39-00A0C969723B 7E1F5B20
InstallProtocolInterface: 752F3136-4E16-4FDC-A22A-E5F46812F4CA 7E1F4F98
InstallProtocolInterface: 6302D008-7F9B-4F30-87AC-60C9FEF5DA4E 7DECB710
UEFI Interactive Shell v2.2
EDK II
UEFI v2.70 (SPACEMIT, 0x00FF00FF)
Mapping table
FS0: Alias(s):HD0f:;BLK5:
eMMC(0x2)/HD(5,GPT,C8D2967B-CFC7-4F98-ACE2-04788C11636C)
FS1: Alias(s):HD0g:;BLK6:
eMMC(0x2)/HD(6,GPT,5482477D-92DE-452C-8970-8D792F420B26)
FS2: Alias(s):HD0h:;BLK7:
eMMC(0x2)/HD(7,GPT,759FF745-59EB-4575-B641-8BC3685907DC)
FS3: Alias(s):HD0i:;BLK8:
eMMC(0x2)/HD(8,GPT,E566A8EF-BF5C-428D-A52F-CE08B0DF7768)
FS4: Alias(s):HD0j:;BLK9:
eMMC(0x2)/HD(9,GPT,22F96E9E-67A9-4968-9D98-99FB94DED9DA)
BLK10: Alias(s):
SD(0x2)
BLK0: Alias(s):
eMMC(0x2)
BLK1: Alias(s):
eMMC(0x2)/HD(1,GPT,E40B675C-4978-411E-9D5F-601C9867F5E6)
BLK2: Alias(s):
eMMC(0x2)/HD(2,GPT,9F1C69E6-2252-497A-9470-4A4DFCDE4E69)
BLK3: Alias(s):
eMMC(0x2)/HD(3,GPT,08251794-33B7-4566-BA50-E4C22BBD8554)
BLK4: Alias(s):
eMMC(0x2)/HD(4,GPT,58CAC616-5E1E-483E-87D4-8B8306506AD9)
Press ESC in 2 seconds to skip startup.nsh or any other key to continue.
Shell> devices
T D
Y C I
P F A
CTRL E G G #P #D #C Device Name
==== = = = == == === =========================================================
19 R - - 0 1 1 VenHw(D3987D4B-971A-435F-8CAF-4967EB627241)/Uart(115200,8,N
,1)
24 R - - 0 4 2 VenHw(3A53F6E2-9154-49C1-AB0D-D92FF5E4D796)
3B R - - 0 1 1 PciRoot(0x1)
52 D - - 1 0 0 Primary Console Input Device
53 D - - 2 0 0 Primary Console Output Device
54 D - - 2 0 0 Primary Standard Error Device
MmcGetControllerName: 175, Success
5F R - X 0 1 0 MMC/SD Card Host Controller
MmcGetControllerName: 175, Success
60 R - X 0 1 0 MMC/SD Card Host Controller
61 R - - 0 1 0 SD(0x2)
62 R - - 0 2 9 eMMC(0x2)
63 D - - 1 1 0 eMMC(0x2)/HD(1,GPT,E40B675C-4978-411E-9D5F-601C9867F5E6)
64 D - - 1 1 0 eMMC(0x2)/HD(2,GPT,9F1C69E6-2252-497A-9470-4A4DFCDE4E69)
65 D - - 1 1 0 eMMC(0x2)/HD(3,GPT,08251794-33B7-4566-BA50-E4C22BBD8554)
66 D - - 1 1 0 eMMC(0x2)/HD(4,GPT,58CAC616-5E1E-483E-87D4-8B8306506AD9)
67 D - - 1 2 0 FAT File System
68 D - - 1 2 0 FAT File System
69 D - - 1 2 0 Ext4 File System
6A D - - 1 2 0 Ext4 File System
6B D - - 1 2 0 Ext4 File System
75 R - - 0 2 1 VenHw(8CA0A6C6-6B3D-4C0C-A1D1-85F05D8A7C92,00000000)
76 D - - 1 1 0 VenHw(8CA0A6C6-6B3D-4C0C-A1D1-85F05D8A7C92,00000000)/VenHw(
AC5DAA9E-4D7B-4C36-9E37-48C79AC5312D)/Ctrl(0x50)
7B R - - 0 3 2 eXtensible Host Controller (USB 3.0)
7C D - - 1 0 0 PciRoot(0x1)/Pci(0x0,0x0)
7D B - - 1 5 3 Tty Terminal Serial Console
7E D - - 1 0 0 VenHw(0D51905B-B77E-452A-A2C0-ECA0CC8D514A,0000A0C000000000
00)/USB(0x0,0x0)
7F D - - 1 0 0 VenHw(0D51905B-B77E-452A-A2C0-ECA0CC8D514A,0000A0C000000000
00)/USB(0x1,0x0)
Shell>
插入u盘,一直按下esc健,进入uefi选择界面,如果是uefi启动后才插入U盘,需要在uefi shell中执行命令
map -r
重新枚举U盘中的文件系统
YooLc
4
谢谢您,我发现最开始直接插着好像识别不到,但是进 uefi 选择界面再插,再选择 Boot Devices 就能看到了