[Firefly-Linux] RK3568 Ubuntu固件分区详解(1)

TYPE: GPT
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00010000@0x00008000(boot),0x00010000@0x00018000(recovery),0x00010000@0x00028000(backup),0x00c00000@0x00038000(rootfs),-@0x00c38000(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9


以下是摘自瑞芯微文档中的概述:


* `Rockchip android`系统平台使用`parameter`文件来配置一些系统参数,比如固件版本,存储器分区信息等。**(其实android系统平台与linux系统平台都一样)**
* `Parameter`文件是非常重要的系统配置文件,最好在能了解清楚各个配置功能时再做修改,避免出现`parameter`文件配置异常造成系统不能正常工作的问题。
* `Parameter`文件大小有限制,最大不能超过`64KB`。


`parameter-ubuntu.txt`文件内容的说明:




| 内容 | 说明 |
| --- | --- |
| `FIRMWARE_VER: 1.0`  | 固件版本,打包`updata.img`时会使用到,升级工具会根据这个识别固件版本。 |
| `MACHINE_MODEL: RK3568` | 机器型号,打包`updata.img`使用,不同的项目,可以自己修改,用于升级工具显示。在`recovery`里面升级固件时可以用于判断固件是否匹配。 |
| `MACHINE_ID: 007` | 产品开发`ID`,可以为字符和数字组合,打包`updata.img`使用,不同的项目使用不同的`ID`,可以用于识别机器机型。在`recovery`里面升级固件时可以用于判断固件是否匹配。 |
| `MANUFACTURER: RK3568` | 厂商信息,打包`updata.img`使用,可以自己修改,用于升级工具显示。 |
| `MAGIC: 0x5041524B` | `MAGIC`,不能修改,一些新的`AP`使用`DTS`,这一项没有用,为了兼容,不要删除或修改。 |
| `ATAG: 0x00200800` | `ATAG`,不能修改,一些新的`AP`使用`DTS`,这一项没有用,为了兼容,不要删除或修改。 |
| `MACHINE: 0xffffffff` | 内核识别用,不能修改,这个定义和内核匹配。 |
| `CHECK_MASK: 0x80` | 保留,不能修改。 |
| `TYPE: GPT` | 指定该文件`CMDLINE`里面定义的分区用于创建`GPT`使用,不会烧录到`NVM`(`NAND`,`EMMC`等)存储器件里面。 |
| `MACHINE: 0xffffffff` | 内核识别用,不能修改,这个定义和内核匹配。 |
| `CMDLINE` | **(稍后说明)** |
| `uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9` | 保留,不能修改。 |


列表中的这些除了`CMDLINE`,其他我们几乎很少需要修改!


`CMDLINE`属性是我们关注的地方:



CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00010000@0x00008000(boot),0x00010000@0x00018000(recovery),0x00010000@0x00028000(backup),0x00c00000@0x00038000(rootfs),-@0x00c38000(userdata:grow)


以下是摘自瑞芯微文档的说明:


1. 为了兼容性,目前`RK`所有`AP`都是用`rk29xxnand`做标识。
2. 单个分区说明:  
 例如:`0x00010000@0x00008000(boot)`,`@`符号之前的数值是分区大小,`@`符号之后的数值是分区的起始位置,括号里面的字符是分区的名字。所有数值的单位是`sector`,`1`个`sector`为`512Bytes`。上例中,`boot`分区起始位置为`0x8000 sectors`位置,大小为`0x10000 sectors(32MB)`。
3. 为了性能,每个分区起始地址需要`32KB(64 sectors)`对齐,大小也需要`32KB`的整数倍。
4. 如果使用`sparse`格式的镜像,升级时会擦除数据,为了兼容性更好,对应的分区最好按`4MB`对齐,大小也按`4MB`整数倍配置。
5. 使用`GPT分`区时,`parameter`里面定义的地址,都是真实的逻辑地址(`LBA`),例如`uboot`定义在`0x4000`,那么烧录到`EMMC`和`NAND`里面时,逻辑地址也是`0x4000`。最后一个分区需要指定`grow`参数,工具会把剩余的空间都分配给最后一个分区。


![](https://img-blog.csdnimg.cn/b6b641535e8d4127b18858088c70b6cc.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATmV1dGlvbndlaQ==,size_20,color_FFFFFF,t_70,g_se,x_16)  
 下面是`Ubuntu`固件各个分区作用的说明:


* `uboot`分区:烧写`uboot`编译出来的`uboot.img`。
* `misc`分区:烧写`misc.img`。开机检测进入`recovery`模式。
* `boot` 分区:烧写`kernel`编译出来的`boot.img`包含`kernel`和设备树信息。
* `recovery`分区:烧写`recovery.img`。
* `backup`分区:预留,暂时没有用。后续跟`android`一样作为`recovery`的 `backup`使用。
* `rootfs`分区:存放`ubuntu`文件系统,只读。
* `userdata`分区:存放`app`临时生成的文件或者是给最终用户使用。可读写,挂载在`/userdata`目录下。


![](https://img-blog.csdnimg.cn/aa8e81b86e6c4af1bf3c72e7b6fec06b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATmV1dGlvbndlaQ==,size_20,color_FFFFFF,t_70,g_se,x_16)


### 二、rk356x-ubuntu-package-file


进入`tools/linux/Linux_Pack_Firmware/rockdev`目录,`cat rk356x-ubuntu-package-file`:



NAME Relative path

#HWDEF HWDEF
package-file package-file
bootloader Image/MiniLoaderAll.bin
parameter Image/parameter.txt
uboot Image/uboot.img
misc Image/misc.img
boot Image/boot.img
recovery Image/recovery.img
rootfs Image/rootfs.img
userdata RESERVED
backup RESERVED


不难看出该文件用于指定分区与打包镜像的对应关系!以下是打包`RK`格式的`Ubuntu`固件日志:



neutionwei@32b7b9ddcaab:~/project/rk356x_linux_release_20211019$ ./build.sh updateimg
processing option: updateimg
File name is ROC-RK3568-PC-UBUNTU20.04-GPT
Rename the file? [N|y]n
Make update.img
start to make update.img…
Resize rootfs partition size
dumpe2fs 1.44.1 (24-Mar-2018)
Android Firmware Package Tool v1.66
------ PACKAGE ------
Add file: ./package-file
Add file: ./package-file done,offset=0x800,size=0x11a,userspace=0x1
Add file: ./Image/MiniLoaderAll.bin
Add file: ./Image/MiniLoaderAll.bin done,offset=0x1000,size=0x719c0,userspace=0xe4
Add file: ./Image/parameter.txt
Add file: ./Image/parameter.txt done,offset=0x73000,size=0x1d5,userspace=0x1
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数嵌入式工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

img

img

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)

img

最后

资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

51459088c6af944156ee24.jpg" alt=“img” style=“zoom: 67%;” />

最后

资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

更多资料点击此处获qu!!

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值