RK3399:WSL-Ubuntu16.04編譯Android7.1 Industry
文章目錄
- RK3399:WSL-Ubuntu16.04編譯Android7.1 Industry
-
- 一、搭建WSL-Ubuntu16.04
- 二、編譯過程
-
- 1. 準備編譯環境及相關檔案
- 2. HDMI+DP 顯示編譯
- 3. 燒寫
- 三、相關問題
-
- 1. No jack server running問題
- 2. Jack server SSL error問題
- 3.Caused by: java.io.IOException: '.' is not owned by 'root' but by 'user'
- 4. Out of memory error
ok,利用零碎的時間,前前後後花了幾天時間終于将rk3399-Android7.1 Industry編譯完成了,這裡總結記錄一下,避免踩重複的坑(注意你是需要的Android7.1還是Android7.1 Industry,這兩個的固件使用的場景并不同,Industry在工業和平闆和盒子等領域的使用上範圍更加廣泛,目前晶片環境更多适合這些場景,簡單來說就是這些制程的晶片國内目前可以生産)。
一、搭建WSL-Ubuntu16.04
官方建議使用Ubuntu16.04或18.04進行編譯。(個人建議使用16.04進行編譯,18.04我試過出了很多問題還沒有解決,目前使用的wsl-Ubuntu16.04編譯成功,不清楚的可以看這裡非系統盤安裝WSL-Ubuntu16.04:https://blog.csdn.net/weixin_39510813/article/details/118704027?spm=1001.2014.3001.5501,安裝好之後記得再更換一下軟體源:https://blog.csdn.net/weixin_39510813/article/details/82497416)
之後我們通過添加網絡驅動器添加(映射網絡驅動器->\wsl$\Ubuntu-16.04,名字由你打開後的wsl的名稱為準,我這裡是Ubuntu-16.04):

二、編譯過程
1. 準備編譯環境及相關檔案
https://wiki.t-firefly.com/zh_CN/Firefly-RK3399/compile_android7.1_industry_firmware.html#
基本上是按照官方給的步驟來的:
安裝并配置jdk:
sudo apt-get install openjdk-8-jdk
sudo update-alternatives --config java
sudo update-alternatives --config javac
安裝軟體包:
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
下載下傳SDK,這個地方耗時比較長,可以放到晚上下載下傳:http://www.t-firefly.com/doc/download/page/id/3.html#other_369
之後進行校驗MD5:
$ md5sum /path/to/rk3399-firefly-industry-71-20190926.7z.001
afb279a7d2966908bcf53ce2c2c05edc rk3399-firefly-industry-71-20190926.7z.001
$md5sum /path/to/rk3399-firefly-industry-71-20190926.7z.002
2bc5a41fd1056f1d1ab1f7e84f666bee rk3399-firefly-industry-71-20190926.7z.002
解壓(解壓001即可,002和001關聯的):
mkdir -p ~/proj/firefly-rk3399-Industry
cd ~/proj/firefly-rk3399-Industry
7z x /path/to/rk3399-firefly-industry-71-20190926.7z.001 -r -o.
git reset --hard
處理bundle倉庫:百度雲下載下傳[bundle壓縮包]
1. 進入SDK根目錄
cd ~/proj/firefly-rk3399-Industry
2. 下載下傳遠端bundle倉庫
git clone https://gitlab.com/TeeFirefly/rk3399-industry-nougat-bundle.git .bundle
3. 若下載下傳倉庫失敗,目前bundle倉庫大約1.4G左右,是以同步的時候可能會出現卡住或失敗的問題,可以從下方百度雲連結下載下傳并解壓到SDK根目錄,解壓指令如下:
7z x rk3399-industry-nougat-bundle.7z -r -o. && mv rk3399-industry-nougat-bundle/ .bundle/
4. 更新SDK,并且後續更新不需要再次拉取遠端倉庫,直接執行以下指令即可
.bundle/update
5. 按照提示已經更新内容到 FETCH_HEAD,同步FETCH_HEAD到firefly分支
git rebase FETCH_HEAD
2. HDMI+DP 顯示編譯
整體編譯:
./FFTools/make.sh -j8 -d rk3399-firefly -l rk3399_firefly-userdebug
打包固件:
./FFTools/mkupdate/mkupdate.sh -l rk3399_firefly-userdebug
打包完成會在 rockdev/Image-rk3399_firefly/ 生成打包好的固件
解決完問題後編譯還是比較快的:
3. 燒寫
燒寫之前已經總結過,還不太清楚的可以看這裡:https://blog.csdn.net/weixin_39510813/article/details/117261824?spm=1001.2014.3001.5501
三、相關問題
1. No jack server running問題
Jack server failed to (re)start, try ‘jack-diagnose’ or see Jack server log
No Jack server running. Try ‘jack-admin start-server’
No Jack server running. Try ‘jack-admin start-server’
根據這裡添加環境變量即可:
https://stackoverflow.com/questions/43996563/jack-admin-command-not-found
jack 伺服器可以在 Android 源代碼中的prebuilts/sdk/tools位置找到,并且可以從那裡運作。
prebuilts/sdk/tools$ ./jack-admin stop-server
prebuilts/sdk/tools$ ./jack-admin start-server
或者,可以通過運作以下指令将此檔案夾添加到 PATH:
export PATH=$PATH:~/myandroid/prebuilts/sdk/tools
2. Jack server SSL error問題
Communication error with Jack server (35), try ‘jack-diagnose’ or see Jack server log
SSL error when connecting to the Jack server. Try ‘jack-diagnose’
通過這裡發現jdk的問題,取消TLSv1, TLSv1.1 禁用:/etc/java-8-openjdk/security/java.security
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, \
DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
include jdk.disabled.namedCurves
vim打開後搜尋TLSv1後取消即可。
編輯 h o m e / . j a c k ∗ ∗ , ∗ ∗ home/.jack**,** home/.jack∗∗,∗∗home/.jack-settings 和 $home/.jack-server/config.properties,修改SERVER_PORT_SERVICE和SERVER_PORT_ADMIN的端口号,然後儲存。
SERVER_PORT_SERVICE=8078
SERVER_PORT_ADMIN=8079
3.Caused by: java.io.IOException: ‘.’ is not owned by ‘root’ but by ‘user’
根據這裡:https://blog.csdn.net/babytiger/article/details/111050099
原因是 /home/user/.jack-server應該是owner ,和group 都 應是 root ,root,但不知為啥變成了 user,user
要改回去
chown -R root .jack-server/
chgrp -R root .jack-server/
全路徑指令行
chown -R root /home/user/.jack-server
chgrp -R root /home/user/.jack-server
4. Out of memory error
FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex.rsp
Out of memory error (version 1.2-rc4 'Carnac' (298900 f95d7bdecfceb327f9d201a1348397ed8a843843 by [email protected])).
GC overhead limit exceeded.
Try increasing heap size with java option '-Xmx<size>'.
Warning: This may have produced partial or corrupted output.
[ 4% 730/16889] Building with Jack: out/target/common/obj/APPS/PhotoTable_intermediates/with-local/classes.dex
ninja: build stopped: subcommand failed.
build/core/ninja.mk:148: recipe for target 'ninja_wrapper' failed
根據這裡解決,修改Java虛拟機虛拟記憶體大大小:https://blog.csdn.net/liangtianmeng/article/details/89522092
修改Jack的配置檔案prebuilts/sdk/tools/jack-admin
這是一個管理Jack的shell腳本,找到start-server函數,直接修改其啟動參數,由原來的
JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=TMPDIR JACK_SERVER_VM_ARGUMENTS -cp LAUNCHER_JAR LAUNCHER_NAME"
更改為
JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=TMPDIR JACK_SERVER_VM_ARGUMENTS -Xmx4096m -cp LAUNCHER_JAR LAUNCHER_NAME"
此時Jack伺服器仍然在背景執行,是以我們需要将其停止,然後重新開機啟動(make會自動啟動Jack伺服器)才能使得修改後的參數生效。
我們執行下面的指令此時Jack伺服器仍然在背景執行,是以我們需要将其停止,然後重新開機啟動(make會自動啟動Jack伺服器)才能使得修改後的參數生效。
我們執行下面的指令:
先停止服務
./prebuilts/sdk/tools/jack-admin stop-server
重新開始服務
./prebuilts/sdk/tools/jack-admin start-server