
我们定制自己的
Ubuntu固件或者调试过程中往往需要修改Kernel,给Kernel进行功能裁剪或者添加,在修改并编译Kernel后,如果我们打包成整个Ubuntu固件再进行烧写,则太过于浪费时间了,这是因为一个Ubuntu固件的大小动不动就是以GB为单位,那么能不能只单独更新Kernel到boot分区呢?答案是肯定的!
在前一篇文章《[RK356x] [Firefly-Ubuntu] 10min带你了解Ubuntu固件各个分区》中,我带领大家了解到Ubuntu固件各个分区,以下是Linux_SDK的rockdev目录下的各个分区固件,其中烧写到内核分区的文件是boot.img!从软链接就可以看出boot.img指向的是kernel目录下的boot.img。
neutionwei@32b7b9ddcaab:~/project/rk356x_linux_release_20211019$ ls -l rockdev/boot.img
lrwxrwxrwx 1 neutionwei neutionwei 18 Jan 20 09:07 boot.img -> ../kernel/boot.img
1、准备工具
工欲善其事,必先利其器,为了尽可能避免发生奇怪的错误,我在这里列举一下大家需要用到的工具:
- PC机:Windows 10系统
- RK驱动助手:DriverAssitant(瑞芯微驱动助手),版本 >= 5.1.1
- AndroidTool烧写工具:RKDevTool,版本 >= 2.81
- 良好的Type-C 数据线
RK驱动助手与AndroidTool烧写工具可以到Firefly官方进行下载,链接如下:
大家点击以下图片中指向的地方进行下载:

2、环境搭建
环境搭建主要就是安装RK驱动助手:
- 右键点击以管理员身份DriverAssitant;
- 点击驱动安装(注意:如果大家以前安装过该驱动,要首先点击驱动卸载,待卸载完毕后再点击安装!)

3、只单独更新某个分区的固件
首先板卡要进入升级模式,进入升级模式后,打开RKDevTool工具,下方打印着“发现一个LOADER设备”,此时我们点击读取分区表:

Ubuntu系统有些分区在原始的RKDevTool工具的配置文件中不一定存在,不存在的分区会报错,这些不用理会,点击OK即可:

在读取分区表后,RKDevTool工具中存在的分区同时会同步到分区的起始地址,此时我们找到相应的分区加载自己的固件即可:

打上前面的√,点击运行即可:

单独更新其他分区的固件也是同理的!
4、RKDevTool保存Ubuntu系统分区配置文件
我们看到默认的
RKDevTool有些分区在Ubuntu系统是存在的,有些却没有,为了方便后面的调试,保存Ubuntu系统分区的配置文件!
我们首先对RKDevTool相应分区出单击再右键删除Ubuntu系统不存在的分区,同时增添一些RKDevTool不存在的Ubuntu系统分区,然后点击读取分区表更新分区地址(注意:rootfs与userdata分区不需要添加):

在空白处右键导出配置文件,并保存为rk356x-ubuntu-config.cfg:


在下次打开RKDevTool工具的时候可以重新加载这个配置文件,同样右键导入rk356x-ubuntu-config.cfg配置文件:


可以看到RKDevTool工具的分区与我们之前修改的一致!
5、为何不添加rootfs与userdata分区?
(1)Firefly发布的Linux_SDK在打包固件的时候,对于rootfs分区的大小,会根据rootfs的实际文件大小进行动态变化,换句话说,parameter-ubuntu.txt文件中的0x00c00000@0x00038000(rootfs),-@0x00c38000(userdata:grow)内容的rootfs分区大小指定与userdata分区起始地址会动态发生修改!(参考:《[RK356x] [Firefly-Linux] 一节课间时间带你了解Ubuntu固件各个分区》)如果直接烧写rootfs过大将会造成文件系统覆盖到userdata分区。
(2)userdata分区一般与recovery分区进行出厂设置有联系。
(3)rootfs分区占了Ubuntu系统固件的绝大部分,两者烧写所花时间差别不大,完全没必要只单独更新根文件系统。