HiKey960 开发板 android 编译
我們可以用 Android Open Source Project (AOSP) 源碼和相關的硬件特有二進制文件為 Google 的手機/平板,如 Nexus 系列,Pixel 系列等編譯鏡像,這有時為我們對 Android 系統的研究調試及開發提供了極大的便利。除此之外,為了 Android 系統能夠得到更加廣泛的應用,Google 官方還對兩款參考開發板提供了支持,及 HiKey 和 HiKey 960 ,因而我們也可以為方便簡單地為它們編譯鏡像。
HiKey 和 HiKey960 開發板是 Google Android 官方提供支持的開發板。Google 有提供為這兩塊開發板編譯內核的文檔,地址為 https://source.android.com/source/devices 。不過需要注意的是,這個頁面的中文版,提供的是為 HiKey 開發板編譯內核的方法,英文版則同時描述了為 HiKey 和 HiKey960 開發板編譯內核的方法。HiKey 和 HiKey960 是兩塊不同的開發板,它們的硬件配置,內核編譯方法還是有著細微的差別。
HiKey960 有 3GB RAM 的配置,而 HiKey 則只有 1GB 和 2GB 的 RAM 配置。HiKey960 板子如下圖:
hikey960
使用下面的命令可以下載,構建并在 HiKey960 開發板上運行 Android。
編譯用戶空間
下載 Android 源碼樹
$ repo init -u https://android.googlesource.com/platform/manifest -b master $ repo sync -j24下載并提取二進制文件到 Android 源碼樹
$ wget https://dl.google.com/dl/android/aosp/arm-hikey960-NOU-7ad3cccc.tgz $ tar xzf arm-hikey960-NOU-7ad3cccc.tgz $ ./extract-arm-hikey960.shAndroid 本身是開源的,但設備本身集成的一些硬件,它們相關的軟件,如驅動等,則很有可能是閉源的。這個包主要包含了設備中的硬件所需要的一些閉源的二進制文件,如特有的庫等。沒有這些文件,很有可能在編譯 Android 的時候不會有問題,但在運行的時候會失敗。
構建
$ . ./build/envsetup.sh $ lunch hikey960-userdebug $ make -j2就像為任何設備編譯 Android 一樣,為 HiKey 960 編譯 Android 鏡像。
刷寫鏡像
通過打開開關 1 和 3 來進入 fastboot mode。
開關在板子的如上圖所示的這一面,具體位置是在右上角。在圖中的右上角可以清晰地看到 “Ext boot”,“Boot mode” 等字樣,開關就位于它們的左邊并緊挨它們。開關可以通過撥動白色的撥片開打開關閉。板子上可以清晰地看到這些開關的編號,實際上自上至下這些開關的編號分別為 “3”、“2” 和 “1”。
運行如下的命令刷寫鏡像
fastboot flash boot out/target/product/hikey960/boot.img fastboot flash dts out/target/product/hikey960/dt.img fastboot flash system out/target/product/hikey960/system.img fastboot flash cache out/target/product/hikey960/cache.img fastboot flash userdata out/target/product/hikey960/userdata.img關閉開關 3 并重啟板子的電源
HiKey 960 這塊板子在拿到手的時候,已經刷寫了 AOSP 編譯出的 userdebug 版鏡像。將設備臉上 USB,是可以通過 adb 訪問設備的。那通過 adb reboot bootloader 進入 fastboot 模式豈不是要方便得多么?
在大多數時候,使用 adb reboot bootloader 進入 fastboot 模式確實要方便很多,然而 adb 命令也并不是總是可用的,比如修改了內核的代碼,修改了 init 進程的代碼,而且不小心把功能改爛了,那么 Android 的啟動過程就不會執行到 adbd 啟動,也就是我們可以使用 adb 的階段。在這個時候,通過設置這些開關,就像手機上通過同時按住音量上下鍵和電源鍵進入 fastboot 模式一樣,就變得非常有用了。
編譯內核
運行下面的命令
$ git clone https://android.googlesource.com/kernel/hikey-linaro $ cd hikey-linaro $ git checkout -b android-hikey-linaro-4.4 origin/android-hikey-linaro-4.4 $ make ARCH=arm64 hikey960_defconfig $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-android- -j24Android 用戶空間代碼和內核代碼是分開存放管理的,AOSP 源碼樹中并不包含內核的代碼,而只包含一些已經編譯好內核鏡像文件。且通常針對不同硬件設備廠商的 Android linux 內核,會位于不同的 git repo 下。可以專門為內核建立一個目錄,比如也命名為 kernel,然后在這個目錄下 clone 內核代碼。除了前面看到的 hikey-linaro,還有 msm、mediatek、tegra等等版本的內核代碼。這里下載 HiKey 的 Android Linux 內核源碼,執行配置并編譯。
執行 make ARCH=arm64 hikey960_defconfig 命令,會根據預先定義好的一個配置文件,這里也就是 hikey960_defconfig 文件,在當前目錄下生成后面編譯內核所需要的 .config 文件。 hikey960_defconfig 文件實際位于內核源碼樹的 arch/arm64/configs/hikey960_defconfig,這個文件的內容類似下面這樣:
主要定義了用于控制一些功能特性的打開或關閉的開關選項。要打開或關閉內核的某一個功能特性,修改這個文件是一種非常方便的方法。
更新 boot image 中的內核
- 將編譯產生的 hi3660-hikey960.dtb (arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dtb) 復制到 hikey-kernel 目錄下,文件名仍然為 hi3660-hikey960.dtb。hikey-kernel 目錄在 AOSP 源碼庫中的具體位置為 device/linaro/hikey-kernel。
- 將編譯生成的 Image 文件 (arch/arm64/boot/Image.gz) 拷貝到 hikey-kernel 目錄下,修改文件名為 Image.gz-hikey960。這將覆蓋原來存在的同名文件。
編譯 boot image
在 Android 源碼樹的根目錄執行如下命令:
編譯 Android 用戶空間代碼時,執行 make 之前所需要做的在執行這個命令之前當然也需要做。需要注意的是,boot image 中除了包含內核之外,還包含了 init 等系統核心可執行文件等。如果 Android 用戶空間代碼及相關 image 沒有更新,可以通過命令 fastboot flash boot out/target/product/hikey960/boot.img 只更新 boot image。
設置序列號
要設置隨機的序列號,則運行:
$ fastboot getvar nve:SN@16_DIGIT_NUMBERBootloader 將通過 androidboot.serialno= 把生成的序列號導到內核。
參考文檔
Using Reference Boards
總結
以上是生活随笔為你收集整理的HiKey960 开发板 android 编译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QEMU 构建系统架构
- 下一篇: SurfaceFlinger 和 Har