Android boot.img dtb.img 编译过程

news/2024/11/22 13:50:21/

最近做RK3588案子,修改dts后,导致boot.img过大,编译出错,整体分析下boot.img过大的原因是因为在打包boot.img过程中,dbt.img过大导致,所以整体分析下boot.img编译过程,尤其是dbt.img的生成过程.

  1. boot.img生成过程

在Andorid跟目录下执行, source build/envsetup.sh 然后lunch xx(xx是指版本的lunch选项),然后执行make bootimage ,可以编译生成boot.img.

在跟目录下找到build/core/Makefile,在里面找到boot.img的生成过程.如下图

其实就是把kernel ramdisk dtb打包到一起生成的boot.img

  1. dtb.img生成过程

生成boot.img的时候需要用到dtb.img,因为用到的dtb.img过大导致编译不过,所以分析下dtb.img的生成过程.

dtb.img其实就是把kernl下面的dts文件重新命名然后拷贝到out目录下面的.

先看build/core/Makefile下面dtb.img的生成过程,如下图

777行是要在out目录下面生成dtb.img.

779行是生成dtb.img的过程,就是把BOARD_PREBUILT_DTBIMAGE_DIR这个目录下面的dtb文件做个排序,然后 cat到dtb.img.

下面就去找BOARD_PREBUILT_DTBIMAGE_DIR的定义,一般会定义在device/rockchip/目录下面(如果是xx平台,就在device/xx下面),进入device/rockchip,搜寻BOARD_PREBUILT_DTBIMAGE_DIR的定义

可以看到搜到的结果在common/BoardConfig.mk下面

因为我用的平台是64位的,所以定义位第81行.BOARD_PREBUILT_DTBIMAGE_DIR为kernel目录下面的arch/arm64/boot/dts/rockchip.

  1. dtb的生成

如果kernel没有编译过,是没有dtb文件的,需要在对应的平台下面先编译kernel.编译kernel过程不讲解,编译成功后会在arch/arm64/boot/dts/rockchip目录下面生成对应的dtb文件.

dtb文件就是把dts文件做了二进制化,dtb过大肯定就是修改的dts文件导致的.

  1. 总结

编译kernel生成对应的dtb文件,3588平台为rk3588-e088.dtb,然后会把rk3588-e088.dtb cat到out目录下面生成dtb.img. 编译boot.img的时候会把dtb.img打到boot.img里面.

因为修改了dts,导致dtb生成的过大,进而导致boot.img无法生成.找到修改的dts文件,看修改的方法是否合适.如果必须那么修改dts文件,在修改boot.img的大小,也可以编译成功,记得同时修改分区表,否则无法烧录.


http://www.ppmy.cn/news/22766.html

相关文章

科技云报道:上云尚未成功,“下云潮”已悄然来临?

科技云报道原创。 云计算一直被视为是企业数字化转型的底座,很多企业都在通过加速数字化转型应对市场环境的动荡变化,一手抓降本增效,另一手也还在继续谋求突破式创新。 然而,经历这两年的疫情,活下去成为每一个企业的…

GBDT+LR算法解析及Python实现

1. GBDT LR 是什么 本质上GBDTLR是一种具有stacking思想的二分类器模型,所以可以用来解决二分类问题。 。 2. GBDT LR 用在哪 GBDTLR 使用最广泛的场景是CTR点击率预估,即预测当给用户推送的广告会不会被用户点击。 点击率预估模型涉及的训练样本一…

Python迭代器及其用法

从字面来理解,迭代器指的就是支持迭代的容器,更确切的说,是支持迭代的容器类对象,这里的容器可以是列表、元组等这些 Python 提供的基础容器,也可以是自定义的容器类对象,只要该容器支持迭代即可。如果要自…

【算法基础】归并排序解析

作者:柒号华仔 个人主页:欢迎访问我的主页 个人信条:星光不问赶路人,岁月不负有心人。 个人方向:专注于5G领域,同时兼顾其他网络协议,编解码协议,C/C,linux等,感兴趣的小…

【黑马SpringCloud(5)】es基础语法

Elasticsearch初识elasticsearchelasticsearch和lucene正向/倒排索引正向和倒排elasticsearch的一些概念分词器索引库操作文档操作查询文档查询所有全文检索精确查询range查询地理查询复合查询算分函数查询布尔查询搜索结果处理排序分页分页问题高亮总结初识elasticsearch ela…

ubuntu22.04安装mysql

sudo apt install mysql-server登录mysql sudo mysql -u root -p新增用户 CREATE USER admin% IDENTIFIED BY pass12345;grant all privileges on *.* to admin%;--------------以下没用-------------------- 方法一:默认账户登录 查看密码使用sudo cat /etc/mys…

es6反射Reflect

什么是Reflect 为什要叫做反射?因为它能做的事情,和其他语言(Java、python等)中的反射很相似。其他语言中都叫做反射了,那就共鸣。 Reflect对象与Proxy对象一样,也是 ES6 为了操作对象而提供的新 API。Re…

C3--ISE开发环境之从安装到烧写完成2023-02-06

1.下载并安装ISE 官网下载ISE安装包,Xilinx主页选择Download,之后选择ise archive,选择14.7,下载如下链接。解压后以管理员身份运行,并接受相关协议,选择System Edition并选择自己的安装路径,路…