自己制作树莓派启动盘

所需材料

Step1 对存储介质分区

利用fdisk命令给存储介质分析,本例子存储介质为SD卡,分两个区,第一个分析存储boot信息,第二个分区为根目录分区

    create 2 partition(boot and rootfs) by fdisk    (attention:  the rootfs must be the last partition)
    Device         Boot  Start       End   Sectors  Size Id Type
    /dev/mmcblk0p1        2048    526335    524288  256M  c W95 FAT32 (LBA)
    /dev/mmcblk0p2      526336 124735487 124209152 59.2G 83 Linux

    #mkfs.vfat /dev/mmcblk0p1
    #mkfs.ext4 /dev/mmcblk0p2

Step2 把系统数据拷贝到存储介质

查看树莓派官方镜像分区情况

通过fdisk -l 查看镜像分区情况

    #fdisk -l 2018-10-09-raspbian-stretch.img 
    Disk 2018-10-09-raspbian-stretch.img: 3.9 GiB, 4135583744 bytes, 8077312 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x2ee8b6fe

    Device                           Boot Start     End Sectors  Size Id Type
    2018-10-09-raspbian-stretch.img1       8192   97890   89699 43.8M  c W95 FAT32 (LBA)
    2018-10-09-raspbian-stretch.img2      98304 8077311 7979008  3.8G 83 Linux

计算分区偏移并挂载

首先把存储卡两个扇区挂载到本地目录

    #mount -t vfat /dev/mmcblk0p1 boot
    #mount -t ext4 /dev/mmcblk0p2 rootfs

接下来把官方镜像分区内容拷贝到存储卡中

每个扇区512byte, 所以第一个分区从8192 * 512 = 4194304开始, 第二个分区从98304 * 512 = 50331648开始 依次挂载官方镜像分区,并把内容拷贝到存储卡(通过挂载会出错,只能分开挂载)

    #mount -v -o offset=4194304 -t vfat 2018-10-09-raspbian-stretch.img img1
    #cp -rav img1/* boot
    umount img1
    #mount -v -o offset=50331648 -t ext4 2018-10-09-raspbian-stretch.img img2
    #cp -rav img2/* rootfs
    umount img2

Step3 修改系统文件

首先查看存储介质的分区UUID信息

    #blkid
    /dev/mmcblk0p1: SEC_TYPE="msdos" UUID="boot" TYPE="vfat" PARTUUID="xx31278f-01"
    /dev/mmcblk0p2: UUID="rootfs" TYPE="ext4" PARTUUID="xx31278f-02"

修改boot分区的cmdline.txt文件,因为引导启动,需要知道root分区的UUID

    #vim boot/cmdline.txt
    change from
        root=PARTUUID=2ee8b6fe-02 
    to 
        root=PARTUUID=xx31278f-02

修改fstab文件,让能正常挂载

    #vim rootfs/etc/fstab
    change from
        proc            /proc           proc    defaults          0       0
        PARTUUID=2ee8b6fe-01  /boot           vfat    defaults          0       2
        PARTUUID=2ee8b6fe-02  /               ext4    defaults,noatime  0       1
    to
        proc            /proc           proc    defaults          0       0
        PARTUUID=xx31278f-01  /boot           vfat    defaults          0       2
        PARTUUID=xx31278f-02  /               ext4    defaults,noatime  0       1

自己制作树莓派启动盘的意义

在进行上述操作后,我对系统镜像的理解更加清晰了

DIY很有趣,自己可以定制系统,可以修改引导文件,可以修改内核文件
事实上,除了启动过程的部分文件没有开源之外,其他任何文件都是可以修改定制的,这真正是树莓派有趣,好玩的地方。

Table of Contents