5.5 物联网RK3399项目开发实录-Android开发之定制 Android 固件(wulianjishu666)

物联网入门到项目实干案例下载:

https://pan.baidu.com/s/1fHRxXBqRKTPvXKFOQsP80Q?pwd=h5ug

5. 定制 Android 固件

5.1. 前言

注意: 以下内容仅适用于 Android8.1 及以下版本。

定制 Android 固件,有两种方法:

  • 改源码,然后编译生成固件。

  • 在现有固件的基础上进行裁剪。

前一种方法,可以从各个层面去定制 Android,自由度大,但对编译环境和技术要求比较高,参见《编译 Android 固件》一文。 现在介绍后一种方法,分为解包、定制和打包三个阶段。主机操作系统为 Linux,采用的工具为开源软件。

5.2. 固件格式

统一固件 release_update.img,内含启动加载器 loader.img 和真正的固件数据 update.img

release_update.img
|- loader.img
`- update.img

update.img 是个复合文件,内含多个文件,由 package-file 描述。一个典型的 package-file 为:

# NAME Relative path package-file package-file bootloader Image/MiniLoaderAll.bin parameter
Image/parameter.txt trust
Image/trust.img uboot
Image/uboot.img misc
Image/misc.img resource
Image/resource.img kernel
Image/kernel.img boot
Image/boot.img recovery
Image/recovery.img system
Image/system.img backup RESERVED
#update-script update-script #recover-script recover-script
  • package-file

    • update.img 的打包说明文件,update.img 里也含有一份 package-file

  • Image/MiniLoaderAll.bin

    • 启动加载器,即 bootloader。

  • Image/parameter.txt

    • 参数文件,可以设定内核启动参数,里面有重要的分区信息。

  • Image/trust.img

    • trust.img 是 U-Boot 作为二级 loader 的打包。

  • Image/misc.img

    • misc 分区的映像,用来控制 Android 是正常启动,还是进入急救模式(Recovery Mode)。

  • Image/kernel.img

    • Android 内核。

  • Image/resource.img

    • 资源映像,内有内核开机图片和内核设备树信息 (Device Tree Blob)。

  • Image/boot.img

    • Android 内核的内存启动盘 (initrd),是内核启动后最先加载的根文件系统,包含重要的初始化动作,一般不需要改动。

  • Image/recovery.img

    • Android 急救模式的映像,内含内核和急救模式的根文件系统。

  • Image/system.img

    • 对应于 Android 的 /system 分区,是以下的定制对象。

解包,就是提取 release_update.img 里的 update.img, 然后解压出内含 package-file 所声明的多个文件。

打包,则是个逆过程,将 package-file 将所列的多个文件合成 update.img,加进 loader.img,最终生成 release_update.img 。

5.3. 工具准备

git clone https://github.com/TeeFirefly/rk2918_tools.git
cd rk2918_tools
make
sudo cp afptool img_unpack img_maker mkkrnlimg /usr/local/bin

5.4. 解包

  • 解压 release_update.img

$ cd /path/to/your/firmware/dir
$ img_unpack Firefly-RK3399_20161027.img img
rom version: 6.0.1
build time: 2016-10-27 14:58:18
chip: 33333043
checking md5sum....OK
  • 解压 update.img

$ cd img
$ afptool -unpack update.img update
Check file...OK
------- UNPACK -------
package-file	0x00000800	0x00000280
Image/MiniLoaderAll.bin	0x00001000	0x0003E94E
Image/parameter.txt	0x00040000	0x00000350
Image/trust.img	0x00040800	0x00400000
Image/uboot.img	0x00440800	0x00400000
Image/misc.img	0x00840800	0x0000C000
Image/resource.img	0x0084C800	0x0003FE00
Image/kernel.img	0x0088C800	0x00F5D00C
Image/boot.img	0x017EA000	0x0014AD24
Image/recovery.img	0x01935000	0x013C0000
Image/system.img	0x02CF5000	0x2622A000
RESERVED	0x00000000	0x00000000
UnPack OK!
  • 查看 update 目录下的文件树

$ cd update/
$ tree
.
├── Image
│   ├── boot.img
│   ├── kernel.img
│   ├── MiniLoaderAll.bin
│   ├── misc.img
│   ├── parameter.txt
│   ├── recovery.img
│   ├── resource.img
│   ├── system.img
│   ├── trust.img
│   └── uboot.img
├── package-file
└── RESERVED

1 directory, 12 files

这样,固件就解包成功了,下面开始定制。

5.5. 定制

5.5.1. 定制 system.img

system.img 是个 ext4 文件系统格式的映像文件,可以直接挂载到系统进行修改:

sudo mkdir -p /mnt/system
sudo mount -o loop Image/system.img /mnt/system
cd /mnt/system
# 修改里面的东西,注意剩余空间,不能添加太多的 APK
# 修改完毕,要卸载
cd /
sudo umount /mnt/system

注意: 该 system.img 的剩余空间基本为 0, 如果不是删除文件,就需要对 system.img 进行扩容,并根据最后的文件大小,相应地调整 parameter 文件里的分区设置。以下是如何扩展空间的示例,在扩展前,先运行 mount 来查看系统挂载情况,确保 system.img 已经卸载:

# 增加 128M 的空间
dd if=/dev/zero bs=1M count=128 >> Image/system.img
# 扩展文件系统信息
e2fsck -f Image/system.img
resize2fs Image/system.img

5.5.2. 打包

首先要检查一下 system.img 的大小,对照 parameter 文件的分区情况(可参考文档 Parameter 文件格式,作必要的大小调整。

例如 parameter.txt 文件里的 system 分区大小,可以找到 CMDLINE 一行,然后找到 system 字符串:

0x00200000@0x000B0000(system)

@ 前面就是分区的大小,单位是 512 字节,这样该 system 分区的大小就是:

$ echo $(( 0x00200000 * 512 / 1024 / 1024))M
1024M

只要 system.img 的大小不超过 1024M,parameter 文件就不用更改。

如果分区不用更改,可以直接用烧写工具将新的 system.img 烧写到开发板的 system 分区上做试验。否则,需要制作新固件并烧写后再行测试。

以下是打包成统一固件 update.img 所需要的步骤:

  • 合成 update.img :

# 当前的目录仍然为 update/ ,内有 package-file, package-file 所列的文件均存在
# 将参数文件拷贝一份到 paramter, 因为 afptool 默认要用到
$ cp Image/parameter.txt parameter
$ afptool -pack . ../update_new.img
------ PACKAGE ------
Add file: ./package-file
Add file: ./Image/MiniLoaderAll.bin
Add file: ./Image/parameter.txt
Add file: ./Image/trust.img
Add file: ./Image/uboot.img
Add file: ./Image/misc.img
Add file: ./Image/resource.img
Add file: ./Image/kernel.img
Add file: ./Image/boot.img
Add file: ./Image/recovery.img
Add file: ./Image/system.img
Add file: ./RESERVED
Add CRC...
------ OK ------
Pack OK!
  • 合成 release_update.img :

$ img_maker -rk33 loader.img update_new.img release_update_new.img
generate image...
append md5sum...
success!

release_update_new.img 即为最终生成的可烧写的统一固件文件。

5.6. 常见问题

5.6.1. 固件的版本在哪设置

在 parameter 文件中找到下行并修改即可,注意版本号为数字,中间两个点号不能省略。

AND_FW_VER: 7.1.1
  • 24
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: VxWorks 5.5是一款实时操作系统(RTOS)的版本,该版本的开发文档提供了开发者所需的全部信息和指导,以便能够使用这个操作系统进行软件开发开发文档通常包含以下内容:系统架构和配置指南、安装和使用指南、API和函数参考手册、开发工具的说明和使用方法等。 在系统架构和配置指南中,文档会介绍VxWorks 5.5的整体结构和各个模块的功能。它还会提供配置系统所需的步骤和指导,以确保开发者正确地设置和调整操作系统。 安装和使用指南会详细说明如何在目标硬件上安装VxWorks 5.5,并配置开发环境。这些指南会包含从下载VxWorks 5.5到在硬件上运行和调试的步骤,以及可能遇到的常见问题的解决方法。 API和函数参考手册是开发者在使用VxWorks 5.5时的重要参考。其中会列出所有可用的API和函数,以及它们的参数、返回值和使用方法。开发者可以根据自己的需求和要解决的问题,查找和使用合适的API和函数。 开发文档还会介绍各种开发工具,例如编译器、调试器和性能分析工具。文档会解释这些工具的功能和使用方法,以及如何结合VxWorks 5.5进行开发和调试。 总之,VxWorks 5.5开发文档对于那些希望使用这个实时操作系统进行软件开发开发者来说是非常重要的。它提供了系统架构、安装和使用指南、API和函数参考手册,以及开发工具的说明和使用方法等方面的信息和指导,帮助开发者顺利地进行软件开发工作。 ### 回答2: VxWorks 5.5是一款嵌入式实时操作系统,其开发文档提供了详细的技术资料和指南,帮助开发人员理解和使用该操作系统。 VxWorks 5.5开发文档包含以下主要内容: 1. 系统架构概述:介绍VxWorks 5.5的体系结构、内核组件和系统层次结构,帮助开发人员了解其基本原理和工作方式。 2. 编程指南:提供了使用VxWorks 5.5开发嵌入式应用程序的详细指南。该指南涵盖了任务管理、内存管理、进程间通信、中断处理和设备驱动程序等方面的内容,帮助开发人员编写高效、可靠的嵌入式软件。 3. API参考手册:列出了VxWorks 5.5支持的各种API函数和系统调用,包括任务控制、内存分配、文件系统和网络编程等。该手册提供了函数的详细说明、参数列表和用法示例,方便开发人员快速查找和使用API函数。 4. BSP开发指南:介绍了如何为特定的硬件平台开发VxWorks 5.5的板支持包(BSP)。该指南解释了BSP的概念、结构和要求,并提供了开发BSP所需的工具和技术。 5. 配置和调试指南:详细说明了如何配置和调试VxWorks 5.5系统。该指南包括系统启动过程的步骤、配置选项的设置和调试工具的使用方法,帮助开发人员快速调试和优化嵌入式应用程序。 VxWorks 5.5开发文档的编写充分考虑了各种应用场景和开发需求,并提供了丰富的示例和实践建议。通过阅读和理解开发文档,开发人员可以更好地利用VxWorks 5.5的功能和特性,开发出高质量和可靠的嵌入式应用程序。同时,VxWorks 5.5开发文档也是学习嵌入式系统和实时操作系统开发的重要参考资料之一。 ### 回答3: VxWorks是一款实时操作系统 (RTOS),用于嵌入式系统开发。VxWorks 5.5是其版本之一,是一套非常重要的开发文档。它包含了VxWorks 5.5操作系统的安装、配置、编程接口等方面的详细说明,帮助开发人员更好地理解和使用这个操作系统。 首先,VxWorks 5.5开发文档提供了操作系统的安装和配置指南。通过这些指南,开发人员可以了解如何在目标硬件上正确地安装和配置VxWorks 5.5。这些指南详细介绍了安装和配置的步骤以及可能出现的问题和解决方案。 其次,VxWorks 5.5开发文档提供了丰富的编程接口文档。这些文档详细描述了VxWorks 5.5操作系统提供的函数和API,开发人员可以根据需要选择合适的API进行程序开发。这些编程接口文档还包括实时任务调度、内存管理、设备驱动程序等方面的说明,帮助开发人员编写高效可靠的嵌入式软件。 此外,VxWorks 5.5开发文档还提供了大量的示例代码和案例分析。这些示例代码和案例分析展示了如何使用VxWorks 5.5来解决各种实际问题,包括网络通信、文件系统、远程调试等。开发人员可以通过学习这些示例代码和案例分析,更好地理解VxWorks 5.5的使用方法,并运用到实际的项目开发中。 总之,VxWorks 5.5开发文档对于想要深入了解和使用该操作系统的开发人员来说,是一份非常宝贵的资源。通过学习这些文档,开发人员可以掌握VxWorks 5.5的安装、配置和编程接口等方面的知识,为开发高质量的嵌入式软件提供有力支持。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值