一、开发环境
上表是海思提供的Hi3519DV500 开发环境的各部分软件描述,实际用起来你就知道,可能有出入,尝试换Ubuntu 20.04折腾了好几天都不行,使用推荐的Ubuntu 18.04.2 64bit一个上午就行。
基本的硬件要求如下:
● CPU Intel(R) Xeon(R) CPU E5-2450 0 @ 2.10GHz 或更好CPU
● DDR: >= 16GB
● Hard disk >= 600GB
● Gigabit Ethernet
● OS: Ubuntu 18.04.2 64bit
软件准备:
win10操作系统+virtualbox+ubuntu 18.04 LTS
ubuntu 18.04 LTS的iso可以直接从Ubuntu 18.04下载中获取。
注意事项:
编译海思SDK之前,务必要拿着SDK中关于开发环境的几个文档查看,不要上来就编译。
编译需要参考的文档:
《Hi35xxVxxx 开发环境用户指南.pdf》
《Hi3519DV500/Hi3516DV500 SDK 安装以及升级使用说明》
二、交叉编译工具链
步骤1 解压工具链。执行如下命令进行解压: tar xf gcc-xxxx-aarch64-v01c01-linux-musl.tgz步骤2 安装工具链。进入解压目录,执行:sudo ./install_gcc_toolchain.sh
aarch64-v01c01-linux-musl-gcc -v
三、软件包安装
3.1 默认配置bash
执行sudo dpkg-reconfigure dash #选择no
3.2 安装软件包
sudo apt-get install make
sudo apt-get install libc6-i386
sudo apt-get install lib32z1
sudo apt-get install lib32stdc++6
sudo apt-get install zlib1g-dev
sudo apt-get install libncurses5-dev
sudo apt-get install ncurses-term
sudo apt-get install libncursesw5-dev
sudo apt-get install g++
sudo apt-get install u-boot-tools
sudo apt-get install texinfo
sudo apt-get install texlive
sudo apt-get install gawk
sudo apt-get install libssl-dev
sudo apt-get install openssl
sudo apt-get install bc
sudo apt-get install p7zip-full
sudo apt-get install gperf
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install diffutils
sudo apt-get install git
sudo apt-get install unzip
3.3 echo "" > /etc/ld.so.preload
创建 /etc/ld.so.preload 文件,并执行 echo "" > /etc/ld.so.preload ,以解决 64bit linuxserver 上某些第三方库编译失败的问题。
3.4 mtd-utils依赖库
sudo apt-get install zlib1g-dev
sudo apt-get install liblzo2-dev
sudo apt-get install uuid-dev
sudo apt-get install pkg-config
sudo apt-get install automake由于 mtd-utils通过pkg-config工具检查各个库是否正常安装,因此请参考如下方式设置pkg-config工具搜索路径:export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib/x86_64-linux-gnu/pkgconfig/"
3.5 e2fsprogs依赖texlive库
sudo apt-get install texlive
四、sdk解压patch合入
4.1 原始sdk解压
解压后,有三个目录:00.hardware、01.software、02.only for reference
其中原始的sdk在01.software\board\Hi3519DV500_SDK_V1.0.1.0.tgz
补丁目录02.only for reference
4.2 sdk补丁合入
hi3519dv500_REF_VX.0.X.X.tgz作为补丁包,可以将此补丁包打到hi3519dv500_SDK_VX.0.X.X.tgz包中,具体操作步骤如下:
1、将hi3519dv500_SDK_VX.0.X.X.tgz和hi3519dv500_REF_VX.0.X.X.tgz包放置到同一个文件夹下并解压,
tar zxvf hi3519dv500_SDK_VX.0.X.X.tgz
tar zxvf hi3519dv500_REF_VX.0.X.X.tgz
2、执行hi3519dv500_SDK_VX.0.X.X文件夹内部解压,
./sdk.unpack
3、执行打补丁操作,
./ref_patch.sh执行后,hi3519dv500_SDK_VX.0.X.X为打上REF补丁后的完整包。
五、SDK编译及问题解决
5.1 整体编译
前面基本上解决了sdk能都编译的问题,具体的编译命令可以参考,Hi3519DV500_SDK_V1.0.1.0/smp/a55_linux/source/bsp目录下面的readme_cn.txt文件。
具体到3516DV500是如下命令:
cd Hi3519DV500_SDK_V1.0.1.0/smp/a55_linux/source/bsp
make BOOT_MEDIA=emmc LIB_TYPE=musl CHIP=hi3516dv500 all
编译参数说明:
1)BOOT_MEDIA默认选择emmc启动方式编译,可选择spi(spi nor and spi nand)启动方式编译,即BOOT_MEDIA=spi;
2)LIB_TYPE默认为musl编译, 可选择glibc编译,即LIB_TYPE=glibc;
3)CHIP默认为hi3519dv500,可选择hi3516dv500编译,即CHIP=hi3516dv500。
5.2 错误处理
5.2.1 错误:/bin/sh: 1: pushd: not found
原因:
从Ubuntu 6.10开始,默认使用dash(theDebian Almquist Shell)而不是bash(the GNUBourne-Again Shell),但Login Shell还是bash,原因是dash更快、更高效,而且它符合POSIX规范,Ubuntu在启动的时候会运行很多shell脚本,使用dash可以加快启动速度。
通过命令 ll /bin/sh 确实可以看出来用的是dash。
解决:
sudo dpkg-reconfigure dash #选择no
5.2.2 错误:The autopoint command is part of the GNU gettext package.
错误打印:
You must have autopoint installed to generate the util-linux build system. The autopoint command is part of the GNU gettext package. You must have libtool-2 installed to generate the util-linux build system.
解决方案:
sudo apt-get install autopoint
sudo apt-get install bison
sudo apt-get install libtool
sudo apt-get install libtool-bin
5.2.3 错误:错误:po4a/update-po: The program 'po4a' was not found.
编译xz-5.2.6时,报错打印:
po4a/update-po: The program 'po4a' was not found.
po4a/update-po: Translated man pages were not generated.
Makefile:16: recipe for target '/home/vqmt/work/3516dv500/Hi3519DV500_SDK_V1.0.1.0/open_source/xz/out' failed
解决方法,安装 po4a:
$ sudo apt install po4a
六、其他修改
由于本人购买的是厂家自己定制的硬件类型,还需要对网络和lic作一些配置。给大家作为参考。
注意:3516dv500和3519dv500用的是同一套sdk,所以有些地方可能只有3519的文件,比如:hi3519dv500.h
6.1 百兆网络
配置文件修改:
网络问题 uboot 中修改hi3519dv500.h文件,具体目录:Hi3519DV500_SDK_V1.0.1.0\open_source\u-boot\u-boot-2022.07\include\configs\hi3519dv500.h#define CONFIG_GMAC_PHY0_INTERFACE_MODE 2 /* rgmii 2, rmii 1, mii 0 */ #define CONFIG_GMAC_PHY1_INTERFACE_MODE 2 /* rgmii 2, rmii 1, mii 0 */
需要修改为:
#define CONFIG_GMAC_PHY0_INTERFACE_MODE 1 /* rgmii 2, rmii 1, mii 0 */ #define CONFIG_GMAC_PHY1_INTERFACE_MODE 1 /* rgmii 2, rmii 1, mii 0 */
建议直接修改Hi3519DV500_SDK_V1.0.1.0/open_source/u-boot/u-boot-2022.07.patch文件,这样可以保证每次make distclean之后还是能正常编译。
dts修改:
内核中修改hi3519dv500-demb.dts和hi3516dv500-demb.dts 中的默认配置是 rgmii-id 改为 rmii。
他们的目录为:
sdk/open_source/linux/linux-5.10.y/arch/arm64/boot/dts/vendor/hi3519dv500-demb.dts
sdk/open_source/linux/linux-5.10.y/arch/arm64/boot/dts/vendor/hi3516dv500-demb.dts
同样建议修改SDK//open_source/linux/linux-5.10.patch文件,保证每次make distclean之后还是能正常编译。
修改文件中:
+++ b/arch/arm64/boot/dts/vendor/hi3516dv500-demb.dts
和+++ b/arch/arm64/boot/dts/vendor/hi3519dv500-demb.dts内容
+&gmac { + phy-handle = <ðphy>; + phy-mode = "rgmii-id"; +};
修改为
+&gmac { + phy-handle = <ðphy>; + phy-mode = "rmii"; +};
6.2 Iic地址修改
lic 地址,默认使用 i2c 4需要修改为i2c 3
具体修改为:Hi3519DV500_SDK_V1.0.1.0\smp\a55_linux\source\mpp\sample\common\sample_comm_vi.c 的这个函数sample_comm_vi_get_default_sns_info
七、最后总结
有很多时候选择比努力重要,刚开始搞得时候,我觉得ubuntu20.04和ubuntu18.04应该没差多少,有问题以自己的经历搞定应该不成问题。哎,水里淹死的都是会游泳的,人家海思就是基于18.04搞得,其他的没试,自己就不要作死,不然真的会死。前面折腾了两天都不行,最后换成18.04一上午就好了,不要对自己过于自信。