構建「Amlogic」的編譯環境在「Ubuntu 18.04」
目的
構建專屬於「Amlogic」的編譯環境,本文參考資料為官方網站的「How to build compiled server」。
概要
ATV 的全名為「Android TV」,是由「Google」所推出專門為「數位媒體播放器」而設計的「Android OS」,包含「專門為『TV』所設計的框架以及標準」,如下:
然而,就特定角度來說,它亦為「AOSP」的一環,因此,其編譯環境基本上會與「AOSP」一致。
但還是必須強調,「ATV」與「AOSP」並不完全相等,其中最大的差異就是「ATV」必須經 Google 的認證,如「XTS」等,並且需要遵守「Android 兼容性定義文檔(CDD)」,詳細可以參考「此連結」,如下:
回到主題,雖然先前有提到其「編譯環境」基本上與「AOSP」的環境一致,但是,仍有差異;因為這與「Life of an Android Release」相關,如下:
在上圖的「1」至「5」,分別代表著「Android 釋出時所經歷的階段」,其中,「1」代表著由 Google 團隊所釋出的最原始版本,而「5」則是代表著最終端的產品版本,如銷售端、客戶端等;而「2」至「4」則是表示「釋出所經歷的過程」,全文請參考「此連結」。
為什麼要經歷如此多階段呢?
事實上,筆者的立場是屬於上圖的階段「3」,是製造廠,我們所負責的是系統整合,而我們的上游就是「晶片廠」,是圖中的階段「2」;這意即,我們拿到的「Android」已經不是最原始由 Google 所釋出的版本,而是經過晶片廠「定製」後的版本。
在「該篇」文章是這樣描述:「Any device with the latest version of Android must be based on an SoC with the proper software support for it.」,如下:
其意思為「任何搭載最新版本的『Android』的設備都必須基於『SoC』,並為其提供適當的軟件支持。該軟件通常被稱為『板支持包(BSP)』,它包含特定於芯片的供應商實作和所有『AOSP』及其缺少的框架部分。」。
簡單說,就是「為了要支援硬體設備,廠商會在原始的『AOSP』上加入相關支持包,包含『晶片驅動』、『特定框架代碼』或是『定製應用程式』…等。」。
而我們目前的合作廠商主要是「Amlogic」;所以若我們的「開發環境」就不能只支持「AOSP」,還要再補上「Amlogic」套件包。
正文
在「Ubuntu 18.04 LTS」的系統建置完成後,首先是構建「AOSP」的編譯環境,該部份可以參考「Amlogic 官方文件」,如下:
亦或是「Google 官方文件」,如下:
呃,「Ubuntu 18.04」的文件終於釋出了,之前還沒有的說。
總之,下方為筆者總結後的指令步驟:
Step 1: Establishing AOSP Environment
sudo apt-get updatesudo 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 \
libgl1-mesa-dev libxml2-utils xsltproc unzip
Step 2: Establishing Amlogic required packages
sudo apt-get updatesudo apt-get install openjdk-8-jdk automake make git gperf zip dos2unix \
bison perl gcc g++ tig pkg-config cpp-aarch64-linux-gnu \
gcc-4.8-aarch64-linux-gnu unzip lib32z1 libx11-dev lib32z1-dev ccache \
gitk libxml2-utils libssl-devsudo apt-get install bcsudo apt-get install python-pip python-dev
備註:在「Ubuntu 18.04」版本,若「gcc-4.8-aarch64-linux-gnu」無法安裝,請更名為「gcc-aarch64-linux-gnu」。
Step 3: Amlogic Toolchain
tar -zxvf amlogic_toolchains.tar.gzcd amlogic_toolchains./install.sh
備註:點擊下載「Amlogic Toolchain」。
Step 4: Compile
export BOARD_COMPILE_ATV=truesource build/envsetup.shlunch <Your Project>-userdebugmake otapackage -j16
該編譯步驟會因為「專案」不同而有所差異,此外,不同版本的編譯方式亦不相同,如「Android 9」與「Android 10」的編譯方式就不同。
Trouble Shooting
「OpenSSL Version」
其可能原因之一為「OpenSSL」的版本問題,「OpenSSL」為「編譯」過程中所必要的套件之一;但由於 OpenSSL 是 Ubuntu 的預設套件,因為我們並不需要額外安裝。
但問題是「Ubuntu 18.04」版中所內建的「OpenSSL」是「1.1.1」;而在「 Ubuntu 16.04」的則是「1.0.2」,兩者並不相容,因此我們可以藉由指令去確認「OpenSSL」的版本:
openssl version -a
若非「1.0.2」,請先將原本的「OpenSSL」移除,並下載「1.0.2」版本,下載請點「此連結」,當下載完成後,安裝指令如下:
sudo dpkg -i openssl 1.0.2g-lubuntu4.15 amd64.deb
「 GNU MCU Eclipse RISC-V Embedded GCC」
其問題的發生原因也跟版本有關,「RISC-V」是一開源的指令架構,而此套件在 2017 年「被更名」,其「更名原因」可以直接參考「此連結」。
解決方式是自行安裝套件,下載請點「此連結」,並請下載對應的版本。
備註:目前筆者所使用的版本為「gnu-mcu-eclipse-riscv-none-gcc-7.2.0–1–20171109–1926-debian64.tgz」,「備份連結」。