一、SD卡image 的启动过程
SD卡image 的启动过程是:
( 以上截图来自:https://rocketboards.org/foswiki/Documentation/EmbeddedLinuxBeginnerSGuide)
也就是开发板复位以后先执行boot ROM 里面的code, 这里面的code是芯片开发商已经内置的内容。然后boot ROM里面的code 会指引去加载preloader, 然后是u-boot(也称之为bootloader,这个过程会加载rbf和dtb), 然后是Linux kernel, 最后是根文件系统的加载。
二、SD卡image分区
SD卡image 是被分为了三个区(关于image制作与分区 请参考 https://rocketboards.org/foswiki/Documentation/EmbeddedLinuxBeginnerSGuide 第7小节,https://rocketboards.org/foswiki/Documentation/GSRDSdCard 第4小节): fat区,ext区,raw区。
fat区在windows系统下可见,这个区一般存放的文件是zimage、rbf、dtb、uboot.scr(该文件是uboot启动的脚本文件,内容参考:https://rocketboards.org/foswiki/Documentation/EmbeddedLinuxBeginnerSGuide 第5小节)等文件;
ext区在windows系统下不可见,在linux系统下可见,存放根文件系统;
raw分区在windows或linux下都不可见,存放uboot和preloader文件。(关于为啥放uboot和preloader只能放在raw分区,请参考我之前的博客:https://www.cnblogs.com/DoreenLiu/p/14452099.html )
(以上截图来自:https://rocketboards.org/foswiki/Documentation/EmbeddedLinuxBeginnerSGuide)
三、 如何扩大SD卡rootfs分区
因为友晶官网提供的SD卡image的根文件系统分区分得比较小(才2G),无法安装更多库,这给应用带来局限。那如何扩大SD卡rootfs分区?
如果要将root分区增大,就需要重新制作image(即可以尝试制作一个空的image),把rootfs分区分大一些,然后把各个分区的文件拷贝进去。
可是我们在友晶科技官网上只能下载到 image压缩包,没有各个分区的文件(即没有image打包之前的文件)怎么办呢? 有办法——用命令先将之前image的各个分区的文件提取出来!
具体操作如下:
-
提取官网image各分区文件:
(1)reloader和 uboot 的提取:用dd指令把整个boot分区提取出来,作为一个image(命令:dd if=/dev/sdb3 of=image)。
(2)fat分区文件直接复制就可以提取出来。
(3)根文件系统的提取:rootfs分区用tar 指令备份(命令:mkdir temp_mount1
mount /dev/sdb2 ./temp_mount1
tar -zcvf rootfs.rar temp_mount1/ ) -
参考前面 link 重新制作一个空的SD卡image,将rootfs分区增大到你需要的容量。然后将空image烧写到SD卡:
-
将提取出来的文件拷贝到新的image的各个分区:
(1)preloader和 uboot 的拷贝:用dd指令将之前提取的image拷贝到raw分区即可(命令:dd if=image of=/dev/sdb3 bs=64k seek=0)
(2)fat分区文件直接复制进去。
(3)根文件系统的拷贝:将前面提取的根文件系统文件解压到空image的rootfs分区即可(命令:mkdir temp_mount2
mount /dev/sdb2 ./temp_mount2tar -xvf rootfs.tar -C /temp_mount2)
四、 查看SD卡分区排列
提取和拷贝的时候涉及到查看SD卡分区排列:
命令:lsblk
或者命令:fdisk -l /dev/sdb