制作思路
在emmc上烧录ubuntu系统,需要内核至少开启
CONFIG_MDCONFIG_BLK_DEV_DMCONFIG_BLK_DEV_LOOPCONFIG_DM_VERITY,内核编译教程可以参考上一篇,或者查看官方文档即可。然后在sd卡上制作双系统,切记sd卡的格式是fat32
材料准备
- 香橙派开发板,我的是香橙派5b
- sd卡或者外接硬盘
- ubuntu镜像
操作过程
- 切换到root用户
sudo -i - 更新软件包列表
apt update - 安装所需软件
apt install dosfstools kpartx rsync - 创建工作目录
mkdir devboot - 转到工作目录
cd devboot - 创建挂载目录
mkdir boot root osimg - 同时把ubuntu镜像上传到这个目录并改名字为
img01.img - 查看目录下的文件
ls -al
目录文件 - 插入sd卡,查看是否有
lsblk -d,如下图,我的sd卡是mmcblk1
sd卡设备 - 对sd卡进行分区
cfdisk /dev/mmcblk1,一个boot分区(fat32)512M,两个系统分区(ext4),步骤如下
分区 -
删除原有所有分区,效果如下
删除后的分区 -
创建boot分区
boot分区
boot分区
boot分区
boot分区
boot分区 -
创建系统分区,把剩余空间平均分配即可
第一个系统分区 -
效果如下
分区效果 - 选
Write写入磁盘,选Quit退出,输入partprobe使分区生效 - 查看分区情况
lsblk
分区情况 - 格式化,
注意替换自己的设备名称mkfs.fat -F 32 -n "boot" /dev/mmcblk1p1mkfs.ext4 -L rootfs1 /dev/mmcblk1p2mkfs.ext4 -L rootfs2 /dev/mmcblk1p3,没有报错即可,有报错就解决报错,有报错大概率是sd卡有问题,重新格式化sd卡或者换一个 - 挂载
boot分区mount /dev/mmcblk1p1 boot/ - 创建俩个系统的boot目录
mkdir boot/{os1,os2} - 挂载第一个系统分区
mount /dev/mmcblk1p2 root/ - 挂载系统镜像
losetup -f --show img01.img
挂载系统镜像 - 添加分区映射
kpartx -va /dev/loop0 - 挂载分区映射
mount /dev/mapper/loop0p2 osimg/mount /dev/mapper/loop0p1 osimg/boot/ - 拷贝boot目录到os1中
cp -a osimg/boot/* boot/os1/ - 卸载boot目录
umount osimg/boot/ - 同步rootfs
rsync -axv osimg/ root/ - 创建引导程序目录
mkdir root/bootpar - 把分区信息写入分区系统表,改成自己的分区即可
sed -i "s/\(UUID=\)[[:xdigit:]-]\+\([[:blank:]]*\)\/boot/\1$(blkid -o value -s UUID /dev/mmcblk1p1)\2\/bootpar/" root/etc/fstabsed -i "s/\(UUID=\)[[:xdigit:]-]\+\([[:blank:]]*\/[[:blank:]]\+\)/\1$(blkid -o value -s UUID /dev/mmcblk1p2)\2/" root/etc/fstabecho -e "/bootpar/os1 /boot none bind 0 0\n" >> root/etc/fstabsed -i "s/\(UUID=\)[[:xdigit:]-]\+/\1$(blkid -o value -s UUID /dev/mmcblk1p2)/" boot/os1/orangepiEnv.txt - 同步到存储设备中
sync && sync - 卸载目录,删除分区映射,解除镜像挂载
umount root/umount osimg/kpartx -d /dev/loop0losetup -d /dev/loop0 - 安装第二个系统,步骤同上面第一个系统一样,命令顺序如下
mount /dev/mmcblk1p3 root/losetup -f --show img01.imgkpartx -va /dev/loop0mount /dev/mapper/loop0p2 osimg/mount /dev/mapper/loop0p1 osimg/boot/cp -a osimg/boot/* boot/os2/umount osimg/boot/umount osimg/boot/rsync -axv osimg/ root/mkdir root/bootparsed -i "s/\(UUID=\)[[:xdigit:]-]\+\([[:blank:]]*\)\/boot/\1$(blkid -o value -s UUID /dev/mmcblk1p1)\2\/bootpar/" root/etc/fstabsed -i "s/\(UUID=\)[[:xdigit:]-]\+\([[:blank:]]*\/[[:blank:]]\+\)/\1$(blkid -o value -s UUID /dev/mmcblk1p3)\2/" root/etc/fstabecho -e "/bootpar/os2 /boot none bind 0 0\n" >> root/etc/fstabsed -i "s/\(UUID=\)[[:xdigit:]-]\+/\1$(blkid -o value -s UUID /dev/mmcblk1p3)/" boot/os2/orangepiEnv.txtsync && syncumount root/umount osimg/kpartx -d /dev/loop0losetup -d /dev/loop0- 处理boot
cp -a boot/os1/* boot/ - 重启
reboot,重启后启动的是第一个镜像
切换镜像
- 把
/bootpar/os1/orangepiEnv.txt复制到/bootpar/中,就是启动第一个镜像 - 把
/bootpar/os2/orangepiEnv.txt复制到/bootpar/中,就是启动第二个镜像
一键脚本
也可以使用脚本键建制作香橙派双系统












