海思3559AV100开发环境搭建

最近老师买了两块华为海思A3559AV100的芯片,虽然自己内心不太想搞,但是2333,算了。还是看看吧。万一以后有用呢。在这先做个笔记。

该芯片的资料大概100多个G,但是有用的其实不太多。其中能够让我们马上上手的文档为Hi3559A╱C V100 开发环境用户指南.pdf,该文件目录为59A开发资料2018/开发资料hi3559A/原厂SDK/Hi3559A V100R001C02SPC002-正式版/ReleaseDoc/zh/01.software/board。首先打开该pdf,我们一步步的看如何搭建该芯片的开发环境。

交叉编译工具链

因为该芯片是ARM架构的处理器,而我们的PC通常为X86架构的。所以需要在PC上安装交叉编译工具,使得我们可以在PC上编译能够在ARM上运行的编译器。

这里我们需要用到的文件为aarch64-himix100-linux.tgzgcc-arm-none-eabi-4_9-2015q3.tgz,这两个文件均在59A开发资料2018/开发资料hi3559A/交叉工具链目录下可以找到。

首先,对于aarch64-himix100-linux.tgz,执行

1
2
3
4
tar -xvf aarch64-himix100-linux.tgz
cd aarch64-himix100-linux
sudo ./aarch64-himix100-linux.install
source /etc/profile

对于gcc-arm-none-eabi-4_9-2015q3.tgz,同样执行

1
2
tar -xvf gcc-arm-none-eabi-4_9-2015q3.tgz
cd gcc-arm-none-eabi-4_9-2015q3

值得注意的是,这里需要从从ARM网站下载工具链压缩包:进入网站;下载gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2

将下载的gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2放到刚解压出的gcc-arm-none-eabi-4_9-2015q3目录。然后执行

1
2
sudo ./gcc-arm-none-eabi-4_9-2015q3.install
source /etc/profile

aarch64-himix100-linux.tgz为基于 64bit 操作系统 glibc 的工具链,而gcc-arm-none-eabi-4_9-2015q3.tgz为Huawei LiteOS M7 工具链。所以貌似只需要编译aarch64-himix100-linux.tgz即可。

安装sdk

这里我们需要用的资料为Hi3559AV100 SDK 安装及升级使用说明.pdf,该资料所在目录为59A开发资料2018/开发资料hi3559A/原厂SDK/Hi3559A V100R001C02SPC002-正式版/ReleaseDoc/zh/01.software/board;安装包为Hi3559AV100.tgz,该安装包所在目录为59A开发资料2018/开发资料hi3559A/可用sdk。执行如下指令

1
2
3
tar -zxf Hi3559AV100.tgz
cd Hi3559AV100
sudo ./sdk.unpack

这里可能遇到的提示 source命令在shell脚本里面找不到: source: not found

解决办法如下:

命令行执行sudo dpkg-reconfigure dash,在界面中选择no,再运行ls -l /bin/sh显示/bin/sh -> bash

SDK所在目录的所有路径不能有中文或空格符。

解压后的目录为:

在这里,osdrv目录为我们关注的重点。它的内容如下所示:

在该目录中opensourcereadme_cn.txt是我们需要关注的文件。

首先要好好研读osdrv/readme_cn.txt,里面提供两个编译思路:

  • 直接在osdrv根目录下 make all 这样就可以一次性的把kernel和uboot都编译好。当然为了使其在目标平台能运行正确,可能需要加一些额外参数, 比如CHIP=hi3519av100 BOOT_MEDIA=xxx等。这是后话,本文主要讲编译。 但是,我们发现直接在这里做总的编译,很难成功。总是容易遇到uboot或kernel问题。后来,我去uboot单个目录下把编译搞定,回过头来这里make all,结果把以前编译好的uboot binary还有修改的uboot的makefile都删掉了。
  • 所以,我个人认为在osdrv下总的编译是个坑,最好是去opensource下面来分别编译kernel和uboot。好在该readme里面提供了分别编译的步骤。

编译整个osdrv目录

这里下载linux-4.9.37.tar.gz,放置到Hi3559AV100/osdrv/opensource/kernel目录中

