最近新接触新接触海思平台,发现海思每个平台的环境搭建都有点不同,在官方文档中关于 Hi3559AV100 平台的详细搭建步骤并没有,所以整理了一下关于 Hi3559AV100 的环境搭建文档,希望对大家有帮助。
一、Linux 环境
我这里使用的是 Ubuntu 16.04 ,官方文档说明推荐使用 64 位 Linux 服务器
1. 网络环境搭建
需要事先在自己的 Ubuntu 下安装 nfs, samba, ssh, tftp 等网络组件。
这里就不详细说明,网上有很多相关环境搭建的文档。
2. 软件包安装
操作系统安装好后,且用户已自行配置好网络环境,则可继续如下步骤完成相关软件包的安装:
① 配置默认使用 bash
sudo dpkg-reconfigure dash
选择 no
② 安装软件包
sudo apt-get install make libc6:i386 lib32z1 lib32stdc++6 zlib1g-dev libncurses5-dev ncurses-term libncursesw5-dev g++ u-boot-tools:i386 texinfo texlive gawk libssl-dev openssl bc
③ 创建 /etc/ld.so.preload 文件,并执行 echo "" > /etc/ld.so.preload,以解决 64bit linux server 上某些第三方库编译失败的问题
echo "" > /etc/ld.so.preload
注意:出现如上错误的话可以执行
sudo sh -c “echo "" > /etc/ld.so.preload”
二、安装 SDK 包
1. Hi3559AV100 SDK 包的位置
在我们拿到的资料中 "Hi3559AV100***/01.software/board" 目录下,您可以看到一个 Hi3559AV100_SDK_Vx.x.x.x.tgz 的文件,该文件就是 Hi3559AV100 的软件开发包。
2. 解压缩 SDK 包
tar -zxvf Hi3559AV100_SDK_V2.0.3.1.tgz
3. 展开 SDK 包内容
进入到 Hi3559AV100_SDK_V2.0.3.1 目录:sudo ./sdk.unpack
注意:如果您需要通过 WINDOWS 操作系统中转拷贝 SDK 包,请先运行 sudo ./sdk.cleanup ,收起 SDK 包的内容,拷贝到新的目录后再展开。
4. 在 linux 服务器上安装交叉编译器
注意:安装交叉编译器需要有 sudo 权限或者 root 权限
① 安装 aarch64 交叉编译器
tar –xzf aarch64-himix100-linux.tgz
chmod +x aarch64-himix100-linux.install
sudo ./aarch64-himix100-linux.install
修改 profile 文件
安装之后打开 profile 文件,查看是否存在:
export PATH="/opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin:$PATH"
如果不存在加上这句就行
source /etc/profile
使 profile 文件生效
② 安装 arm-none-eabi 交叉编译器
gcc-arm-none-eabi-4_9-2015q3 交叉编译工具链下载连接:
https://launchpad.net/gcc-arm-embedded/+download
解压安装
tar -zxvf gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar -C /opt/
最后编辑 vim ~/.bashrc ,在文件末尾追加 PATH 环境变量
export PATH=$PATH:/opt/gcc-arm-none-eabi-4_9-2015q3/bin/
使用 source ~/.bashrc 使得新的 PATH 环境变量在当前 shell 生效
验证一下 gcc 是否安装成功
arm-none-eabi-gcc -v
5. 编译 osdrv
osdrv 顶层 Makefile 使用说明:
注意:Ⅰ 由于 Makefile 中文件系统编译依赖组件较多,不能保证单独编译的文件系统可用,建议采用 make all 编译;
Ⅱ 可单独编译 uboot,kernel;
本目录下的编译脚本支持选用 aarch64-himix100-linux 64bit 工具链进行编译,具体命令如下:
编译整个 osdrv 目录:
① 默认编译
make BOOT_MEDIA=spi AMP_TYPE=linux all
② 编译 (A53MP+A73MP) 多核 linux、 启动介质为 spi(spi nor和spi nand) 的命令
make BOOT_MEDIA=spi AMP_TYPE=linux all
③ 编译 (A53MP+A73MP) 多核 linux、 启动介质为并口 nand 的命令
make BOOT_MEDIA=nand AMP_TYPE=linux all
④ 编译 (A53MP+A73MP) 多核 linux、 启动介质为 emmc 的命令:
make BOOT_MEDIA=emmc AMP_TYPE=linux all
⑤ 编译 (A53MP+A73MP) 多核 linux、 启动介质为 ufs 的命令:
make BOOT_MEDIA=ufs AMP_TYPE=linux all
⑥ 编译 (A53MP+A73MP) 多核 linux+A53UP 单核 liteos、 启动介质为 spi(spi nor 和 spi nand) 的命令
make BOOT_MEDIA=spi AMP_TYPE=linux_liteos all
⑦ 编译 (A53MP+A73MP) 多核 linux+A53UP 单核 liteos、启动介质为并口 nand 的命令
make BOOT_MEDIA=nand AMP_TYPE=linux_liteos all
⑧ 编译 (A53MP+A73MP) 多核 linux+A53UP 单核 liteos、启动介质为 emmc 的命令
make BOOT_MEDIA=emmc AMP_TYPE=linux_liteos all
⑨ 编译 (A53MP+A73MP) 多核 linux+A53UP 单核 liteos、启动介质为 ufs 的命令
make BOOT_MEDIA=ufs AMP_TYPE=linux_liteos all
参数说明:
BOOT_MEDIA:spi nor 或 spi nand 启动选择 spi ;并口 nand 启动选择 nand;Emmc 启动选择 emmc;ufs 启动选择 ufs 。
AMP_TYPE: 编译多核 linux 传 linux 参数;编译多核 linux+ 单核 liteos 传参数 linux_liteos 。
编译遇到的问题:没有 kernel 源文件
解决办法:将下载的 linux-4.9.37.tgz 放到 osdrv/opensource/kernel/ 目录下,详细细节可以看 sdk/osdrv/opensource/kernel/ 目录下的 readme_cn.txt 文件
注意:生成的所有镜像在 osdrv/pub / 目录下
6. 清除整个 osdrv 目录的编译文件
make clean
7. 彻底清除整个 osdrv 目录的编译中间文件
make distclean
8. 单独编译 kernel image 和单独编译 u-boot
前面已经提到了不能保证单独编译的文件系统可用建议采用 make all
具体方法步骤可以参考 osdrv/ 目录下的 readme_cn.txt
三、单系统 Linux 方案烧写
1. 配置 tftp 服务器
可以使用任意的 tftp 服务器,将生成的镜像 image_glibc_multi-core_arm64 目录下的相关文件拷贝到 tftp 服务器目录下。
2. 配置参数
单板上电后,敲任意键进入 u-boot 。设置 ipaddr (单板 ip )、ethaddr (单板的 MAC 地址)和 serverip (即 tftp 服务器的 ip )
setenv ipaddr 10.86.147.170
setenv ethaddr 00:10:ab:20:81:70
setenv netmask 255.255.254.0
setenv gatewayip 10.86.147.1
setenv serverip 10.86.147.126
ping serverip 10.86.147.126 //确保网络畅通
以上为举例, IP 以实际为准
3. 地址空间说明
1M |
9M |
16M |
u-boot |
kernel |
rootfs |
也可以根据实际情况进行调整
4. 拨码开关设置
通过拨码开关 SW1.4 设置选择主 CPU:
0:从 A53MP Core0 启动;
1:从 A53UP 启动
通过拨码开关 SW1[2:1] 选择存储烧录介质
00 SPI Flash 01 nand flash 10 EMMC 11 UFS
根据自己实际情况设置,我这里设置成 00
5. 烧写 u-boot
mw.b 0x44000000 0xff 0x100000
tftp 0x44000000 u-boot-hi3559av100.bin
nand erase 0x0 0x100000
nand write 0x44000000 0x0 0x100000
6. 烧写内核 kernel image
mw.b 0x44000000 0xff 0x900000
tftp 0x44000000 uImage_hi3559av100_multi-core
nand erase 0x100000 0x900000
nand write 0x44000000 0x100000 0x900000
7. 烧写文件系统
mw.b 0x44000000 0xff 0x1000000
tftp 0x44000000 rootfs_hi3559av100_2k_24bit.yaffs2
nand erase 0xA00000 0x1000000
nand write.yaffs 0x44000000 0xA00000 0xcfeb00 //(0xcfeb00 为 rootfs 文件实际大
小)
8. 设置启动参数
setenv bootargs 'mem=512M console=ttyAMA0,115200 root=/dev/mtdblock2 rw rootfstype=yaffs2 mtdparts=hinand:1M(boot),9M(kernel),16M(rootfs)'
setenv bootcmd 'nand read 0x44000000 0x100000 0x900000;bootm 0x44000000'
saveenv
9. 重启系统
reset
四、双系统 Linux + Huawei LiteOS 方案烧写
1. 准备 Huawei LiteOS 端的镜像
Huawei LiteOS 端的烧写镜像是由客户在 Huawei LiteOS 端的业务代码编译生成的。
如果是初次调试环境,可以用发布包中的 sample 编译出来的镜像,A53 端的镜像建议使
用 mpp/sample/vio/ sample_vio.bin;M7 端的镜像建议使用
osdrv/platform/liteos_m7/liteos/sample/sample_osdrv sample.bin
注:在对应的目录下直接 make 可以生成相应的所需镜像
2. 配置 tftp 服务器
和单系统烧录一样,编译 osdrv/ 目录时选择编译 (A53MP+A73MP)
多核 linux+A53UP 单核 liteos 命令编译,生成的镜像在 image_glibc_big-little_arm64/
目录下,将生成的镜像拷贝到 tftp 服务器目录下
3. 配置参数
同单系统烧录时配置 tftp 参数
4. 地址空间说明
1M |
9M |
32M |
16M |
1M |
u-boot |
linux kernel |
rootfs |
A53UP LiteOS |
M7 LiteOS |
5. 拨码开关设置
通过拨码开关 SW1.4 设置选择主 CPU:
0:从 A53MP Core0 启动;
1:从 A53UP 启动。
需要拨码到 0,从 A53MP 启动
通过拨码开关 SW1[2:1] 选择存储烧录介质
00 SPI Flash 01 nand flash 10 EMMC 11 UFS
根据自己实际情况设置,我这里设置成 00
6. 烧写 u-boot
mw.b 0x52000000 0xff 0x100000
tftp 0x52000000 u-boot-hi3559av100.bin
nand erase 0 0x100000
nand write 0x52000000 0 0x100000
7. 烧写 Linux 内核
mw.b 0x52000000 0xff 0x1000000
tftp 0x52000000 uImage_hi3559av100_big-little
nand erase 0x100000 0x900000
nand write 0x52000000 0x100000 0x900000
8. 烧写文件系统
mw.b 0x52000000 0xff 0x2000000
tftp 0x52000000 rootfs_hi3559av100_2k_24bit.yaffs2
nand erase 0xA00000 0x2000000
nand write.yaffs 0x52000000 0xA00000 0xd32c00
注意:① 此示例 Flash 为 2KPage 24bitECC,应以实际使用器件选择相应 rootfs 在编译,好的镜像中有不同类型的文件系统可供我们选择
② nand write.yaffs 的最后一个参数 (size),应该以实际下载的 rootfs 长度为准,如打印:“Bytes transferred = 13839360 (d32c00 hex)”,则为:0xd32c00
9. 烧写 A53UP Huawei LiteOS
mw.b 0x52000000 0xff 0x1000000
tftp 0x52000000 sample_vio.bin
nand erase 0x2A00000 0x1000000
nand write 0x52000000 0x2A00000 0x1000000
10. 烧写 Cortex-M7 Huawei LiteOS (此步可选做)
mw.b 0x52000000 0xff 0x100000
tftp 0x52000000 sample.bin
nand erase 0x3A00000 0x100000
nand write 0x52000000 0x3A00000 0x100000
11. 设置启动参数
setenv bootargs 'mem=512M console=ttyAMA0,115200 clk_ignore_unused rw
root=/dev/mtdblock2 rootfstype=yaffs2
mtdparts=hinand:1M(boot),9M(kernel),32M(rootfs)'; sa
不启动 Cortex-M7
setenv bootcmd 'nand read 0x45000000 0x2A00000 0x1000000; go_a53up 0x45000000; nand read 0x52000000 0x100000 0x900000;bootm 0x52000000'; sa
带 Cortex-M7 启动
setenv bootcmd 'nand read 0x45000000 0x2A00000 0x1000000; go_a53up 0x45000000; config_m7; nand read 0x52000000 0x3a00000 0x100000; cp.b 0x52000000 0x19000000 0x100000; go_m7; nand read 0x52000000 0x100000 0x900000;bootm 0x52000000'; sa
12. 重启系统
reset
关于 Hi3559AV100 的环境搭建部分到这里就已经完成,有需要更深入的学习和技术交流的,欢迎给我留言,看到留言后我会尽快回复您,谢谢~
五、参考资料
① 《WM_Hi3559A╱C V100 SDK 安装及升级使用说明.pdf》
② 《WM_Hi3559A╱C V100 开发环境用户指南.pdf》
评论