HiKey軟硬件開發環境及其調試


HiKey是一款搭載華為海思麒麟620芯片,符合Linaro 96Boards標准的SBC開發板。它采用8核64位Cortex-A53處理器,主頻高達1.2GHz。

HiKey作為AOSP支持的一款產品,同時也得到Linaro的大力支持,很多最新功能都會在上面進行驗證。AOSP及內核代碼能得到及時更新,是一款不錯的用於學習研究的開發板。

同時HiKey還支持Debian、OpenEmbeded等操作系統。

硬件資源

image

軟件資源

Host OS : Ubuntu 14.04

環境配置

在下載編譯AOSP之前,需要對Host OS進行一些配置:

sudo apt-get update
sudo apt-get install openjdk-8-jdk
sudo apt-get update
sudo apt-get -f install
sudo 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 ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

 

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
export CROSS_COMPILE=../../prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-
PWD=$(pwd)

然后開始編譯Kernel代碼:

make hikey_defconfig
make -j4

將編譯生成的文件考本到device/linaro/hikey-kernel中:

cp arch/arm64/boot/dts/hisilicon/hi6220-hikey.dtb $PWD/../../device/linaro/hikey-kernel/
cp arch/arm64/boot/Image $PWD/../../device/linaro/hikey-kernel/
cp arch/arm64/boot/Image-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

Setting Jumper.png

短接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串口進行調試。

接線方法如下:

HiKey UART3.png

 

 

J1802-01 DGND
J1802-13 UART3_RX
J1802-11 UART3_TX


更詳細請參考:http://wiki.lemaker.org/HiKey(LeMaker_version):UART

GPIO擴展

如果需要使用GPIO進行擴展,可以在sysfs中進行操作。

image

詳情請參考: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM