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下载
国内不FQ是无法直接下载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
”错误。
在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