我们知道,不同分区中的文件有着各自的作用,在我们介绍的使用UEFI启动系统中,我们将第一分区存放UEFI启动文件和树莓派的bootloader以及内核设备树,第二分区存放内核和启动配置,第三分区则存放根目录,当然,如果想两个分区搞定也可以。
创建映射
kpartx -av debian.img
首先挂载第一分区
mkdir boot
mount /dev/mapper/loop0p1 boot
mkdir boot/EFI-BOOT
然后把bootloader放进去
mv root/boot/*dat boot/EFI-BOOT
mv root/boot/*elf boot/EFI-BOOT
mv root/boot/bootcode.bin boot/EFI-BOOT
这里的root/boot是我们在内核编译中讲到直接解压官方内核的位置
然后是内核设备树
mv $BOOTPATH/*dtb $TARGETBOOT/EFI-BOOT
接着是overlays
mv root/boot/overlays boot
然后是uefi文件
wget https://github.com/chainsx/cxcore/raw/master/files/EFI-boot.tar.gz
tar -zxvf EFI-boot.tar.gz -C boot/EFI-BOOT
这里就是我们针对树莓派打包好的uefi文件,uefi启动并不是靠一个RPi_EFI.fd就完了,更不是把这个文件扔到boot分区就完了的事,这里提供了uefi启动所需的文件进行打包。
然后把我们制作的初始化根目录放进来
mv noobs/* boot
这里需要解释一下,第一次启动时因为使用的noobs
的启动方式,所以把noobs
的启动文件放在最外面,等第一次扩容等操作完成后我们编译的初始化根目录就自行清除并把UEFI移动出来。。
同步
sync
卸载第一分区
umount boot
挂载第二分区
mkdir kernel
mount /dev/mapper/loop0p2 kernel
移动内核到第二分区
mv root/boot/kernel8.img kernel/vmlinuz
然后是uefi配置文件
wget https://github.com/chainsx/cxcore/raw/master/files/EFI-root.tar.gz
tar -zxvf EFI-root.tar.gz -C kernel
配置文件是kernel/grub/debian/grub.cfg,里面就包括了cmdline
同步
sync
卸载第二分区
umount kernel
挂载第三分区
mkdir rootfs
mount /dev/mapper/loop0p3 rootfs
复制根目录
cp -rfp root/* rootfs
这个要等一会了
完成之后同步
sync
卸载
umount rootfs
取消映射
kpartx -d debian.img
这样,一个可以刷入的支持uefi
和f2fs
文件系统还带初始化根目录的镜像就制作完成了,你就可以刷入了。
我这里也只是简略地给大家分享了一下如何制作一个简单的树莓派64位系统,这也是cxcore
的制作过程,所有脚本开源,你可以在https://github.com/chainsx/cxcore上看到。
授人以鱼不如授人以渔,我以前做系统时只是将做好的镜像发布出来供大家下载,但是不曾想到这样就让大家失去了树莓派玩机的乐趣,你如果自行制作系统的话,你不仅可以根据自己的喜好高度定制,而且还能感受树莓派的乐趣。