[RK3568环境] 之AOSP源码编译、烧录、调试

[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)

firefly编译步骤

准备工作

编译 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驱动
    [RK3568环境] 之AOSP源码编译、烧录、调试_第1张图片

  • 操作设备使得进入到可升级状态

    这个地方官网有说明,我就不具体说了,不过可以有个简单的办法,而且不需要操作,非常推荐

    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 下载到本地

[RK3568环境] 之AOSP源码编译、烧录、调试_第2张图片
[RK3568环境] 之AOSP源码编译、烧录、调试_第3张图片
[RK3568环境] 之AOSP源码编译、烧录、调试_第4张图片

  • 升级成功,重启

    点击升级 开始升级
    [RK3568环境] 之AOSP源码编译、烧录、调试_第5张图片

    显示成功后可能需要拔掉电源,重启才能启动,尽量等待久一点比如5分钟。重启后可以看到firefly的图标

  • 注意事项

    • 加载固件失败

      提示加载失败如图,建议换新版本的工具比如2.81,从专栏提供的百度网盘可以下载这些工具。本地工具所在目录:F:\workgit\android\android3568\tools\RKDevTool_Release_v2.81
      [RK3568环境] 之AOSP源码编译、烧录、调试_第6张图片

    • 若还有问题可以通过下面操作
      [RK3568环境] 之AOSP源码编译、烧录、调试_第7张图片

4.APP调试&ASOP源码调试

4.1 开启开发调试环境

  • 1)从设置->已经连接的设备修改为connect pc
    [RK3568环境] 之AOSP源码编译、烧录、调试_第8张图片
    [RK3568环境] 之AOSP源码编译、烧录、调试_第9张图片

    1. 进入系统版本多点击几下,打开开发者选项,其实不操作这个也可以

4.2 APP调试

这个正常流程就不多写了,一般有APP开发经验或者百度下很好办

4.3 AOSP源码调试

这个内容比较多,我晚一点更新,感谢大家支持!

5.参考

    1. AndroidStudio导入源码和调试
    1. 以上提到的工具我会百度网盘给出一个分享连接

后语:

静静地爱一个人,那也是一种幸福!

如果您喜欢这个帖子请关注这个专栏,若有任何问题请私聊博主,若有相关建议或疑难问题可邮件[email protected]咨询。若想查看该专栏其他帖子请前往

目录专栏

你可能感兴趣的:(RK356x从入门到精通,android,嵌入式,android,studio,android,tv)