zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    POJ1942-Paths on a Grid
    CodeForces 245C-Game with Coins
    codeforces 244B-Undoubtedly Lucky Numbers 搜索
    URAL
    HDU-1134 卡特兰数+java大数模板
    素数线性筛
    KMP讲解
    bzoj 3143: [Hnoi2013]游走
    bzoj 3238: [Ahoi2013]差异
    bzoj 2208: [Jsoi2010]连通数
  • 原文地址:https://www.cnblogs.com/arnoldlu/p/6288852.html
Copyright © 2011-2022 走看看