我们定制自己的
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、准备工具
- 2、环境搭建
- 3、只单独更新某个分区的固件
- 4、`RKDevTool`保存`Ubuntu`系统分区配置文件
- 5、为何不添加`rootfs`与`userdata`分区?
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
系统固件的绝大部分,两者烧写所花时间差别不大,完全没必要只单独更新根文件系统。