type
status
date
slug
summary
tags
category
icon
password
🤔 我的目标是什么
第一步不应该直接构建 RISC-V 架构的 bootc 镜像,首先我们起码要确保能构建一个 x86_64 的镜像,然后再去想 riscv64 的事;然后,我们要构建一个能够从 QEMU 启动的镜像。
📝 构建镜像!
x86_64
先看看 x86_64 是怎么做的。我们可以参考一下这个文档:https://docs.fedoraproject.org/en-US/bootc/base-images/
根据文档,我们可以了解到构建过程有以下几步:
- 构建一个 bootc 的 Container 镜像
- 使用这个 Container 镜像来生成 QEMU 镜像
- 启动
首先是第一步,我们应该怎么构建一个 bootc 的 Container 镜像?根据文档,我们要用 https://gitlab.com/fedora/bootc/base-images 这个仓库内的内容,生成 bootc 的 container 镜像,然后使用 运行
嗯,看起来还是挺简单的,一共就两个要使用到的仓库。
riscv64
构建 bootc container image
所以首先,我们应该先构建一个 bootc 的 Container 镜像,我们这里 fork gitlab的仓库,然后进行修改,fork 后的仓库地址在这:
主要的修改内容是:将 Containerfile 中原本的 quay.io/fedora/fedora:rawhide 替换为 docker.io/fedorariscv/base:42 ,并且将 fedora.repo 中的仓库更改为我们自己编译后的 fedora riscv 仓库,内容为
然后在 Fedora RISC-V 42 QEMU System mode 环境下运行(注意,这里不能跨架构运行,也就是不能用 qemu usermode 来直接模拟,具体原因还没分析)
即可。
构建 QEMU 镜像
我们还需要修改 bootc-image-builder 来让它工作,修改后可成功生成的修改已经放到仓库 上了。
具体而言,就是添加架构所使用的分区,修改 Containerfile 使其使用 fedorariscv/base ,同样地,它目前也无法跨架构,具体的pr内容见
使用该仓库内容进行
podman build -t
docker.io/fedorariscv/bootc-image-builder:latest
以后,运行 会生成一个 .raw 的 image。注意,由于目前 bootupd 的版本号尚未更新,即使它已经支持 riscv 架构,它还没被合并到 Fedora 官方,等下次版本号更新就能解决了。所以目前,镜像还需要自己放 grubriscv64.efi 、grub.cfg 和 startup.nsh ,这几个文件都可以从目前已有的 QEMU minimal 镜像搬来。
生成的镜像使用以下命令开机
构建适用于 7700 的镜像
7700 的镜像需要使用它们的内核(内核可以通过这种方式生成:),并且最好用上它们的固件,编写一个 Containerfile ,然后写下以下内容
构建好后,使用以下命令生成
同样地,也要从正常的minimal镜像搬grub,7700的镜像还需要在
/boot/efi
添加以下内容然后在 /boot/loader/entries 处,删掉 console=tty0 和 console=ttyS0 ,并将 dtb 文件夹从 ostree 文件夹复制至 /boot 文件夹。
🤗 使用
在这个里面,根目录被挂载为 readonly ,实际上挂载最后一个分区会发现,这个分区和传统的 rootfs 并不相通,里面只有两个叫
ostree
和 boot
的文件夹。要安装软件,也是要通过 rpm-ostree install 来安装,然后它会重新生成一个新的 layer(?) ,下次启动的时候就跟从这个 layer 启动。🧐 已知问题
- 目前 bootupd 无法生成 grub 配置文件
- 目前 ESWin EIC7700 设备无法支持 16G 版本(bootc仅支持grub且未来不会支持extlinux)
- 目前 ESWin EIC7700 的内核无法安装软件,表现形式为:使用 rpm-ostree install fastfetch 的时候会出现 error: Executing %transfiletriggerin for glibc-common: Creating bwrap instance
😇 体验链接
已经制作出来的镜像可以在 https://images.fedoravforce.org/ 处下载:
ESWin 7700: https://images.fedoravforce.org/EIC7700-EVB