【UEFI 开源系列第三篇】基于MUSE Pi Pro的uefi固件制作

在此系列前两篇文章中,我们介绍了 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在线观看平台_腾讯视频

请问有使用 Muse Pi Pro 的 UEFI 在 U 盘或者 nvme 硬盘启动的成功案例吗:face_holding_back_tears:
我把 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盘中的文件系统

谢谢您,我发现最开始直接插着好像识别不到,但是进 uefi 选择界面再插,再选择 Boot Devices 就能看到了