firefly-rk3399jd4核心板+底板:编译android

0. 环境
win10电脑+ubuntu18虚拟机
firefiy-rk3399 jd4v2 核心板+底板

0.1 准备硬件需求
编译 Android 对机器的配置要求较高:
64 位 CPU
16GB 物理内存+交换内存
30GB 空闲的磁盘空间用于构建,源码树另外占用大约 25GB, 如果要编译源码则还需要 150GB 的磁盘空间。
设置虚拟机硬盘220GB先。编译完还有64.4GB空闲的。

0.2 依赖
安装 OpenJDK 8:
sudo apt-get install openjdk-8-jdk

提示:安装 openjdk-8-jdk,会更改 JDK 的默认链接,这时可用:
$ sudo update-alternatives --config java
[sudo] password for xxjianvm: 
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      manual mode
* 2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode

Press to keep the current choice[*], or type selection number: 2


$ sudo update-alternatives --config javac

来切换 JDK 版本。SDK 在找不到操作系统默认 JDK 的时候会使用内部设定的 JDK 路径,因此,为了让同一台机器可以编译 Android 5.1 及之前的版本,去掉链接更方便:
$ sudo /var/lib/dpkg/info/openjdk-8-jdk:amd64.prerm remove

Ubuntu16.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


1. 准备android源码
到这里下载
https://www.t-firefly.com/doc/download/92.html

通过百度网盘下载,如果需要加速,可以到pdd上买

firefly_rk3399_industry7.1_git_20211216

2. 拷贝源码到虚拟机
我的路径
$ cd ~/firefly_rk3399_industry7.1_git_20211216
$ tree
.
├── bundle
│   └── rk3399-industry-nougat-bundle.7z
├── firefly_rk3399_industry7.1_git_20211216.7z.001
├── firefly_rk3399_industry7.1_git_20211216.7z.001.md5sum
├── firefly_rk3399_industry7.1_git_20211216.7z.002
├── firefly_rk3399_industry7.1_git_20211216.7z.002.md5sum
├── firefly_rk3399_industry7.1_git_20211216.7z.003
├── firefly_rk3399_industry7.1_git_20211216.7z.003.md5sum
├── firefly_rk3399_industry7.1_git_20211216.7z.004
└── firefly_rk3399_industry7.1_git_20211216.7z.004.md5sum

1 directory, 9 files

3. 准备SDK
7z x firefly_rk3399_industry7.1_git_20211216.7z.001 -r -o.
git reset --hard

注意:解压后务必要先更新下远程仓库。 
把~/firefly_rk3399_industry7.1_git_20211216/bundle/rk3399-industry-nougat-bundle.7z
复制到
~/firefly_rk3399_industry7.1_git_20211216/rk3399-industry-nougat-bundle.7z

解压
7z x rk3399-industry-nougat-bundle.7z  -r -o. && mv rk3399-industry-nougat-bundle/ .bundle/

更新SDK,并且后续更新不需要再次拉取远程仓库,直接执行以下命令即可
.bundle/update

按照提示已经更新内容到 FETCH_HEAD,同步FETCH_HEAD到firefly分支
git rebase FETCH_HEAD


4. 整体编译公版hdmi(出现了问题3,觉得每次都要从头来,因此转为分步编译)
export LC_ALL=C
./FFTools/make.sh  -d rk3399-firefly-aiojd4 -j8 -l rk3399_firefly_aiojd4-userdebug
./FFTools/mkupdate/mkupdate.sh -l rk3399_firefly_aiojd4-userdebug

问题1:flex-2.5.39: loadlocale.c:130: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed.

sudo gedit ~/.bashrc
最后添加
export LC_ALL=C
然后 
source ~/.bashrc

问题2:fatal error: error in backend: IO failure on output stream.
空间不足而已

问题3:SSL error when connecting to the Jack server. Try 'jack-diagnose'
cd prebuilts/sdk/tools/ 
./jack-admin kill-server 
./jack-admin start-server 
sudo gedit /etc/java-8-openjdk/security/java.security

jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
    include jdk.disabled.namedCurves
修改为
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
    include jdk.disabled.namedCurves
    
    
5. 分步编译
5.1 环境变量
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

5.2 编译uboot:
cd u-boot/
make rk3399_defconfig
make ARCHV=aarch64 -j8

5.3 编译kernel:
cd kernel/
make ARCH=arm64 firefly_defconfig
make -j8 ARCH=arm64 rk3399-firefly-aiojd4.img

5.4 编译android:
source build/envsetup.sh
lunch rk3399_firefly_aiojd4-userdebug
make -j8
./mkimage.sh

5.5 打包成统一固件
编译完可以用Firefly官方的脚本打包成统一固件,执行如下命令:
./FFTools/mkupdate/mkupdate.sh -l rk3399_firefly_aiojd4-userdebug

6. 大概耗时
i7的笔记本cpu,3.2GHZ,虚拟机开了8线程
大概开始时间:16:30
问题3出错了,17:05再次开始执行编译
18:14就完成了。

~/firefly_rk3399_industry7.1_git_20211216/rockdev/Image-rk3399_firefly_aiojd4$ tree
.
|-- AIO-3399JD4_Industry7.1.2_HDMI_220710.img
|-- MiniLoaderAll.bin
|-- baseparameter.img
|-- boot.img
|-- kernel.img
|-- misc.img
|-- oem.img
|-- parameter.txt
|-- pcba_small_misc.img
|-- pcba_whole_misc.img
|-- recovery.img
|-- resource.img
|-- system.img
|-- trust.img
`-- uboot.img

0 directories, 15 files

这个是打包好的系统镜像:AIO-3399JD4_Industry7.1.2_HDMI_220710.img

后面观察到firefly_rk3399_industry7.1_git_20211216/device/rockchip/rk3399/rk3399_firefly_aiojd4则会个文件夹是存放和板卡相关的配置文件的

参考链接
https://wiki.t-firefly.com/zh_CN/Core-3399-JD4/compile_android7.1_industry_firmware.html

你可能感兴趣的:(嵌入式Linux,android,嵌入式硬件)