海思 Camera | Hi3559AV100 环境搭建

最近新接触新接触海思平台,发现海思每个平台的环境搭建都有点不同,在官方文档中关于 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》

 

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论