Hi3559AV100/osdrv目录中,执行下面语句(参考文件为`osdrv/readme_cn.txt)

1
make

编译uboot

进入我们要编译的uboot目录,并执行(参考文件为osdrv/readme_cn.txt

1
2
3
4
5
cd Hi3559AV100/osdrv/opensource/uboot
tar -xvf u-boot-2016.11.tgz
cd u-boot-2016.11
make CROSS_COMPILE=aarch64-himix100-linux- hi3559av100_defconfig
make CROSS_COMPILE=aarch64-himix100-linux- -j 20

但是遇到了错误:bin/sh: aarch64-himix100-linux-gcc: command not found,解决方法为在~/.bashrc中添加下面语句

1
2
export PATH="/opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin:$PATH"
export PATH="/opt/hisi-linux/x86-arm/gcc-arm-none-eabi-4_9-2015q3/bin:$PATH"

并记得一定要重启终端。

实际上在/etc/profile中也有这两句话,但是不知道为何还是找不到。

接下来需要生成reg_info.bin文件,方法主要有两种:

方法一:Windows下使用office打开osdrv/tools/pc/uboot_tools/Hi3559AV100-DMEB-uboot-DDR4_2664M_64bit_4GB-A73_1296M-A53_1188M-SYSBUS_300M-MDABUS_666M.xlsm,在main标签中点击Generate reg bin file按钮,生成reg_info.bin即为对应平台的表格文件。

方法二(推荐):在Ubuntu下osdrv/tools/pc/uboot_tools/路径执行如下命令:

1
2
3
tar zxvf hiregbin-v5.0.1.tgz
cd hiregbin-v5.0.1/
./hiregbin ../Hi3559AV100-DMEB-uboot-DDR4_2664M_64bit_4GB-A73_1296M-A53_1188M-SYSBUS_300M-MDABUS_666M.xlsm ../reg_info.bin

产生reg_info.bin文件后后,在Hi3559AV100/osdrv/opensource/uboot/u-boot-2016.11路径中执行:

1
2
cp ../../../tools/pc/uboot_tools/reg_info.bin .reg
make CROSS_COMPILE=aarch64-himix100-linux- u-boot-z.bin

执行完上述语句后,编译出的u-boot-hi3559av100.bin即为可用的u-boot镜像。

编译kernel

首先,切换到kernel的目录

1
cd ../../kernel/

打开该路径下的readme_cn.txt,按照这里面的教程一步步操作。

这里下载linux-4.9.37.tar.gz,放置到该目录中,并执行下面语句解压

1
tar -xvf linux-4.9.37.tar.gz

然后执行下面语句打补丁

1
2
3
mv linux-4.9.37 linux-4.9.y
cd linux-4.9.y
patch -p1 < ../linux-4.9.37.patch

然后开始编译(参考文件为osdrv/readme_cn.txt

1
2
cp arch/arm64/configs/hi3559av100_arm64_big_little_defconfig .config
make ARCH=arm64 CROSS_COMPILE=aarch64-himix100-linux- menuconfig

遇到错误:fatal error: curses.h: No such file or directory,解决方法为:sudo apt-get install libncurses5-dev libncursesw5-dev

然后出现了一个图像化界面,让你选择如何配置Linux arm 内核,这里直接不管,按下Esc键退出即可。

然后执行下面语句

1
make ARCH=arm64 CROSS_COMPILE=aarch64-himix100-linux- uImage -j 20

报错:fiptool.c:45:25: fatal error: openssl/sha.h: No such file or directory,解决方法:sudo apt-get install libssl-dev

报错:"mkimage" command not found,解决方法:sudo apt-get install u-boot-tools

然后进入opensource/arm-trusted-firmware/arm-trusted-firmware目录,执行mk.sh脚本(参考主Makefile中atf命令进行适配),在opensource/arm-trusted-firmware/arm-trusted-firmware/build/hi3559av100/debug目录下,生成的fip.bin文件就是ATF+kernle的镜像。

制作文件系统镜像

参考文献

海思AI芯片(Hi3519A/3559A)方案学习(三)Ubuntu18.0.4上编译Hi3519AV100 uboot和kernel
编译内核提示mkimage command not found – U-Boot images will not be built

------ 本文结束------
坚持原创技术分享,您的支持将鼓励我继续创作!

欢迎关注我的其它发布渠道