HiKey是一款搭載華為海思麒麟620芯片,符合Linaro 96Boards標准的SBC開發板。它采用8核64位Cortex-A53處理器,主頻高達1.2GHz。
HiKey作為AOSP支持的一款產品,同時也得到Linaro的大力支持,很多最新功能都會在上面進行驗證。AOSP及內核代碼能得到及時更新,是一款不錯的用於學習研究的開發板。
同時HiKey還支持Debian、OpenEmbeded等操作系統。
硬件資源
軟件資源
Host OS : Ubuntu 14.04
環境配置
在下載編譯AOSP之前,需要對Host OS進行一些配置:
sudo apt-get update |
AOSP下載
國內不翻牆是無法直接下載AOSP的。所幸的是可以通過鏡像來下載,清華的鏡像就是一個不錯的選擇。
下載repo:
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo chmod +x repo
首先下載一個repo,這里面對REPO_URL進行了修改:
REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
使用上述repo,進行init和sync:
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
查看Android分支版本號:
git --git-dir .repo/manifests/.git/ branch -a
最近的Android分支有:
remotes/origin/android-7.1.2_r2 remotes/origin/android-7.1.2_r23 remotes/origin/android-7.1.2_r24 remotes/origin/android-7.1.2_r25 remotes/origin/android-7.1.2_r27 remotes/origin/android-7.1.2_r28 remotes/origin/android-7.1.2_r29 remotes/origin/android-7.1.2_r3 remotes/origin/android-7.1.2_r30 remotes/origin/android-7.1.2_r32 remotes/origin/android-7.1.2_r33 remotes/origin/android-7.1.2_r4 remotes/origin/android-7.1.2_r5 remotes/origin/android-7.1.2_r6 remotes/origin/android-7.1.2_r8 remotes/origin/android-7.1.2_r9 remotes/origin/android-8.0.0_r1 remotes/origin/android-8.0.0_r10 remotes/origin/android-8.0.0_r11 remotes/origin/android-8.0.0_r12 remotes/origin/android-8.0.0_r13 remotes/origin/android-8.0.0_r15 remotes/origin/android-8.0.0_r16 remotes/origin/android-8.0.0_r17 remotes/origin/android-8.0.0_r2 remotes/origin/android-8.0.0_r3 remotes/origin/android-8.0.0_r4 remotes/origin/android-8.0.0_r7 remotes/origin/android-8.0.0_r9
在AOSP下載之后,需要切換到特定分支:
repo init -b android-8.0.0_r17 repo sync -j8
創建自己的分支:
repo start my_android_0.0.0 --all repo checkout my_android_7.0.0
至此AOSP代碼已經下載完畢,雖然會有一定的延時,但是已經基本上是最新狀態了。
清華AOSP:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
還有中科大的AOSP mirror:
repo:
curl https://storage-googleapis.proxy.ustclug.org/git-repo-downloads/repo > ~/bin/repo
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest
不同mirror間的切換,需要修改如下兩文件:
repo:
REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'
.repo/manifests.git/config:
url = git://mirrors.ustc.edu.cn/aosp/platform/manifest
Kernel下載
在下載了AOSP之后,可以生成Image文件。但是內核部分是編譯好的可執行文件,並沒有源碼。
AOSP配套的內核代碼也可以通過清華鏡像下載:
https://aosp.tuna.tsinghua.edu.cn/kernel/common.git
HiKey專用內核鏡像:
https://aosp.tuna.tsinghua.edu.cn/kernel/hikey-linaro.git
切換分支到Kernel 4.4:
git checkout -b android-hikey-linaro-4.4 origin/android-hikey-linaro-4.4
Linaro也維護了一些HiKey的Kernel:
https://android-git.linaro.org/git/kernel/linaro-android.git
和
https://git.linaro.org/people/john.stultz/android-dev.git
HiKey Mali庫
由於AOSP中缺少HiKey的Mali庫文件,還需要拷貝Mali庫文件到system/lib下面。
在AOSP根目錄下創建vendor目錄,將https://github.com/arnoldlu/common-use/tree/master/android/vendor/下載到vendor中。
同時修改編譯拷貝腳本device/linaro/hikey/device-common.mk:
diff --git a/device-common.mk b/device-common.mk index d3ecf60..9b12c64 100644 --- a/device-common.mk +++ b/device-common.mk @@ -65,6 +65,13 @@ PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.usb.accessory.xml:system/etc/permissions/android.hardware.usb.accessory.xml \ frameworks/native/data/etc/android.hardware.usb.host.xml:system/etc/permissions/android.hardware.usb.host.xml +#Copy Graphics binaries +PRODUCT_COPY_FILES += $(call add-to-product-copy-files-if-exists,\ + vendor/mali/64bit/libGLES_mali.so:system/lib64/egl/libGLES_mali.so\ + vendor/mali/64bit/gralloc.hikey.so:system/lib64/hw/gralloc.hikey.so\ + vendor/mali/32bit/libGLES_mali.so:system/lib/egl/libGLES_mali.so \ + vendor/mali/32bit/gralloc.hikey.so:system/lib/hw/gralloc.hikey.so) + # Include BT modules $(call inherit-product-if-exists, device/linaro/hikey/wpan/ti-wpan-products.mk)
Kernel+AOSP編譯
編譯之前配置環境變量:
export ARCH=arm64 |
然后開始編譯Kernel代碼:
make hikey_defconfig |
將編譯生成的文件考本到device/linaro/hikey-kernel中:
cp arch/arm64/boot/dts/hisilicon/hi6220-hikey.dtb $PWD/../../device/linaro/hikey-kernel/ |
PS:由於有些Kernel沒有默認生成Image-dtb文件,需要打開內核選項。
在更行了內核Image之后,就可以開始漫長的AOSP編譯了:
source build/envsetup.sh lunch hikey-userdebug make -j4 |
在out/target/product/hikey下會找到需要的Image文件和符號表。
編譯中可能遇到的問題
Jack Server內存不夠
diff --git a/tools/jack-admin b/tools/jack-admin index 96a4dc3..13055d3 100755 --- a/tools/jack-admin +++ b/tools/jack-admin @@ -26,7 +26,7 @@ umask 077 JACK_HOME="${JACK_HOME:=$HOME/.jack-server}" JACK_CLIENT_SETTING="${JACK_CLIENT_SETTING:=$HOME/.jack-settings}" TMPDIR=${TMPDIR:=/tmp} -JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8}" +JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m}" JACK_EXTRA_CURL_OPTIONS=${JACK_EXTRA_CURL_OPTIONS:=} LAUNCHER_JAR="$JACK_HOME/launcher.jar"
出現“Try increasing heap size with java option '-Xmx<size>'
”錯誤。
在shell中執行下面命令:
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g" ./prebuilts/sdk/tools/jack-admin kill-server ./prebuilts/sdk/tools/jack-admin start-server
缺少Mali庫文件
diff --git a/device-common.mk b/device-common.mk index d3ecf60..9b12c64 100644 --- a/device-common.mk +++ b/device-common.mk @@ -65,6 +65,13 @@ PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.usb.accessory.xml:system/etc/permissions/android.hardware.usb.accessory.xml \ frameworks/native/data/etc/android.hardware.usb.host.xml:system/etc/permissions/android.hardware.usb.host.xml +#Copy Graphics binaries +PRODUCT_COPY_FILES += $(call add-to-product-copy-files-if-exists,\ + vendor/mali/64bit/libGLES_mali.so:system/lib64/egl/libGLES_mali.so\ + vendor/mali/64bit/gralloc.hikey.so:system/lib64/hw/gralloc.hikey.so\ + vendor/mali/32bit/libGLES_mali.so:system/lib/egl/libGLES_mali.so \ + vendor/mali/32bit/gralloc.hikey.so:system/lib/hw/gralloc.hikey.so) + # Include BT modules $(call inherit-product-if-exists, device/linaro/hikey/wpan/ti-wpan-products.mk)
刷機
HiKey刷機需要在fastboot模式下,有兩種方法進入fastboot:
參照:http://wiki.lemaker.org/HiKey(LeMaker_version):Setting_Jumper
短接J601 1-2:系統會上電啟動,不需要按下Power Key。
短接J601 3-4:系統會進入燒錄eMMC設備,可以再次燒錄bootloader。
進入device/linaro/hikey/installer,執行sudo ./flash-all.sh /dev/ttyUSB0,會燒錄所有的image文件。
短接J601 5-6:強制進入fastboot模式。
另一種通過adb reboot bootloader,快速進入fastboot模式。
進入fastboot模式后,就可以使用fastboot命令。
fastboot flash boot boot.img,下載內核。
fastboot flash cache cache.img,下載cache。
fastboot flash userdata userdata.img,下載userdata。
fastboot flash system system.img,下載AOSP。
更多分區下載,請參考:http://wiki.lemaker.org/HiKey%28LeMaker_version%29:Quick_Start
下載完成后,通過fastboot reboot重啟進入Android。
調試
UART調試
除了可以基於USB,使用ADB進行調試之外,還可以基於UART串口進行調試。
接線方法如下:
J1802-01 | DGND |
J1802-13 | UART3_RX |
J1802-11 | UART3_TX |
更詳細請參考:http://wiki.lemaker.org/HiKey(LeMaker_version):UART
GPIO擴展
如果需要使用GPIO進行擴展,可以在sysfs中進行操作。
詳情請參考:http://wiki.lemaker.org/HiKey(LeMaker_version):How_to_control_the_GPIO_on_the_board
擴展板接口
低速擴展板接口J1802:http://wiki.lemaker.org/HiKey(LeMaker_version):Low_Speed_Expansion_Connector
告訴擴展板接口J1801:http://wiki.lemaker.org/HiKey(LeMaker_version):High_Speed_Expansion_Connector
完整文檔請參考:http://wiki.lemaker.org/HiKey(LeMaker_version)
其他鏈接
使用Minicom基於串口調試HiKey:http://www.cnblogs.com/arnoldlu/p/6255051.html
Android相關小知識搜集:http://www.cnblogs.com/arnoldlu/p/6207872.html