5.4 物联网RK3399项目开发实录-Android开发之编译 Android10.0 固件(wulianjishu666)

物联网项目开发实例:

链接:https://pan.baidu.com/s/11VQMhHfIL9mZhNlls4wmjw?pwd=0gfa

4. 编译 Android10.0 固件

4.1. 下载 Android SDK

由于 SDK 较大,可以去下载页面选择云盘下载 Firefly-RK3399_Android10.0_git_20211222.7z

下载链接

注:源码与bundle压缩包均存放在云盘中

下载完成后,在解压前先校验下 MD5 码:

$ md5sum /path/to/Firefly-RK3399_Android10.0_git_20211222.7z.001
$ md5sum /path/to/Firefly-RK3399_Android10.0_git_20211222.7z.002
$ md5sum /path/to/Firefly-RK3399_Android10.0_git_20211222.7z.003
$ md5sum /path/to/Firefly-RK3399_Android10.0_git_20211222.7z.004
$ md5sum /path/to/Firefly-RK3399_Android10.0_git_20211222.7z.005fb41fcdc48b1cf90ecac4a5bb8fafc7a  Firefly-RK3399_Android10.0_git_20211222.7z.001
82d665fb54fb41245d9317312e7b7578  Firefly-RK3399_Android10.0_git_20211222.7z.002
0dd40827976200a6fb61623c9e87fe7c  Firefly-RK3399_Android10.0_git_20211222.7z.003
32324c3afe615394ee4cdf842c53ea8d  Firefly-RK3399_Android10.0_git_20211222.7z.004
9b1656ae07b4fe9ddf7d9ef2dfa2f95a  Firefly-RK3399_Android10.0_git_20211222.7z.005

然后解压:

cd ~/proj/
7z x ./Firefly-RK3399_Android10.0_git_20211222.7z.001 -ork3399_Android10.0
cd ./rk3399_Android10.0
git reset --hard

以下为从 gitlab 处更新的方法::

#1. 进入SDK根目录
cd ~/proj/rk3399_Android10.0#2. 下载远程bundle仓库
git clone https://gitlab.com/TeeFirefly/rk3399-android10.0-bundle.git .bundle#3. 若下载仓库失败,目前bundle仓库占用空间较大,所以同步的时候可能会出现卡住或失败的问题,
#   可以从下方百度云链接下载并解压到SDK根目录,解压指令如下:7z x rk3399-android10.0-bundle.7z  -r -o. && mv rk3399-android10.0-bundle/ .bundle/#4. 更新SDK,并且后续更新不需要再次拉取远程仓库,直接执行以下命令即可
.bundle/update#5. 按照提示已经更新内容到 FETCH_HEAD,同步FETCH_HEAD到firefly分支
git rebase FETCH_HEAD

4.2. 编译 Android SDK

4.2.1. 整体编译

4.2.1.1. 公版编译
4.2.1.1.1. HDMI
./FFTools/make.sh -j24 -d rk3399-firefly-aio -l rk3399_firefly_aio-userdebug
./FFTools/mkupdate/mkupdate.sh -l rk3399_firefly_aio-userdebug
4.2.1.2. 显示屏 DM-M10R800 编译
4.2.1.2.1. LVDS+HDMI
./FFTools/make.sh  -d rk3399-firefly-aio-lvds-HSX101H40C -j8 -l rk3399_firefly_aio_lvds-userdebug
./FFTools/mkupdate/mkupdate.sh -l rk3399_firefly_aio_lvds-userdebug
4.2.1.3. 双目摄像头 SV-TAYSH-TQ 编译
4.2.1.3.1. HDMI+SV-TAYSH-TQ

注意:
该摄像头只支持AIO-3399J标准版,不支持HDMI_IN版本

  • 修改 kernel/arch/arm64/boot/dts/rockchip/rk3399-firefly-aio.dtsi

    xc7160b@1b{
+    status = "disabled";};xc7160f@1b{
+    status = "disabled";};XC6130b@23{
+    status = "okay";};XC7022b@1b{
+    status = "okay";};
  • 编译

./FFTools/make.sh -j24 -d rk3399-firefly-aio -l rk3399_firefly_aio-userdebug
./FFTools/mkupdate/mkupdate.sh -l rk3399_firefly_aio-userdebug

4.2.2. 分步编译 AIO-3399J

编译前执行如下命令配置环境变量:

source ./FFTools/build.sh
  • 编译 kernel:

cd ~/proj/rk3399_Android10.0/kernel/
make ARCH=arm64 firefly_defconfig android-10.config rk3399.config
make ARCH=arm64 BOOT_IMG=../rockdev/Image-rk3399_firefly_aio/boot.img rk3399-firefly-aio.img -j8
  • 注意:若进行内核debug,需要将resource.img和kernel.img打包进去boot.img后对boot分区进行烧写才能生效。

  • 编译 uboot:

cd ~/proj/rk3399_Android10.0/u-boot/
./make.sh rk3399
  • 编译 Android:

cd ~/proj/rk3399_Android10.0/
lunch rk3399_firefly_aio-userdebug
make -j8
./mkimage.sh

