搭建 Deepin RISCV QEMU 环境
10/30 更新
不必要在 Ubuntu 下构建了,zst 的问题已经修复。新包:https://mirror.iscas.ac.cn/deepin-riscv/deepin-stage1/deepin-beige-stage1-dde.tar.gz
其他的步骤请参考下文。(解压请使用:mkdir deepin && sudo tar -zxvf deepin-beige-stage1-dde.tar -C ./deepin
)
10/29 更新
被组长告知之前直接使用的 rootfs.dde.ext4
是为特定开发板优化过的,建议笔者再重新制作一个。
所需环境
需要一个 Ubuntu 的 riscv 环境,这是因为 Deepin 的部分软件包使用了 zst 压缩,而 Debian 的 dpkg 无法处理这种压缩方式。具体的环境搭建可参考笔者之前的文章使用 QEMU 搭建 RISC-V 开发环境和 Ubuntu wiki。
安装依赖:apt install mmdebstarp
下载及构建
1 | wget https://mirror.iscas.ac.cn/deepin-riscv/deepin-stage1/deepin-beige-stage1-dde.tar |
第二条命令是 chroot 到 deepin 环境中并安装所需软件。整个过程所耗时较长,建议多分配些内核和内存给 QEMU。
制作镜像
这一步和之前的制作镜像过程大同小异,直接上命令:
1 | mv deepin.raw deepin.raw.old |
在解压后,别忘了清除密码。这里的 /etc/shadow
里的 root
用户的密码字段为星号,说明密码登陆被禁用了,直接删掉星号即可。
笔者最近开始了 Deepin risc-v 的软件包修复工作,俗话说,“工欲善其事,必先利其器”。在开始工作前,有必要准备好趁手的开发环境,本文简述了如何基于 PLCT 实验室的 Tarsier 项目提供的环境构建 Deepin risc-v 的 qemu 镜像。
下载 rootfs.dde.ext4
这是 Tarsier 项目的 deepin 小组提供的 rootfs,本文要基于此制作镜像。首先下载它:
1 | wget https://mirror.iscas.ac.cn/deepin-riscv/deepin-stage1/rootfs.dde.ext4 |
新建 QEMU 镜像并分区、格式化
由于上文的镜像太小而且未正常分区,在 qemu 中使用会造成读写问题,就需要新建一个镜像:
1 | qemu-img create -f raw deepin.raw 8G |
下面,挂载这个新镜像并分区、格式化
1 | sudo losetup -P /dev/loop0 deepin.raw |
注意,在 fdisk 交互式操作界面中,先按 g
新建 gpt 表,再按 n
新建分区。
最后,挂载新分区
1 | sudo mkdir /mnt/deepin |
拷贝文件到新镜像
挂载老镜像
1 | sudo mkdir /mnt/deepin-old |
接着,需要修改 /mnt/deepin/etc/shadow
以清除 root 密码:将该文件第一行修改为:
1 | root::19292:0:99999:7::: |
并修改 /mnt/deepin/etc/apt/source.list
添加软件源:deb [trusted=yes] https://mirror.iscas.ac.cn/deepin-riscv/deepin-stage1/ beige main
拷贝所有文件到新镜像中:
1 | sudo cp -r /mnt/deepin-old/* /mnt/deepin |
解除两个镜像的挂载
1 | sudo umount /dev/loop0p1 |
准备内核并启动镜像
由于该镜像中并不包含内核,需要一个内核来引导启动,笔者使用了 oerv 项目的内核,读者也可自行从 ubuntu 等发行版中提取 riscv 架构的内核。
1 | wget https://repo.openeuler.org/openEuler-preview/RISC-V/Image/fw_payload_oe.elf |
使用以下脚本启动
1 | qemu-system-riscv64 \ |
之后……
由于之前清除了密码,先设置一个密码
1 | passwd root |
更新软件源
1 | apt update && apt install neofetch |