当前位置: 首页 > news >正文

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

RK为了方便开发与产品定制,自己定义了一套固件的分区,这些分区信息存放在parameter.txt文件中,Firefly参考这个文件定义了自己的Ubuntu分区,文件为parameter-ubuntu.txt,存放于Linux_SDKdevice/rockchip/rk356x目录下;另外在Ubuntu固件打包的时候也会用到一个package-file文件,文件名为rk356x-ubuntu-package-file,存放于Linux_SDKtools/linux/Linux_Pack_Firmware/rockdev目录下。下面我带领大家简要分析一下这两个文件!

一、parameter-ubuntu.txt

进入device/rockchip/rk356x目录,cat parameter-ubuntu.txt

FIRMWARE_VER: 1.0
MACHINE_MODEL: RK3568
MACHINE_ID: 007
MANUFACTURER: RK3568
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 0xffffffff
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,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: 0x5041524BMAGIC,不能修改,一些新的AP使用DTS,这一项没有用,为了兼容,不要删除或修改。
ATAG: 0x00200800ATAG,不能修改,一些新的AP使用DTS,这一项没有用,为了兼容,不要删除或修改。
MACHINE: 0xffffffff内核识别用,不能修改,这个定义和内核匹配。
CHECK_MASK: 0x80保留,不能修改。
TYPE: GPT指定该文件CMDLINE里面定义的分区用于创建GPT使用,不会烧录到NVMNANDEMMC等)存储器件里面。
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)@符号之前的数值是分区大小,@符号之后的数值是分区的起始位置,括号里面的字符是分区的名字。所有数值的单位是sector1sector512Bytes。上例中,boot分区起始位置为0x8000 sectors位置,大小为0x10000 sectors(32MB)
  3. 为了性能,每个分区起始地址需要32KB(64 sectors)对齐,大小也需要32KB的整数倍。
  4. 如果使用sparse格式的镜像,升级时会擦除数据,为了兼容性更好,对应的分区最好按4MB对齐,大小也按4MB整数倍配置。
  5. 使用GPT分区时,parameter里面定义的地址,都是真实的逻辑地址(LBA),例如uboot定义在0x4000,那么烧录到EMMCNAND里面时,逻辑地址也是0x4000。最后一个分区需要指定grow参数,工具会把剩余的空间都分配给最后一个分区。


下面是Ubuntu固件各个分区作用的说明:

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

二、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
Add file: ./Image/uboot.img
Add file: ./Image/uboot.img done,offset=0x73800,size=0x400000,userspace=0x800
Add file: ./Image/misc.img
Add file: ./Image/misc.img done,offset=0x473800,size=0xc000,userspace=0x18
Add file: ./Image/boot.img
Add file: ./Image/boot.img done,offset=0x47f800,size=0x1ff4800,userspace=0x3fe9
Add file: ./Image/recovery.img
Add file: ./Image/recovery.img done,offset=0x2474000,size=0x1e23800,userspace=0x3c47
Add file: ./Image/rootfs.img
Add file: ./Image/rootfs.img done,offset=0x4297800,size=0xa744fc00,userspace=0x14e8a0
Add CRC...
Make firmware OK!
------ OK ------
********RKImageMaker ver 1.66********
Generating new image, please wait...
Writing head info...
Writing boot file...
Writing firmware...
Generating MD5 data...
MD5 data generated successfully!
New image generated successfully!
Making ./Image/update.img OK.
Make update image ok!/home/neutionwei/project/rk356x_linux_release_20211019/rockdev/pack/ROC-RK3568-PC-UBUNTU20.04-GPT-20211203-2103.img 
Running build_updateimg succeeded.

三、注意点

Firefly发布的Linux_SDK在打包固件的时候,对于rootfs分区的大小,会根据rootfs的实际文件大小进行动态变化,换句话说,parameter-ubuntu.txt文件中的0x00c00000@0x00038000(rootfs),-@0x00c38000(userdata:grow)内容的rootfs分区大小指定与userdata分区起始地址会动态发生修改!这是因为不同的文件系统占用分区的大小差异很大,这样操作可避免造成分区浪费!

http://www.lryc.cn/news/255691.html

相关文章:

  • SpringBoot项目访问resources下的静态资源
  • Qt之面试经验
  • 数据库基础概念与范式反范式总结
  • tanstack/react-query使用手册
  • camera2对摄像头编码h264
  • Apache solr XXE 漏洞(CVE-2017-12629)
  • ​HTML代码混淆技术:原理、应用和实现方法详解
  • quickapp_快应用_系统接口应用
  • sqlmap400报错问题解决
  • 【S32DS报错】-2-提示Error while launching command:arm-none-eabi-gdb –version错误
  • Windows核心编程 HOOK
  • P4 Qt如何添加qss样式表文件和添加图片资源
  • 【华为OD题库-085】路灯照明II-Java
  • 附录1、vuepress中的Markdown语法
  • 【matlab程序】matlab画螺旋图|旋转图
  • 计算三位数每位上数字的和
  • Gavin Wood:财库保守主义偏离了初心,应探索 Fellowship 等更有效的资金部署机制
  • Linux: sudo: unable to execute /opt/sbin/adm: No such file or directory
  • 一文详解Java单元测试Junit
  • 进制 + 原码,反码,补码
  • 2024年网络安全行业前景和技术自学
  • cocos 关于多个摄像机,动态添加节点的显示问题,需要动态修改layer。(跟随摄像机滚动)(神坑官网也不说明一下)
  • freeswitch编译mod_av支持webrtc MCU通话
  • K8s 入门指南(一):单节点集群环境搭建
  • python socket编程6 - 使用PyQt6 开发UI界面实现TCP server和TCP client单机通讯的例子
  • centos上安装并持久化配置LVS
  • 多线程并发Ping脚本
  • SpringBoot Seata 死锁问题排查
  • 文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《考虑两阶段鲁棒优化配置的多微网合作博弈》
  • Redis常见类型