最近老师买了两块华为海思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.tgz
和gcc-arm-none-eabi-4_9-2015q3.tgz
,这两个文件均在59A开发资料2018/开发资料hi3559A/交叉工具链
目录下可以找到。
首先,对于aarch64-himix100-linux.tgz
,执行
1 | tar -xvf aarch64-himix100-linux.tgz |
对于gcc-arm-none-eabi-4_9-2015q3.tgz
,同样执行
1 | tar -xvf gcc-arm-none-eabi-4_9-2015q3.tgz |
值得注意的是,这里需要从从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 | sudo ./gcc-arm-none-eabi-4_9-2015q3.install |
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 | tar -zxf Hi3559AV100.tgz |
这里可能遇到的提示 source命令在shell脚本里面找不到: source: not found
解决办法如下:
命令行执行sudo dpkg-reconfigure dash
,在界面中选择no,再运行ls -l /bin/sh
显示/bin/sh -> bash
。
SDK所在目录的所有路径不能有中文或空格符。
解压后的目录为:
在这里,osdrv
目录为我们关注的重点。它的内容如下所示:
在该目录中opensource
和readme_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 | cd Hi3559AV100/osdrv/opensource/uboot |
但是遇到了错误:bin/sh: aarch64-himix100-linux-gcc: command not found
,解决方法为在~/.bashrc
中添加下面语句
1 | export PATH="/opt/hisi-linux/x86-arm/aarch64-himix100-linux/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 | tar zxvf hiregbin-v5.0.1.tgz |
产生reg_info.bin
文件后后,在Hi3559AV100/osdrv/opensource/uboot/u-boot-2016.11
路径中执行:
1 | cp ../../../tools/pc/uboot_tools/reg_info.bin .reg |
执行完上述语句后,编译出的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 | mv linux-4.9.37 linux-4.9.y |
然后开始编译(参考文件为osdrv/readme_cn.txt
)
1 | cp arch/arm64/configs/hi3559av100_arm64_big_little_defconfig .config |
遇到错误: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