制作思路
在emmc上燒錄ubuntu系統(tǒng),需要內(nèi)核至少開啟
CONFIG_MD
CONFIG_BLK_DEV_DM
CONFIG_BLK_DEV_LOOP
CONFIG_DM_VERITY
渊抽,內(nèi)核編譯教程可以參考上一篇蟆豫,或者查看官方文檔即可。然后在sd卡上制作雙系統(tǒng)懒闷,切記sd卡的格式是fat32
材料準(zhǔn)備
- 香橙派開發(fā)板十减,我的是香橙派5b
- sd卡或者外接硬盤
- ubuntu鏡像
操作過(guò)程
- 切換到root用戶
sudo -i
- 更新軟件包列表
apt update
- 安裝所需軟件
apt install dosfstools kpartx rsync
- 創(chuàng)建工作目錄
mkdir devboot
- 轉(zhuǎn)到工作目錄
cd devboot
- 創(chuàng)建掛載目錄
mkdir boot root osimg
- 同時(shí)把ubuntu鏡像上傳到這個(gè)目錄并改名字為
img01.img
- 查看目錄下的文件
ls -al
目錄文件 - 插入sd卡,查看是否有
lsblk -d
愤估,如下圖帮辟,我的sd卡是mmcblk1
sd卡設(shè)備 - 對(duì)sd卡進(jìn)行分區(qū)
cfdisk /dev/mmcblk1
,一個(gè)boot分區(qū)(fat32
)512M玩焰,兩個(gè)系統(tǒng)分區(qū)(ext4
)由驹,步驟如下
分區(qū) -
刪除原有所有分區(qū),效果如下
刪除后的分區(qū) -
創(chuàng)建boot分區(qū)
boot分區(qū)
boot分區(qū)
boot分區(qū)
boot分區(qū)
boot分區(qū) -
創(chuàng)建系統(tǒng)分區(qū)昔园,把剩余空間平均分配即可
第一個(gè)系統(tǒng)分區(qū) -
效果如下
分區(qū)效果 - 選
Write
寫入磁盤蔓榄,選Quit
退出,輸入partprobe
使分區(qū)生效 - 查看分區(qū)情況
lsblk
分區(qū)情況 - 格式化默刚,
注意替換自己的設(shè)備名稱
mkfs.fat -F 32 -n "boot" /dev/mmcblk1p1
mkfs.ext4 -L rootfs1 /dev/mmcblk1p2
mkfs.ext4 -L rootfs2 /dev/mmcblk1p3
润樱,沒(méi)有報(bào)錯(cuò)即可,有報(bào)錯(cuò)就解決報(bào)錯(cuò)羡棵,有報(bào)錯(cuò)大概率是sd卡有問(wèn)題壹若,重新格式化sd卡或者換一個(gè) - 掛載
boot
分區(qū)mount /dev/mmcblk1p1 boot/
- 創(chuàng)建倆個(gè)系統(tǒng)的boot目錄
mkdir boot/{os1,os2}
- 掛載第一個(gè)系統(tǒng)分區(qū)
mount /dev/mmcblk1p2 root/
- 掛載系統(tǒng)鏡像
losetup -f --show img01.img
掛載系統(tǒng)鏡像 - 添加分區(qū)映射
kpartx -va /dev/loop0
- 掛載分區(qū)映射
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/
- 創(chuàng)建引導(dǎo)程序目錄
mkdir root/bootpar
- 把分區(qū)信息寫入分區(qū)系統(tǒng)表,改成自己的分區(qū)即可
sed -i "s/\(UUID=\)[[:xdigit:]-]\+\([[:blank:]]*\)\/boot/\1$(blkid -o value -s UUID /dev/mmcblk1p1)\2\/bootpar/" root/etc/fstab
sed -i "s/\(UUID=\)[[:xdigit:]-]\+\([[:blank:]]*\/[[:blank:]]\+\)/\1$(blkid -o value -s UUID /dev/mmcblk1p2)\2/" root/etc/fstab
echo -e "/bootpar/os1 /boot none bind 0 0\n" >> root/etc/fstab
sed -i "s/\(UUID=\)[[:xdigit:]-]\+/\1$(blkid -o value -s UUID /dev/mmcblk1p2)/" boot/os1/orangepiEnv.txt
- 同步到存儲(chǔ)設(shè)備中
sync && sync
- 卸載目錄皂冰,刪除分區(qū)映射店展,解除鏡像掛載
umount root/
umount osimg/
kpartx -d /dev/loop0
losetup -d /dev/loop0
- 安裝第二個(gè)系統(tǒng),步驟同上面第一個(gè)系統(tǒng)一樣秃流,命令順序如下
mount /dev/mmcblk1p3 root/
losetup -f --show img01.img
kpartx -va /dev/loop0
mount /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/bootpar
sed -i "s/\(UUID=\)[[:xdigit:]-]\+\([[:blank:]]*\)\/boot/\1$(blkid -o value -s UUID /dev/mmcblk1p1)\2\/bootpar/" root/etc/fstab
sed -i "s/\(UUID=\)[[:xdigit:]-]\+\([[:blank:]]*\/[[:blank:]]\+\)/\1$(blkid -o value -s UUID /dev/mmcblk1p3)\2/" root/etc/fstab
echo -e "/bootpar/os2 /boot none bind 0 0\n" >> root/etc/fstab
sed -i "s/\(UUID=\)[[:xdigit:]-]\+/\1$(blkid -o value -s UUID /dev/mmcblk1p3)/" boot/os2/orangepiEnv.txt
sync && sync
umount root/
umount osimg/
kpartx -d /dev/loop0
losetup -d /dev/loop0
- 處理boot
cp -a boot/os1/* boot/
- 重啟
reboot
赂蕴,重啟后啟動(dòng)的是第一個(gè)鏡像
切換鏡像
- 把
/bootpar/os1/orangepiEnv.txt
復(fù)制到/bootpar/
中,就是啟動(dòng)第一個(gè)鏡像 - 把
/bootpar/os2/orangepiEnv.txt
復(fù)制到/bootpar/
中舶胀,就是啟動(dòng)第二個(gè)鏡像
一鍵腳本
也可以使用腳本鍵建制作香橙派雙系統(tǒng)