天天看點

RK3399:WSL-Ubuntu16.04編譯Android7.1 Industry

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:,安裝好之後記得再更換一下軟體源

之後我們通過添加網絡驅動器添加(映射網絡驅動器->\wsl$\Ubuntu-16.04,名字由你打開後的wsl的名稱為準,我這裡是Ubuntu-16.04):

RK3399:WSL-Ubuntu16.04編譯Android7.1 Industry

二、編譯過程

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      

安裝軟體包:

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      

解壓(解壓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      

處理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      

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/ 生成打包好的固件      

解決完問題後編譯還是比較快的:

RK3399:WSL-Ubuntu16.04編譯Android7.1 Industry

3. 燒寫

燒寫之前已經總結過,還不太清楚的可以看這裡

三、相關問題

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後取消即可。

編輯 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’

原因是 /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虛拟機虛拟記憶體大大小

修改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伺服器)才能使得修改後的參數生效。

我們執行下面的指令: