前言:
如果您喜欢这个帖子请关注这个专栏,若有任何问题请私聊博主。若想查看该专栏其他帖子请前往
目录专栏
本专栏使用的开发板是基于firefly的的RK3568,主要是从供应链和整个生态环境来说,应该只有RK比较完善, 芯片领域同样会存在赢者通吃,如此可能RK在这一块的市场份额会最大,所以果断选择了这条路。不过这条路可比海思那些方案要复杂的得多,需要掌握的东西也多得多,从系统层面来说,我也是刚刚开始从ROM开始,之前更多的在HAL/JNI/APP方面的处理,所以本专栏的更多是对驱动开发到HAL、Frameworks、APP整个流程系统开发的笔记,大部分都白天工作中遇到一些问题的解决过程分享,也包括一些操作和使用的步骤记录,尽量会做到详细明了,或许这更加合适一个新手入门。而对于更加深层次的理解,只能期盼项目完结后再做详细的分析,所以对于专栏内容要求深度的朋友,短期内可能无法满足,感谢厚爱。近期也會羅列出本专栏相关的一些实际项目技术点以及驱动模块,比如HDMI 、音频等处理模块,包括驱动和HAL层的一些调试都会有详细的记录和分析,我们这个专栏其实本身也是一个成长的过程,更多的需要耐心和坚持,除了公司的项目和自我激励外,我相信为了不辜负大家对我的支持,是不断更新专栏的主要原因。
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这个系统应该算比较新的了。
以上信息来自firefly官网,下面的编译过程按官网推荐的应该问题不大,只是需要留意一下注意事项,这个官网没有说。
注意事项:
下面看一下最终编译完成的目录结构以及目录文件大小,就知道磁盘空间的要求是必须的,只算必须的开发套件就已经有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/
firefly编译步骤
编译 Android 对机器的配置要求较高:
建议使用 Ubuntu 18.04 操作系统
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
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
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
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
注意:
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 是最新的。
带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$
参考官网链接: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的图标
注意事项
这个正常流程就不多写了,一般有APP开发经验或者百度下很好办
这个内容比较多,我晚一点更新,感谢大家支持!
后语:
静静地爱一个人,那也是一种幸福!
如果您喜欢这个帖子请关注这个专栏,若有任何问题请私聊博主,若有相关建议或疑难问题可邮件[email protected]咨询。若想查看该专栏其他帖子请前往
目录专栏