[RK3568环境] 之AOSP源码编译、烧录、调试
前言:
如果您喜欢这个帖子请关注这个专栏,若有任何问题请私聊博主。若想查看该专栏其他帖子请前往
目录专栏
本专栏使用的开发板是基于firefly的的RK3568,主要是从供应链和整个生态环境来说,应该只有RK比较完善, 芯片领域同样会存在赢者通吃,如此可能RK在这一块的市场份额会最大,所以果断选择了这条路。不过这条路可比海思那些方案要复杂的得多,需要掌握的东西也多得多,从系统层面来说,我也是刚刚开始从ROM开始,之前更多的在HAL/JNI/APP方面的处理,所以本专栏的更多是对驱动开发到HAL、Frameworks、APP整个流程系统开发的笔记,大部分都白天工作中遇到一些问题的解决过程分享,也包括一些操作和使用的步骤记录,尽量会做到详细明了,或许这更加合适一个新手入门。而对于更加深层次的理解,只能期盼项目完结后再做详细的分析,所以对于专栏内容要求深度的朋友,短期内可能无法满足,感谢厚爱。近期也會羅列出本专栏相关的一些实际项目技术点以及驱动模块,比如HDMI 、音频等处理模块,包括驱动和HAL层的一些调试都会有详细的记录和分析,我们这个专栏其实本身也是一个成长的过程,更多的需要耐心和坚持,除了公司的项目和自我激励外,我相信为了不辜负大家对我的支持,是不断更新专栏的主要原因。
1. 环境介绍及步骤介绍
Core-3568J
采用RK3568四核64位Cortex-A55 处理器,主频最高2.0GHz,,集成双核心架构GPU以及高效能NPU。
AIO-3568J
开发板由核心板Core-3568J+底板MB-JM3-RK3568组成, AIO-3568J拥有RGMII、PCIE3.0、USB3.0、I2C、SPI、UART、GPIO、MIPI-DSI等丰富接口。RK3568搭载的系统是Android11.0,相对于市面上资料比较的RK3399这个系统应该算比较新的了。
-
AIO-3568J标准套装包含以下配件:
- Core-3568J 核心板一块
- 12V-2A电源适配器一个
- MB-JM3-RK3568 底板一块
- 铜管天线x2
- 双公头 USB 线一条
以上信息来自firefly官网,下面的编译过程按官网推荐的应该问题不大,只是需要留意一下注意事项,这个官网没有说。
-
主要步骤:
- 编译环境搭建
- Android11.0 源码编译
- 烧录
- APP调试&ASOP源码调试
2. Android11.0 AOSP源码下载及编译步骤
注意事项:
- 1)编译Android对机器的配置要求比较高,硬性要求16G内存以上否则编译不过
- 2)磁盘空间最低220G否则也过不了
- 3)64位CPU,不得低于I5-9400,否则编译很慢,没有工作;CPU建议I5-10代以上,尽量线程数大于8,I5-9400线程数6,也可以用不过卡。
- 虚拟机编译也能过,不过难用得很
下面看一下最终编译完成的目录结构以及目录文件大小,就知道磁盘空间的要求是必须的,只算必须的开发套件就已经有182G。
-
源码目录
XX:rk3568jA11g210824$ du -h --max-depth=1 rk356xA11.0/ 300M rk356xA11.0/RKTools 12M rk356xA11.0/rkst 270M rk356xA11.0/u-boot 1.7G rk356xA11.0/cts 4.9G rk356xA11.0/.bundle 311M rk356xA11.0/hardware 87M rk356xA11.0/libcore 443M rk356xA11.0/developers 420K rk356xA11.0/libnativehelper 26M rk356xA11.0/dalvik 85M rk356xA11.0/art 22M rk356xA11.0/build 228M rk356xA11.0/device 3.3G rk356xA11.0/rockdev 704M rk356xA11.0/system 91G rk356xA11.0/out 409M rk356xA11.0/test 1.1G rk356xA11.0/packages 935M rk356xA11.0/vendor 20K rk356xA11.0/FFTools 896K rk356xA11.0/pdk 64M rk356xA11.0/bionic 4.6G rk356xA11.0/kernel 7.9G rk356xA11.0/external 20M rk356xA11.0/bootable 3.4M rk356xA11.0/compatibility 1.9G rk356xA11.0/frameworks 30M rk356xA11.0/sdk 44M rk356xA11.0/rkbin 103M rk356xA11.0/toolchain 233M rk356xA11.0/mkcombinedroot 706M rk356xA11.0/tools 43G rk356xA11.0/prebuilts 150M rk356xA11.0/development 17M rk356xA11.0/platform_testing 19G rk356xA11.0/.git 182G rk356xA11.0/
2.1 编译环境的搭建(Ubuntu 18.04)
准备工作
编译 Android 对机器的配置要求较高:
- 64 位 CPU
- 16GB 物理内存+交换内存
- 250GB 空闲的磁盘空间
建议使用 Ubuntu 18.04 操作系统
- 安装 OpenJDK 8:
sudo apt-get install openjdk-8-jdk
提示:安装 openjdk-8-jdk,会更改 JDK 的默认链接,这时可用:
$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac
来切换 JDK 版本。SDK 在找不到操作系统默认 JDK 的时候会使用内部设定的 JDK 路径,因此,为了让同一台机器可以编译 Android 5.1 及之前的版本,去掉链接更方便:
$ sudo /var/lib/dpkg/info/openjdk-8-jdk:amd64.prerm remove
- Ubuntu 12.04 软件包安装参考:
sudo apt-get install git gnupg flex bison gperf build-essential \
zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
g++-multilib mingw32 tofrodos gcc-multilib ia32-libs \
python-markdown libxml2-utils xsltproc zlib1g-dev:i386 \
lzop libssl1.0.0 libssl-dev
- Ubuntu 14.04 软件包安装参考:
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl \
zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev \
x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils \
xsltproc unzip python-pyelftools python3-pyelftools device-tree-compiler \
libfdt-dev libfdt1 libssl-dev liblz4-tool python-dev
- Ubuntu 16.04 或 18.04 软件包安装参考:
sudo apt-get update
sudo apt-get install git gnupg flex bison gperf libsdl1.2-dev \
libesd-java libwxgtk3.0-dev squashfs-tools build-essential zip curl \
libncurses5-dev zlib1g-dev pngcrush schedtool libxml2 libxml2-utils \
xsltproc lzop libc6-dev schedtool g++-multilib lib32z1-dev lib32ncurses5-dev \
lib32readline-dev gcc-multilib libswitch-perl libssl-dev unzip zip device-tree-compiler \
liblz4-tool python-pyelftools python3-pyelftools -y
2.2 源码编译
注意:
- 1)如果你发现很多乱七八糟的错误,而且都是很明显的错误,比如gcc not found,那基本可以说上面的环境没有搭建成功。
2.2.1 编译步骤
Android11.0 SDK 源码 和 bundle压缩包下载地址:https://www.t-firefly.com/doc/download/103.html
-
1)官网下载系统文件
XX:/opt/iyangfeng/rk3568jA11g210824$ ls Firefly-RK356X_Android11.0_git_20210824.7z.001 Firefly-RK356X_Android11.0_git_20210824.7z.003 Firefly-RK356X_Android11.0_git_20210824.7z.005 Firefly-RK356X_Android11.0_git_20210824.7z.001.md5sum Firefly-RK356X_Android11.0_git_20210824.7z.003.md5sum Firefly-RK356X_Android11.0_git_20210824.7z.005.md5sum Firefly-RK356X_Android11.0_git_20210824.7z.002 Firefly-RK356X_Android11.0_git_20210824.7z.004 Firefly-RK356X_Android11.0_git_20210824.7z.002.md5sum Firefly-RK356X_Android11.0_git_20210824.7z.004.md5sum
-
2)md5校验(也可以不校验,主要避免下载文件出错)
$ md5sum Firefly-RK356X_Android11.0_git_20210824.7z.001 $ md5sum Firefly-RK356X_Android11.0_git_20210824.7z.002 $ md5sum Firefly-RK356X_Android11.0_git_20210824.7z.003 $ md5sum Firefly-RK356X_Android11.0_git_20210824.7z.004 $ md5sum Firefly-RK356X_Android11.0_git_20210824.7z.005 b4c3d014a688d230bb25156a4c5aea26 Firefly-RK356X_Android11.0_git_20210824.7z.001 1ddfec58d0d69aee6029982fcbe4343c Firefly-RK356X_Android11.0_git_20210824.7z.002 d08b16c244545ac68b496e2980d3c6a7 Firefly-RK356X_Android11.0_git_20210824.7z.003 2b628cc10a55214b8d9a3619673c01c3 Firefly-RK356X_Android11.0_git_20210824.7z.004 6f7e63955c96ca3c9ba6e4e49d52c90c Firefly-RK356X_Android11.0_git_20210824.7z.005
-
3)解压
XX:/opt/iyangfeng/rk3568jA11g210824$ 7z x ./Firefly-RK356X_Android11.0_git_20210824.7z.001 -ork356xA11.0
Everything is Ok
Folders: 17
Files: 41
Size: 19474313268
Compressed: 18799227464
L5-XX:/opt/iyangfeng/rk3568jA11g210824/rk356xA11.0$ cd rk356xA11.0
L5-XX:/opt/iyangfeng/rk3568jA11g210824/rk356xA11.0$ git reset --hard
正在检出文件: 100% (912824/912824), 完成.
HEAD 现在位于 98378ba401 support RK3568B2 and improve os stability
-
4)从gitlab更新代码
- 官网的操作命令
#1. 进入SDK根目录 cd ~/proj/RK356X_Android11.0 #2. 下载远程bundle仓库 git clone https://gitlab.com/TeeFirefly/rk356x-android11-bundle.git .bundle #3. 若下载仓库失败,目前bundle仓库占用空间较大,所以同步的时候可能会出现卡住或失败的问题, # 可以从云盘下载bundle并解压到SDK根目录,解压指令如下: 7z x rk356x-android11-bundle.7z -r -o. && mv rk356x-android11-bundle/ .bundle/ #4. 更新SDK,并且后续更新不需要再次拉取远程仓库,直接执行以下命令即可 .bundle/update #5. 按照提示已经更新内容到 FETCH_HEAD,同步FETCH_HEAD到firefly分支 git rebase FETCH_HEAD
- 本地操作命令日志
XX:/opt/iyangfeng/rk3568jA11g210824/rk356xA11.0$ git clone https://gitlab.com/TeeFirefly/rk356x-android11-bundle.git .bundle
正克隆到 '.bundle'...
remote: Enumerating objects: 23, done.
remote: Counting objects: 100% (23/23), done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 23 (delta 6), reused 0 (delta 0), pack-reused 0
展开对象中: 100% (23/23), 完成.
正在检出文件: 100% (9/9), 完成.
XX:/opt/iyangfeng/rk3568jA11g210824/rk356xA11.0$ cp ../rk356x-android11-bundle.7z ./
--------------------------
XX:/opt/iyangfeng/rk3568jA11g210824/rk356xA11.0$ 7z x rk356x-android11-bundle.7z -r -o. && mv rk356x-android11-bundle/ .bundle/
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=zh_CN.UTF-8,Utf16=on,HugeFiles=on,64 bits,40 CPUs Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz (306F2),ASM,AES-NI)
Scanning the drive for archives:
1 file, 2531753970 bytes (2415 MiB)
Extracting archive: rk356x-android11-bundle.7z
--
Path = rk356x-android11-bundle.7z
Type = 7z
Physical Size = 2531753970
Headers Size = 1899
Method = LZMA2:24
Solid = +
Blocks = 2
Everything is Ok
Folders: 39
Files: 56
Size: 2580991566
Compressed: 2531753970
----------------------------------
#4. 更新SDK,并且后续更新不需要再次拉取远程仓库,直接执行以下命令即可
XX:/opt/iyangfeng/rk3568jA11g210824/rk356xA11.0$ .bundle/update
[Info]Update Bundle repo...
来自 https://gitlab.com/TeeFirefly/rk356x-android11-bundle
* branch master -> FETCH_HEAD
[Info]Update to FETCH_HEAD:
来自 .bundle/5.bundle
* branch HEAD -> FETCH_HEAD
[Info]Fetch .bundle/5.bundle successfully!!
XX:/opt/iyangfeng/rk3568jA11g210824/rk356xA11.0$
-------------------------------------------
#5. 按照提示已经更新内容到 FETCH_HEAD,同步FETCH_HEAD到firefly分支
git rebase FETCH_HEAD
XX:/opt/iyangfeng/rk3568jA11g210824/rk356xA11.0$ git rebase FETCH_HEAD
当前分支 firefly 是最新的。
2.2.2 Core-3568J 产品编译方法
-
带HDMI编译
-j 后面是数字表示多个线程,可根据自己的CPU性能线程数来修改 建议不低于j8
默认编译HDMI XX:/opt/iyangfeng/rk3568jA11g210824/rk356xA11.0$ ./FFTools/make.sh -d rk3568-firefly-aioj -j8 -l rk3568_firefly_aioj-userdebug 可以使用 -j16 编译比较快 下面这条是打包指令也就把所有的文件需要烧录的分区系统文件打包成一个文件去烧录 XX:/opt/iyangfeng/rk3568jA11g210824/rk356xA11.0$ ./FFTools/mkupdate/mkupdate.sh -l rk3568_firefly_aioj-userdebug will build update.img -------------------KERNEL_DTS:rk3568-firefly-aioj ********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 update.img OK. Make update image ok! /opt/iyangfeng/rk3568jA11g210824/rk356xA11.0 这里是编译完的日志,你需要烧录的文件也在这个目录 rename rockdev/Image-rk3568_firefly_aioj/update.img to rockdev/Image-rk3568_firefly_aioj/AIO-3568J_Android11_HDMI_210910.img reach@reach-G250-005-L5-XX:/opt/iyangfeng/rk3568jA11g210824/rk356xA11.0$
3. 烧录测试
参考官网链接:
USB升级固件
固件下载参考:
资料下载
3.1 固件烧录步骤
-
安装RK USB驱动
-
操作设备使得进入到可升级状态
这个地方官网有说明,我就不具体说了,不过可以有个简单的办法,而且不需要操作,非常推荐
PS C:\Users\yangf> adb shell rk3568_firefly_aioj:/ $ reboot loader PS C:\Users\yangf>
然后可以去加载固件
-
加载固件&升级
先把之前打包好固件 rockdev/Image-rk3568_firefly_aioj/AIO-3568J_Android11_HDMI_210910.img 下载到本地
-
升级成功,重启
点击
升级
开始升级
显示成功后可能需要拔掉电源,重启才能启动,尽量等待久一点比如5分钟。重启后可以看到firefly的图标
-
注意事项
-
加载固件失败
提示加载失败如图,建议换新版本的工具比如2.81,从专栏提供的百度网盘可以下载这些工具。本地工具所在目录:F:\workgit\android\android3568\tools\RKDevTool_Release_v2.81
-
若还有问题可以通过下面操作
-
4.APP调试&ASOP源码调试
4.1 开启开发调试环境
-
1)从设置->已经连接的设备修改为connect pc
-
- 进入系统版本多点击几下,打开开发者选项,其实不操作这个也可以
4.2 APP调试
这个正常流程就不多写了,一般有APP开发经验或者百度下很好办
4.3 AOSP源码调试
这个内容比较多,我晚一点更新,感谢大家支持!
5.参考
-
- 以上提到的工具我会百度网盘给出一个分享连接
后语:
静静地爱一个人,那也是一种幸福!
如果您喜欢这个帖子请关注这个专栏,若有任何问题请私聊博主,若有相关建议或疑难问题可邮件475566936@qq.com咨询。若想查看该专栏其他帖子请前往