4.2.3. 打包成统一固件

编译完可以用Firefly官方的脚本打包成统一固件,执行如下命令:

./FFTools/mkupdate/mkupdate.sh -l rk3399_firefly_aio-userdebug

根据不同的-l XXX-userdebug参数,打包生成统一固件会存放在不同目录下(rockdev/Image-XXX/): product名XXX_XXX_日期XXX.img

在 Windows 下打包统一固件 update.img 也很简单,将编译生成的文件拷贝到 AndroidTool 的 rockdev\Image 目录中,然后运行 rockdev 目录下的 mkupdate.bat 批处理文件即可创建 update.img 并存放到 rockdev\Image 目录里。

4.3. 其他编译说明

4.3.1. Android10.0不能直接烧写kernel.img和resource.img

Android10.0的kernel.img和resource.img包含在boot.img中,更新编译kernel后需要在android根目 录下执行./mkimage.sh重新打包boot.img。打包后烧写rockdev下面的boot.img,可以使用如下方法单 独编译kernel。

4.3.2. 单独编译kernel生成boot.img

编译的原理:在kernel目录下将编译生成的 kernel.img 和 resource.img 替换到旧的 boot.img 中, 所以编译的时候需要用 BOOT_IMG=xxx 参数指定boot.img的路径,命令如下:

cd kernel
make ARCH=arm64 firefly_defconfig android-10.config
make ARCH=arm64 BOOT_IMG=../rockdev/Image-rk3399_firefly_aio/boot.img rk3399-firefly-aio.img -j24

编译后可以直接烧写kernel目录下的boot.img到机器的boot位置。

4.4. 分区镜像

  • boot.img 包含ramdis、kernel、dtb

  • dtbo.img Device Tree Overlays

  • kernel.img includekernel,目前无法单独烧写,需要打包到boot.img内烧写

  • MiniLoaderAll.bin 包含一级loader

  • misc.img 包含recovery-wipe开机标识信息,烧写后会进行recovery

  • odm.img 包含android odm,包含在super.img分区内,单独烧写需要用fastboot烧写

  • parameter.txt 包含分区信息

  • pcba_small_misc.img 包含pcba开机标识信息,烧写后会进入简易版pcba模式

  • pcba_whole_misc.img 包含pcba开机标识信息,烧写后会进入完整版pcba模式

  • recovery.img 包含recovery-ramdis、kernel、dtb

  • resource.img 包含dtb,kernel和uboot阶段的log及uboot充电logo,目前无法单独烧写,需要打包到boot.img内烧写

  • super.img 包含odm、vendor、system分区内容

  • system.img 包含android system,包含在super.img分区内,单独烧写需要同fastboot烧写

  • trust.img 包含BL31、BL32

  • uboot.img 包含uboot固件

  • vbmeta.img 包含avb校验信息,用于AVB校验

  • vendor.img 包含android vendor,包含在super.img分区内,单独烧写需要同fastboot烧写

  • update.img 包含以上需要烧写的img文件,可以用于工具直接烧写整个固件包

4.5. 烧写固件

参考:《升级固件》

4.6. 其他安卓版本

  • 主要维护:

    《编译 Android7.1 industry 固件》

    《编译 Android10. 固件》

  • 支持但不维护:

    《编译 Android7.1 固件》

    《编译 Android8.1 固件》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/775341.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android-Handler详解_原理解析

为了方便阅读将文章分为使用篇和源码解析两篇,上一篇已经写了Handler是什么、有什么、怎们用,这一片从源码的角度分析完整流程,看看Handler消息机制到底是啥原理。才疏学浅,如有错误,欢迎指正,多谢。 完整…

标定系列——预备知识-OpenCV中实现Rodrigues变换的函数(二)

标定系列——预备知识-OpenCV中实现Rodrigues变换的函数(二) 说明记录 说明 简单介绍罗德里格斯变换以及OpenCV中的实现函数 记录

ClickHouse10-ClickHouse中Kafka表引擎

Kafka表引擎也是一种常见的表引擎,在很多大数据量的场景下,会从源通过Kafka将数据输送到ClickHouse,Kafka作为输送的方式,ClickHouse作为存储引擎与查询引擎,大数据量的数据可以得到快速的、高压缩的存储。 Kafka大家…

Ubuntu 配置 kubernetes 学习环境,让外部访问 dashboard

Ubuntu 配置 kubernetes 学习环境 一、安装 1. minikube 首先下载一下 minikube,这是一个单机版的 k8s,只需要有容器环境就可以轻松启动和学习 k8s。 首先你需要有Docker、QEMU、Hyperkit等其中之一的容器环境,以下使用 docker 进行。 对…

【C++】编码规范之可靠性原则

C编码规范中的可靠性原则是确保代码的可读性、可维护性和稳定性,以下是几个小点及其例子: 避免使用全局变量: 如果需要多个变量在全局范围内使用,可用context(结构体/类)解决耦合性问题 // 不推荐的写法&…

65W智能快充—同为科技桌面PDU插座推荐

