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
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
--- a/device-common.mk
+++ b/device-common.mk
@@ -, +, @@ 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
--- a/tools/jack-admin
+++ b/tools/jack-admin
@@ -, +, @@ umask
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
--- a/device-common.mk
+++ b/device-common.mk
@@ -, +, @@ 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

HiKey软硬件开发环境及其调试的更多相关文章

  1. 突破瓶颈,对比学习:Eclipse开发环境与VS开发环境的调试对比

    曾经看了不少Java和Android的相关知识,不过光看不练易失忆,所以,还是写点文字,除了加强下记忆,也证明我曾经学过~~~ 突破瓶颈,对比学习: 学习一门语言,开发环境很重,对于VS的方形线条开发 ...

  2. PHP代码审计1-审计环境与调试函数

    审计环境与调试函数 审计环境 测试环境 常用集成环境:phpStudy.WampServer #不同的操作系统下,漏洞测试的结果也可能不一样 PHP编写工具 EditPlu Notepad++ 代码审 ...

  3. 2019-11-29-VisualStudio-使用多个环境进行调试

    title author date CreateTime categories VisualStudio 使用多个环境进行调试 lindexi 2019-11-29 08:58:49 +0800 20 ...

  4. 【Linux开发】【Qt开发】配置tslibs触摸屏库环境设置调试对应的设备挂载点

    [Linux开发][Qt开发]配置tslibs触摸屏库环境设置调试对应的设备挂载点 标签(空格分隔): [Linux开发] [Qt开发] 比如: cat /dev/input/mice cat /de ...

  5. 2018-9-30-VisualStudio-使用多个环境进行调试

    title author date CreateTime categories VisualStudio 使用多个环境进行调试 lindexi 2018-09-30 18:39:26 +0800 20 ...

  6. VisualStudio 使用多个环境进行调试

    在 VisualStudio 2017 支持使用 launchSettings.json 文件定义多个不同的环境进行调试 先给大家一张图看一下效果 可以看到原来的是启动的按钮,现在被我修改为 lind ...

  7. 通过Dapr实现一个简单的基于.net的微服务电商系统(十四)——开发环境容器调试小技巧

    之前有很多同学提到如何做容器调试,特别是k8s环境下的容器调试,今天就讲讲我是如何调试的.大家都知道在vs自带的创建项目模板里勾选docker即可通过F5启动docker容器调试.但是对于启动在k8s ...

  8. VC++6.0环境下调试c语言代码的方法和步骤_附图

    1.C语言程序四步开发步骤 (1)编辑.可以用任何一种编辑软件将在纸上编写好的C语言程序输入计算机,并将C语言源程序文件*.c以纯文本文件形式保存在计算机的磁盘上(不能设置字体.字号等). (2)编译 ...

  9. Angular2-之开发环境搭建/调试环境配置

    很多网友发表了学习Angualr2的方法,今天我也分享我的学习过程,这篇文章暂且谈谈用到的工具. 1. Visual Studio Code 2. NodeJs 如果你不在天朝请直接去第三步.否则你还 ...

随机推荐

  1. 【pygame游戏编程】第四篇-----打字测速游戏

    下面我们一起用pygame编写一个打字测速游戏 这是一个很实用的有趣的小游戏: 开始之前先来学习几个小函数: 1. ord(ch) python内置函数,传入一个字符,返回字符的ascii码 2.ch ...

  2. 【读书笔记】iOS-Objective-C编程

    Objective-C中的类可以继承自任何一个顶级类,需要注意的是,虽然NSObject是最常见的顶级类,但是它并不是唯一的顶级类,例如,NSProxy就是和NSObject一样的顶级类,所以你不能说 ...

  3. 从零开始学习html(七)CSS样式基本知识

    一.内联式css样式,直接写在现有的HTML标签中 <!DOCTYPE HTML> <html> <head> <meta http-equiv=" ...

  4. 商业智能BI-基础理论知识总结 ZT

    因为要加入一个BI项目,所以最近在研究BI相关的知识体系,由于这个方面的知识都是比较零散,开始都很多概念,不知道从何入手,网上找的资料也不多,特别是实战案例方面更少,这里还是先把理论知识理解下吧,分享 ...

  5. 2014年GDG西安 -- DevFest Season1

    今年9月21日,GDG西安组织了第一季以Android Wear为专题的活动,葡萄城则以超一流的办公环境和网络宣传,配合举行了本次活动.下面通过图文方式进行报道,希望未能如期参加的筒子们不要有太多的遗 ...

  6. 安卓开发_WebView如何在Fragment中使用

    之前学习了如何在activity中使用WebView控件来显示网页. 在我的实际开发中,有需要在Fragment中用到WebView控件的,那么就百度学习了一下 其实很简单,但是当然不是和在Activ ...

  7. C语言程序试题

    一个无向连通图G点上的哈密尔顿(Hamiltion)回路是指从图G上的某个顶点出发,经过图上所有其他顶点一次且仅一次,最后回到该顶点的路劲.一种求解无向图上哈密尔顿回路算法的基础实现如下: 假设图G存 ...

  8. BD是什么角色

    BD是什么角色? 在一般创业公司里面,有了产品接下来就是运营了,而运营中很重要的一点就是BD,也就是所谓商务拓展了,俗一点说就是生意的合作拓展 https://www.jianshu.com/p/7d ...

  9. URL编码:怎样读取特殊字符

    URL编码:怎样读取特殊字符 (这个我曾经谢过教程,这里整理过来)从外部文本载入到动态文本的时候,一些特殊字符(如&/%等)无法正常现实,有的符号还会导致这个符号后面的字符无法现实(如& ...

  10. MySQL安全模式:sql_safe_updates讲解

    什么是安全模式 在mysql中,如果在update和delete没有加上where条件,数据将会全部修改.不只是初识mysql的开发者会遇到这个问题,工作有一定经验的工程师难免也会忘记写入where条 ...