【Linux驱动开发】编译Android12源码+

编译Android12源码

  • [1. 简单描述](#1. 简单描述)
  • [2. 准备资料](#2. 准备资料)
  • [3. 编译Android12](#3. 编译Android12)

1. 简单描述

  1. 基于讯为电子rk3568教程

2. 准备资料

  • rk_android12.0_sdk_20220720.tar.gz

3. 编译Android12

  1. 解压
bash 复制代码
tar -vxf rk_android12.0_sdk_20220720.tar.gz
  1. 设置屏幕配置
bash 复制代码
rk_android12.0_sdk/kernel-4.19/arch/arm64/boot/dts/rockchip/topeet_screen_choose.dtsi
  1. 整体编译 Android 固件
bash 复制代码
source javaenv.sh
java -version
  1. 使能编译环境
bash 复制代码
source build/envsetup.sh
lunch rk3568_s-userdebug
  1. 开始整体编译
bash 复制代码
./build.sh -AUCKu

rockdev/Image-rk3568_s // 编译成功镜像存放位置

  1. 单独编译u-boot (方法一)
csharp 复制代码
./build.sh -U
  • 编译完成后在 u-boot 目录会生成 rk356x_spl_loader_v1.13.112.bin 文件、uboot.img

    文件、 resource.img 三个镜像文件

  • 同 时 编 译 成 功 后 会 将 rk356x_spl_loader_v1.13.112.bin 、 uboot.img 拷 贝

    到 rockdev/Image-rk3568_s 目录下,rk356x_spl_loader_v1.13.112 会改名为

    MiniLoaderAll.bin。 MiniLoaderAll.bin 也就是一级 loader,只需要将 MiniLoaderAll.bin 和 uboot.img 烧写到开发板即 可更新 uboot。

  1. 单独编译u-boot (方法二)
csharp 复制代码
cd u-boot/
./make.sh rk3568
  • 这样编译后会在 uboot 目录下生成 uboot.img 和 rk356x_spl_loader_v1.13.112.bin,但是不会 拷 贝 到 rockdev/Image-rk3568_s 下 面 , 所 以 需 要 烧 写 uboot 目 录 下 的 uboot.img 和rk356x_spl_loader_v1.13.112.bin, 烧 写 时 将 rk356x_spl_loader_v1.13.112.bin 重 命 名 为MiniLoaderAll.bin,再烧写。
  1. 编译 Android 内核(很慢)
bash 复制代码
./build.sh -CKA

编译后会在 rockdev/Image-rk3568_s 目录下生成 boot.img,boot.img 为内核镜像。boot.img

镜像里面包含了设备树镜像。所以烧写 boot.img

  1. 编译 Android 内核(快)

cd kernel-4.19 // 讯为提供的sdk默认有 makekernel.sh,没有创建,内容如下

bash 复制代码
make ARCH=arm64 CC=../prebuilts/clang/host/linux-x86/clang-r416183b/bin/clang
LD=../prebuilts/clang/host/linux-x86/clang-r416183b/bin/ld.lld rockchip_defconfig
android-11.config && make ARCH=arm64 CC=../prebuilts/clang/host/linux-x86/clang-r416183b/bin/clang LD=../prebuilts/clang/host/linux-x86/clang-r416183b/bin/ld.lld BOOT_IMG=../rockdev/Image-rk3568_s/boot.img rk3568-evb1-ddr4-v10.img
bash 复制代码
./makekernel.sh

BOOT_IMG 是指整编 Android 源码之后在 rockdev 目录下生成的 boot.img,所以在单独编 译 Android内核之前,一定要整编 Android 源码。整编 Android 源码生成的 rockdev 目录下的 boot.img 镜像里面不仅仅只有 kernel 和 resource,还有其他文件。当我们修改了内核源码并单 独编译 Android 内核时,kernel 和resource 发生了改变,这时候需要指定一个 boot.img,然后 将新编译的 kernel 和 resource 覆盖进去。打包完成之后,在 kernel 目录下会有新 boot.img 镜像 生成,就可以把这个 boot.img镜像单独烧写到开发板中进行调试了 如果不指定 BOOT_IMG,会在下载镜像之后,系统跑进 recovery 模式,而不是进入正常 的启动流程 rk3568-evb1-ddr4-v10.img 的意思是指定所使用的设备树 DTS;打包完后,在 kernel 目录有 boot.img 镜像生成,就可以把这个 boot.img 镜像单独烧入到 机器中进行调试了。

  1. 编译 Android 文件系统
bash 复制代码
vim build.sh
:set number!
# make installclean
./build.sh -A

编译完成后镜像文件会在 rockdev/Image-rk3568_s 目录下生成 super.img,单独烧写super.img 即可

各种镜像解释如下:

  • boot.img: 包含 kernel.img 和 resource.img 镜像文件
  • boot-debug.img: 与 boot.img 的差别是 user 固件可以烧写这个 boot.img 进行
    root权限操作
  • config.cfg: 烧写工具的配置文件,可以直接导入烧写工具显示需要烧写的选项。
  • MiniLoaderAll.bin: 包含一级 loader。
  • misc.img: 包含 recovery-wipe 开机标识信息,烧写后会进行 recovery。
  • parameter.txt: 包含分区信息。
  • pcba_small_misc.img : 包含 pcba 开机标识信息,烧写后会进入简易版 pcba 模式。
  • pcba_whole_misc.img: 包含 pcba 开机标识信息,烧写后会进入完整版 pcba 模式
  • recovery.img: 包含 recovery-ramdis、 kernel、 dtb
  • super.img: 包含 odm、 product、 vendor、 system、 system_ext 分区内容。
  • trust.img: 包含 BL31、 BL32 RK3566/RK3568 没有生成这个固件, 不需要烧写
  • uboot.img: 包含 uboot 固件
  • vbmeta.img: 包含 avb 校验信息, 用于 AVB 校验
  • update.img: 包含以上需要烧写的 img 文件, 可以用于工具直接烧写整个固件包。
  1. 编译 Android 模块

再安卓目录下运行以下指令,把mm添加到环境中

bash 复制代码
source javaenv.sh
source build/envsetup.sh
lunch rk3568_s-userdebug
bash 复制代码
ls ~/Android/rk_android12.0_sdk/out/target/product/rk3568_s/vendor/lib/hw/audio.primary.rk30board.so
  1. 打包 update.img
bash 复制代码
./build.sh -u

打包完成会在 rockdev/Image-rk3568_s 目录下生成 update.img 镜

相关推荐
_OP_CHEN1 分钟前
【Linux系统编程】(二十九)深度解密静态链接:从目标文件到可执行程序的底层魔法
linux·操作系统·链接·文件系统·c/c++·静态链接
RisunJan8 分钟前
Linux命令-lprm(删除打印队列中任务)
linux·运维·服务器
zzzsde10 分钟前
【Linux】进程(5):命令行参数和环境变量
linux·运维·服务器
代码游侠13 分钟前
复习——Linux设备驱动开发笔记
linux·arm开发·驱动开发·笔记·嵌入式硬件·架构
The森14 分钟前
Linux IO 模型纵深解析 03:同步 IO 与异步 IO
linux·服务器
草莓熊Lotso1 小时前
Linux 文件描述符与重定向实战:从原理到 minishell 实现
android·linux·运维·服务器·数据库·c++·人工智能
历程里程碑1 小时前
Linux22 文件系统
linux·运维·c语言·开发语言·数据结构·c++·算法
wdfk_prog9 小时前
[Linux]学习笔记系列 -- [drivers][input]input
linux·笔记·学习
盟接之桥9 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
忆~遂愿10 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能