失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 海思AI芯片(Hi3519A/3559A)方案学习一Ubuntu18.0.4上编译Hi3519AV100 uboot和kernel

海思AI芯片(Hi3519A/3559A)方案学习一Ubuntu18.0.4上编译Hi3519AV100 uboot和kernel

时间:2020-05-21 10:04:26

相关推荐

海思AI芯片(Hi3519A/3559A)方案学习一Ubuntu18.0.4上编译Hi3519AV100 uboot和kernel

参考了这位大佬的/avideointerfaces/article/details/88694447

先重申下我的平台为ubuntu18.0.4,SDK的目标平台为Hi3519AV100系列

准备工作

1. 安装himix200交叉编译器

tar –xzf arm-himix200-linux.tgz

sudo ./arm-himix200-linux.install

source /etc/profile

问题:

由于ubuntu18.0.4是64位的,编译器是32位的,必须通过如下命令安装x64兼容x86的运行库及环境。

# sudo apt-get install lib32ncurses5

# sudo apt-get install lib32z1

此处参考/fangye945a/article/details/86568216

安装后用arm-himix200-linux-gcc -v查看编译器版本,依旧报错

loadlocale.c:130: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed. Aborted (core dumped)

然后执行vim ~/.bashrc,添加以下代码:

export LC_ALL=Cexport PATH="/opt/hisi-linux/x86-arm/arm-himix200-linux/bin:$PATH"

source~/.bashrc

参考/Lxk0825/p/10538455.html

再用arm-himix200-linux-gcc -v查看编译器版本,OK了,如下:

2. 安装SDK包

tar -zxf Hi3519AV100_SDK_V2.0.1.0.tgz

sudo ./sdk.unpack

这时遇到了下面的错误:

提示 source命令在shell脚本里面找不到: source: not found

解决办法如下:

注意两点:

SDK所在目录的所有路径不能有中文或空格符。上面两步的操作说明可在《Hi3519AV100 SDK 安装及升级使用说明》找到。root权限的获得:/postedit/95095185

编译uboot

通过上面Unpack操作后的SDK根目录,如下所示:

上面红框勾选目录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下编译。