近10年,移动设备的智能化、功能化已经完全且紧密的融入到我们的基础生活与工作当中。 在常态化的电子设备的应用中,设备的电力续航以及后续的供电充电就尤为重要。 就目前而言,所有消费电子产品中的输入以及充电的接口,usb-c可以…

酷开科技依托酷开系统用“平台+产品+场景”塑造全屋智能生活!

杰弗里摩尔的“鸿沟理论”中写道:高科技企业推进产品的早期市场和产品被广泛接受的主流市场之间,存在着一条巨大的“鸿沟”。“鸿沟”,指产品吸引早期接纳者后、赢得更多客户前的那段间歇,以及其中可预知和不可预知的阻碍。多数产…

面试中会被问到的GIT问题解答(含答案)

在现代软件开发中,Git已经成为了版本控制系统的事实标准。无论是在个人项目还是大型企业级开发中,Git都是不可或缺的工具。因此,掌握Git的基本操作和高级特性对于软件开发者来说是非常重要的。以下是根据提供的文件内容,总结出的3…

基于Rflysim平台的无人机拦截三维比例导引算法仿真

【后厂村路钢铁侠出品】 一、Rflysim简介 RflySim是一套专为科研和教育打造的Pixhawk /PX4 和MATLAB/Simulink生态系统或工具链,采用基于模型设计(Model-Based Design, MBD)的思想,可用于无人系统的控制和安全测试。…

如何创建azure pipeline

Azure Pipelines是一种持续集成和持续交付(CI/CD)工具,可以帮助开发团队自动化构建、测试和部署应用程序。以下是创建Azure Pipeline的步骤: 登录到Azure DevOps(https://dev.azure.com/)。在Azure DevOps…

区块链食品溯源案例实现(一)

引言: 食品安全问题一直是社会关注的热点,而食品溯源作为解决食品安全问题的重要手段,其重要性不言而喻。传统的食品溯源系统往往存在数据易被篡改、信息不透明等问题,而区块链技术的引入,为食品溯源带来了革命性的变革…

设计模式之装饰模式解析

装饰模式 1)概述 1.定义 动态地给一个对象增加一些额外的职责,在增加对象功能时,装饰模式比生成子类实现更为灵活。 2.作用 装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为。 3.结构图 4.角色 Component&#xf…

【React】React 内置 Hook

React 内置 Hook 是一组允许你在函数组件中使用 state 和其他 React 特性的函数。它们极大地扩展了函数组件的功能,使得在无需编写 class 的情况下也能使用 React 的全部功能。以下是一些主要的 React 内置 Hook 的介绍: 1.useState useState 是用于在函数组件中添加状态(…

深入理解 @Transactional 注解在 Spring 中的应用

前言:在 Java 开发中,事务管理是非常重要的一环。Spring 框架提供了Transactional注解来简化事务管理的操作,本文将深入介绍Transactional注解的用法,并结合代码示例进行详细讨论。 1.Transactional 注解简介 Transactional注解是…

银行卡的分类

银行卡是银行账户的一种体现形式,它是由银行机构发行的具有消费信用、转账结算、存取现金等全部或部分功能作为结算支付工具的各类卡的统称。 (1)按是否具有授信额度分类 ①借记卡:借记卡是指发卡银行向申请人签发的,没…

Machine Learning机器学习之向量机(Support Vector Machine,SVM)

目录 前言 算法提出背景: 核心思想: 原理: 应用领域: 一、支持向量机分类(主要变体) 二、构建常见的支持向量机模型 基于Python 中的 Scikit-learn 库构建线性支持向量机(SVM) 三、向…

06. 详解 Java 的 Object 类和常见类

Object 类 java.lang.Object 作为所有 Java 类的祖先&#xff0c;编译系统默认继承 Object 类&#xff0c;Object 类包含了所有 Java 类的公共属性和方法。 Object() 构造方法getClass():Class<?>public boolean equals(Object obj) 比较两对象封装的数据是否相等&…

SQLite中的动态内存分配(五)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite中的原子提交&#xff08;四&#xff09; 下一篇&#xff1a;SQLite使用的临时文件&#xff08;二&#xff09; ​概述 SQLite使用动态内存分配来获得 用于存储各种对象的内存 &#xff08;例如&#xff1a…

Django开发复盘

一、URL 对于一个不会写正则表达式的蒟蒻来说&#xff0c;在urls.py中就只能傻傻的写死名字&#xff0c;但是即便这样&#xff0c;还会有很多相对路径和绝对路径的问题&#xff08;相对ip端口的路径&#xff09;&#xff0c;因为我们网页中涉及到页面跳转&#xff0c;涉及到发送…

uniapp 用web-view 嵌套uniapp

1. uniapp 用web-view 嵌套uniapp uniapp开发的APP要嵌套uniapp开发的h5,并且APP后面还要打包H5,这就涉及app和h5之间的通信,h5和h5之间的通信。 1.1. 准备工作 无论是app和h5通信还是 h5和h5之间的通信都是需要引入web-view的sdk文件 我下载的是1.5.2版本,代码如下 !(functi…