1. 下载openEuler的镜像文件
- 安装软件:
sudo apt install qemu-utils
- 使能NBD:
sudo modprobe nbd max_part=8
- 连接 QCOW2 作为网络块设备:
sudo qemu-nbd --connect=/dev/nbd0 openEuler-preview.riscv64.qcow2
- 进行分区映射:
sudo kpartx -av /dev/nbd0
- 挂载分区:
mkdir /tmp/oE; sudo mount /dev/mapper/nbd0p1 /tmp/oE
- 下载buildroot:
git clone https://gitee.com/weidongshan/neza-d1-buildroot.git
- 编译:
make all
- 镜像位于:
output/images/sdcard.img
dd if=output/images/sdcard.img of=/dev/sdx
因为openEuler根文件系统有990M。buildroot镜像的根文件系统只有500M。所以需要调整分区大小。
sudo fdisk -l /dev/sdx
,记录下最后一个分区的起始扇区sudo fdisk /dev/sdx
,然后按d
,删除最后一个分区,然后按n
重建记住起始山区保持不变,大小设置为1.2Gresizefs /dev/sdx4
,调整文件系统大小,如果提示需要修复文件系统,按提示操作后重新执行此命令
- 删除sdcard根文件系统下的文件,只保留内核模块
/lib/modules/5.4.61
- 拷贝/tmp/oE下的所有文件到sdcard根目录
修改完后重启发现,systemd报错。检查后发现根文件系统只读,需要修改内核的命令行选项。
- 把sdcard插入到电脑
- 安装软件:
sudo apt install u-boot-tools
- 添加配置信息,用于读写uboot的环境变量:
cat << EOF | sudo tee /etc/fw_env.config
/dev/sda1 0x00000 0x20000
/dev/sda2 0x00000 0x20000
EOF
- 查看原来的内核参数:
➜ ~ sudo fw_printenv | grep bootargs
bootargs=earlyprintk=sunxi-uart,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyS0,115200 loglevel=8 root=/dev/mmcblk0p4 init=/sbin/init partitions=ext4 cma=8M gpt=1
- 修改根文件系统为可读写
➜ ~ sudo fw_setenv bootargs earlyprintk=sunxi-uart,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyS0,115200 loglevel=8 root=/dev/mmcblk0p4 rw init=/sbin/init partitions=ext4 cma=8M gpt=1
sudo fdisk -l /dev/sdx
,记录下最后一个分区的介绍扇区nsudo dd if=/dev/sdx of=openEuler-D1.img bs=512 count=n+1