我在编译的过程中遇到这个错误:Cannot create symlink to `xxx': Operation not supported;

找了一圈原因,是这个放在和windows共享的目录下了:/childbor/article/details/95313084

是由于把SDK放在和windows共享的目录下了。改到opt目录下;

然后把内核的补丁打到v4.9.37的linux kernel上。

1、获取内核补丁:开发包里有linux-4.9.37.tar.gz ;

2、打补丁

1)将下载的 linux-4.9.37.tar.gz 存放到 osdrv的opensource/kernel目录中

2)在linux服务器中进入 osdrv 的根目录,执行如下命令:

cd opensource/kernel

tar -zxf linux-4.9.37.tar.gz

mv linux-4.9.37 linux-4.9.y

cd linux-4.9.y

patch -p1 < ../linux-4.9.37.patch

cd ../

tar -czf linux-4.9.y.tgz linux-4.9.y

cd ../../

顺利完成;

解决了上面俩问题后,在osdrv下make all,果然出错了:

arm-himix200-linux-gcc: loadlocale.c:130: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed.

Makefile:164: warning: overriding recipe for target 'hinotools_prepare'

Makefile:135: warning: ignoring old recipe for target 'hinotools_prepare'

mkdir /opt/Hi3519AV100_SDK_V2.0.1.0/osdrv/pub/smp_image_glibc -p

mkdir /opt/Hi3519AV100_SDK_V2.0.1.0/osdrv/pub/bin/board_glibc -p

mkdir /opt/Hi3519AV100_SDK_V2.0.1.0/osdrv/pub/bin/pc -p

---------task [0] hiregbin_prepare

tar xzf /opt/Hi3519AV100_SDK_V2.0.1.0/osdrv/tools/pc/uboot_tools/hiregbin-v5.0.1.tgz -C /opt/Hi3519AV100_SDK_V2.0.1.0/osdrv/tools/pc/uboot_tools

chmod 777 /opt/Hi3519AV100_SDK_V2.0.1.0/osdrv/tools/pc/uboot_tools/hiregbin-v5.0.1/hiregbin

cp /opt/Hi3519AV100_SDK_V2.0.1.0/osdrv/tools/pc/uboot_tools/Hi3519AV100-DMEB_8L_T-DDR4_2664M_2GB_16bitx2-A53_1500M.xlsm /opt/Hi3519AV100_SDK_V2.0.1.0/osdrv/tools/pc/uboot_tools/hiregbin-v5.0.1

cd /opt/Hi3519AV100_SDK_V2.0.1.0/osdrv/tools/pc/uboot_tools/hiregbin-v5.0.1 && ./hiregbin Hi3519AV100-DMEB_8L_T-DDR4_2664M_2GB_16bitx2-A53_1500M.xlsm reg_info.bin;cd -

./hiregbin: line 3: ./jre/bin/java: No such file or directory

/opt/Hi3519AV100_SDK_V2.0.1.0/osdrv

mv /opt/Hi3519AV100_SDK_V2.0.1.0/osdrv/tools/pc/uboot_tools/hiregbin-v5.0.1/reg_info.bin /opt/Hi3519AV100_SDK_V2.0.1.0/osdrv/tools/pc/uboot_tools

mv: cannot stat '/opt/Hi3519AV100_SDK_V2.0.1.0/osdrv/tools/pc/uboot_tools/hiregbin-v5.0.1/reg_info.bin': No such file or directory

Makefile:155: recipe for target 'hiregbin_prepare' failed

make: *** [hiregbin_prepare] Error 1

先不管它,分别编译uboot,kenerl等。

uboot具体编译步骤:

cp configs/hi3519av100_defconfig .configmake ARCH=arm CROSS_COMPILE=arm-himix200-linux- menuconfig

会遇到下面错误:

这是因为编译器32位的,ubuntu64位的,

这部分参考上文 准备工作 的安装himix200交叉编译器部分;安装兼容库之后OK;

会遇到下面错误:

解决办法是:sudo apt-get install libncurs*

命令运行后,出现如下选项表,

选择各项参数后,选择保存,然后退出即可;

3. make ARCH=arm CROSS_COMPILE=arm-himix200-linux-

会遇到错误:

loadlocale.c:130: _nl_intern_locale_data: Assertioncnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed.

Aborted (core dumped)

打开内核和U-boot的Makefile,注释掉unexport LC_ALL,再次编译,通过。

参考/Lxk0825/p/10538455.html

cp ../../../tools/pc/uboot_tools/reg_info.bin .regmake ARCH=arm CROSS_COMPILE=arm-himix200-linux- u-boot-z.bin

最终会生成u-boot-hi3519av100.bin

Kernel编译

先对下载kernel-4.9.37.tar.gz然后根据xx/opensource/kernel/readme_cn.txt对它打一个patch

----这部分有点波折,开始直接在opt下unpack SDK,按照指导打patch,老是报错,

后来在opt下新建文件夹hisilicon/hi3519a,把sdk包放进去,然后unpack SDK,再按照指导打patch,顺利成功;

开始编译

cp arch/arm/configs/hi3519av100_smp_defconfig .config

make ARCH=arm CROSS_COMPILE=arm-himix200-linux- menuconfig

make ARCH=arm CROSS_COMPILE=arm-himix200-linux- uImage

会遇到下面问题:

解决办法:

1. 最后一条编译语句遇到的问题和编译UBOOT时同样的问题:

loadlocale.c:130: _nl_intern_locale_data: Assertioncnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed.

Aborted (core dumped)

按照同样的方法解决:参考/Lxk0825/p/10538455.html;

2. 编译了十几分钟,报错:

"mkimage" command not found - U-Boot images will not be built

参考:/armeasy/article/details/6540593;

第一步:编译uboot,这时将会在uboot/tools下生成mkimage工具;

第二步:声明环境变量,在/etc/bash.bashrc中添加如下语句:

export PATH=/opt/program/mx53_android/uboot/tools:$PATH

这里要和自己的uboot的路径对应。

然后更新bashrc脚本:

source /etc/bash.bashrc

注意一定要在和编译内核同一个终端执行该语句,否则同样会出现

"mkimage" command not found - U-Boot images will not be built

的错误。

由于我们随时可能清空掉uboot中的编译文件,这意味着mkimage文件随时会被清除,我们

可以将它复制到/usr/bin下,然后在bashrc中声明,以确保内核正常编译。

编译成功:

如果觉得《海思AI芯片(Hi3519A/3559A)方案学习一Ubuntu18.0.4上编译Hi3519AV100 uboot和kernel》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。