Licheepi_nano开发板:系统镜像打包

一、将uboot、内核、文件系统编译生成的文件拷贝到新建的文件夹中备用。

 Img 由三部分组成,首先是前面预留的 1M 空间,作为 uboot 和分区表的空间,这里的 8k偏移地址是全志 SoC 的 IROM boot 规定的地址,然后紧接着是两个分区。我们的 256M 镜像打包过程大致如下:
1. 制作 256M 的空文件并烧录 uboot(uboot 和分区表空间)
2. 制作 BOOT 分区
3. 制作 rootfs 分区
4. 创建分区表并写入

二、 载入uboot

1、新建一个img文件,将作为所有文件打包的基础文件。这里我命名为  nano.img

touch nano.img

2、然后使用dd命令,将文件初始为空文件。

sudo dd if=/dev/zero of=nano.img bs=1M count=1024

#在/dev 目录下有两个特殊文件,一个是 null,一个是 zero。将文件丢到null中,就会永久删除,null 文件只能写入。zero 文件与 null 文件正好相反,这个文件是只读文件,用来初始化 0。

3、将 uboot 烧录到这个空文件中

sudo dd if=u-boot-sunxi-with-spl.bin of=nano.img bs=1024 seek=8

三、BOOT分区

1、和载入uboot的操作一样,先新建一个 boot.img 文件,作为BOOT分区基础文件,同时新建一个文件夹用于挂载img文件。

touch boot.img
mkdir dir_boot

2、使用dd命令,将文件初始为空文件。

sudo dd if=/dev/zero of=boot.img bs=1M count=32

3、将这个空文件格式化为 vfat 格式,在 Linux 操作系统中有格式化工具 mkfs。执行下面命令

sudo mkfs.vfat -n BOOT boot.img

4、将这个文件系统挂载到 mnt 目录下

sudo mount -t vfat boot.img dir_boot/

5、以向这个挂载的文件系统中写入我们的 zImage 和 dtb 文件

sudo cp zImage dir_boot/
sudo cp suniv-f1c100s-licheepi-nano.dtb dir_boot/

6、卸载boot.img,并使用dd命令将BOOT分区写入到nano.img中

sudo umount dir_boot
sudo dd if=boot.img of=nano.img bs=1M seek=1

四、rootfs分区

1、和载入uboot的操作一样,先新建一个 rootfs.img 文件,作为rootfs分区基础文件,同时新建一个文件夹用于挂载img文件。

touch rootfs.img
mkdir dir_rootfs

2、使用dd命令,将文件初始为空文件。(count 为 nano.img 总大小 减去 分区表 1M 减去 BOOT区大小32M,即1024-1-32=991)

sudo dd if=/dev/zero of=rootfs.img bs=1M count=991

3、格式化这个文件为 ext4 格式

sudo mkfs.ext4 -F -b 4096 -E stride=2,stripe-width=1024 -L rootfs rootfs.img

4、将这个文件挂载在dir_rootfs 目录下面,然后将根文件系统放进去。

sudo mount -t ext4 rootfs.img dir_rootfs/
sudo tar -xvf rootfs.tar -C dir_rootfs/

5、卸载rootfs.img,并使用dd命令将rootfs分区写入到nano.img中

sudo umount dir_rootfs/
sudo dd if=rootfs.img of=nano.img bs=1M seek=33

五、向nano.img写入分区表

1、分区表非常重要,如果没有分区表,操作系统无法找到各个分区。添加分区表,新建分区表工具我们使用 fdisk 命令。

sudo fdisk nano.img

2、输入命令 o ,创建不同类型分区

3、 然后输入 n 来新建分区,再输入 p 确定分区为主分区,然后输入 1 表示第一个分区。

4、 输入 2048,表示从 1M 地址处开始分区,然后输入+32M,表示分区大小为 32M。

5、如果出现以下提示,则输入N;若没有出现,则跳过本步骤。

 6、以同样的方式创建第二个分区,在终端中接着输入 n,表示新建一个分区,然后输入 p,表示主分区,再输入 2,表示第二个分区。

7、 接着输入 67584 即 33M 作为第二个分区的起始位置,然后输入 2097151 作为第二个分区的终止位置。 

8、如果出现以下提示,则输入N;若没有出现,则跳过本步骤。

 9、将第二个分区修改为 ext4 格式,在终端中输入 t,表示修改分区类型,然后输入 2,表示现在选中分区 2,再输入 83,表示分区格式为 ext4。

 10、输入w,将分区表写入到img文件中。完成打包。

11、实际上,当我们新建分区表完成后写入到 nano.img 时,此时文件的前 1M 被完全覆盖了,这也导致 uboot 丢掉了,我们需要再重新写入 uboot 。但是需要非常注意的是,这次写入需要加上 conv=notrun 参数,这个参数表示只替换写入的部分,其他保持不变。

sudo dd if=u-boot-sunxi-with-spl.bin of=nano.img bs=1024 seek=8 conv=notrunc

六、Win32DiskImager 工具在 Windows 烧录到 TF 卡中

 

七、插入到licheepi nano中进行验证。 

PS:IMG文件打包脚本:

#!/bin/bash

touch nano.img
sudo dd if=/dev/zero of=nano.img bs=1M count=1024
sudo dd if=u-boot-sunxi-with-spl.bin of=nano.img bs=1024 seek=8

touch boot.img
mkdir dir_boot
sudo dd if=/dev/zero of=boot.img bs=1M count=32
sudo mkfs.vfat -n BOOT boot.img
sudo mount -t vfat boot.img dir_boot/
sudo cp zImage dir_boot/
sudo cp suniv-f1c100s-licheepi-nano.dtb dir_boot/
sudo umount dir_boot
sudo dd if=boot.img of=nano.img bs=1M seek=1

touch rootfs.img
mkdir dir_rootfs
sudo dd if=/dev/zero of=rootfs.img bs=1M count=991
sudo mkfs.ext4 -F -b 4096 -E stride=2,stripe-width=1024 -L rootfs rootfs.img
sudo mount -t ext4 rootfs.img dir_rootfs/
sudo tar -xvf rootfs.tar -C dir_rootfs/
sudo umount dir_rootfs/
sudo dd if=rootfs.img of=nano.img bs=1M seek=33


sudo fdisk nano.img << EOF
o
n
p
1
2048
+32M
n
p
2
67584
2097151
t
2
83
w
EOF

sudo dd if=u-boot-sunxi-with-spl.bin of=nano.img bs=1024 seek=8 conv=notrunc

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值