第1季:全面认识海思SDK及嵌入式层开发

1 硬件功能验证

(1)SecureCRT监视打开,开发板开机,自动挂载到/home/aston/rootfs中 (这个内容放在了/etc/profile文件里,去查看修改就行了,就是开机时,自动加载的那个文件),本人挂载的根目录:/mnt/hisilion_nfs。

(2)自动加入/mnt中,执行./sample_venc即可 (./sample venc是AR0130版本的RTSP流测试app.rar解压得到的)
./sample_venc的执行结果如下:

在这里插入图片描述
现在这个程序等待一个设备连接,在Windows上安装vlc-2.2.6.0播放器。

(3)在vlc中输入地址,即可浏览实时画面
菜单栏:媒体->打开网络串流->网络,输入:rtsp://192.168.1.20:554/stream_chn0.h264
勾选:显示更多选项。在正在缓冲中设置为300(原来是1000)

注意:
(1)镜头可以自己拧,一边拧一边看图像清晰度,调整到最合适,然后固定螺丝即可。注意有延时的,所以拧一下要停一下看效果。而且延时会累计,所以延时会越来越大。延时如果太大,把VLC关闭重新打开一次就ok了。
(2)图像的4个角可能会有黑边,原因是镜头没有装载正中间,镜头螺丝可以重新固定一下。
(3)图像是有畸变的,正常的,镜头的原因。
(4)如果换上了备用摄像头,需要更改一下运行的程序。

2 配置编译环境

(1) Hi3518E_V200R001C01SPC030.rar 把这个压缩包放置到Linux下的原生目录,解压命令:

sudo apt-get install unrar
unrar x file.rar   //参数x表示解压

进入目录

cd /home/bsp/hisilion/Hi3518E_SDK_V1.0.3.0/osdrv
make OSDRV_CROSS=arm-hisiv300-linux CHIP=hi3518ev200 distclean     //make clean 清楚目标文件,make distclean 清楚目标文件和中间文件

现在还不能make,需要配置交叉编译工具链到环境变量里,运行SOC厂商提供的脚本文件,创建交叉编译工具链的软链接,因为SOC厂商提供的文件里面使用的交叉编译工具的名称是软链接,SOC厂商也提供了可以创建软链接的脚本。

cd /home/bsp/hisilion/Hi3518E_SDK_V1.0.3.0/osdrv/opensource/toolchain/arm-hisiv300-linux
./cross.install.v300
vim ~/.bashrc
//向.bashrc文件最后一行添加下面的内容
export PATH=$PATH:/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin/
//添加完成后,使能一下配置文件
source ~/.bashrc

上述操作完成后,仍然不能使用make,因为32位的交叉编译工具链不能在64位的ubuntu上运行,需要安装32位兼容包:

sudo apt-get update
sudo apt-get install gcc-multilib
sudo apt-get install lib32z1

使用下面的命令检测兼容包是不是安装成功了

arm-hisiv300-linux-uclibcgnueabi-gcc -v

测试截图:
在这里插入图片描述
如果上述命令可以成功运行,则环境变量添加成功。

cd /home/bsp/hisilion/Hi3518E_SDK_V1.0.3.0/osdrv
make OSDRV_CROSS=arm-hisiv300-linux CHIP=hi3518ev200 all

结果报错,通过查看报错信息,发现是mkimage这个命令不存在,添加命令

cd /home/bsp/hisilion/Hi3518E_SDK_V1.0.3.0/osdrv/opensource/uboot/u-boot-2010.06/tools
cp mkimage /usr/local/bin

再次make,发现根文件系统编译时报错。首先出现没有zlib.h这个库的问题,下面处理头文件和库的问题

cd /home/bsp/hisilion/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/zlib/tmp/include
cp * /home/bsp/hisilion/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/include/ -rf
cd /home/bsp/hisilion/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/zlib/tmp/lib
cp lib* /home/bsp/hisilion/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/lib/ -rf

再次编译,还是出现错误,解决方法:
修改操作系统头文件/usr/include/netdb.h,将此宏__USE_XOPEN2K注释,如下图(注意#ifdef和#endif是一一对应的),总共有两个地方使用到了这个宏
在这里插入图片描述
对应的#endif在679行
上面的#ifdef对应的#endif在679行
在这里插入图片描述
执行make仍然报错,主Makefile中的207执行失败
在这里插入图片描述
所以我们手都复制文件,执行下面的命令

cp /home/bsp/hisilion/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/mkfs.jffs2 /home/bsp/hisilion/Hi3518E_SDK_V1.0.3.0/osdrv/pub/bin/pc/ -rf

报错的Makefile部分的源码如下:

hipctools: prepare
	@echo "---------task [5] build tools which run on pc"
	make -C $(OSDRV_DIR)/tools/pc/mkyaffs2image/
	cp $(OSDRV_DIR)/tools/pc/mkyaffs2image/bin/$(YAFFS_TOOL) $(OSDRV_DIR)/pub/bin/pc
	//从下面的第一句命令开始报错
	make -C $(OSDRV_DIR)/tools/pc/jffs2_tool/
	//自己把mkfs复制到指定的目录,但是jffs2_tool目录下根本没有mkfs.jffs2,因为make没有成功执行,mkfs.jffs2实际上在osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0这个目录下
	cp $(OSDRV_DIR)/tools/pc/jffs2_tool/mkfs.jffs2 $(OSDRV_DIR)/pub/bin/pc
	//后面的内容是关于其他版本的根文件系统的,我们用不到
	cp $(OSDRV_DIR)/tools/pc/jffs2_tool/mkfs.ubifs $(OSDRV_DIR)/pub/bin/pc
	cp $(OSDRV_DIR)/tools/pc/jffs2_tool/ubinize $(OSDRV_DIR)/pub/bin/pc
	cp $(OSDRV_DIR)/tools/pc/jffs2_tool/ubi.cfg $(OSDRV_DIR)/pub/bin/pc
	make -C $(OSDRV_DIR)/tools/pc/cramfs_tool/
	cp $(OSDRV_DIR)/tools/pc/cramfs_tool/mkfs.cramfs $(OSDRV_DIR)/pub/bin/pc
	make -C $(OSDRV_DIR)/tools/pc/mkimage_tool/
	cp $(OSDRV_DIR)/tools/pc/mkimage_tool/mkimage $(OSDRV_DIR)/pub/bin/pc
	make -C $(OSDRV_DIR)/tools/pc/squashfs4.2/
	cp $(OSDRV_DIR)/tools/pc/squashfs4.2/mksquashfs $(OSDRV_DIR)/pub/bin/pc
	make -C $(OSDRV_DIR)/tools/pc/lzma_tool/
	cp $(OSDRV_DIR)/tools/pc/lzma_tool/lzma $(OSDRV_DIR)/pub/bin/pc
	make -C $(OSDRV_DIR)/tools/pc/ext4_utils/
	cp $(OSDRV_DIR)/tools/pc/ext4_utils/bin/$(EXT4_TOOL) $(OSDRV_DIR)/pub/bin/pc

因为mkfs.jffs2 和 mkyaffs2image100 已经成功的复制到了指定的目录,所以这部分的Makefile已经没有用了,修改后如下:

hipctools: prepare
	@echo "---------task [5] build tools which run on pc"

回到osdrv目录,执行

 make OSDRV_CROSS=arm-hisiv300-linux CHIP=hi3518ev200 all

这次会成功的执行结束。
在这里插入图片描述

总结:查看Makefile,根据终端输出的信息,查看错误的出现位置,根据错误命令的信息,解决问题。

3 烧录uboot、kernel、rootfs

三个文件的位置

在这里插入图片描述
使用海思官方提供的烧录软件进行烧录下载,因为官方提供的烧录软件是java开发的,所以需要先安装jre开发环境,下载地址:

链接:https://pan.baidu.com/s/1mZCfhUbsHMxmKHf8-Uum0w?pwd=q04g 
提取码:q04g 
--来自百度网盘超级会员V4的分享

注意:卸载jre的时候,请使用安装包内的卸载程序,不要直接删除文件夹。

按照下面的目录找到烧录工具,点击运行。

Hi3518E_V200R001C01SPC030\01.software\pc\Hi_TOOl\HiTool\HiTool.exe

选择芯片
在这里插入图片描述
点击HiBurn,出现下面的界面
在这里插入图片描述
使用串口烧录,配置详情
在这里插入图片描述
采用分区烧写,详细配置如下图所示:
在这里插入图片描述
点击烧写,注意控制台的提示信息。因为板子上有电容,所以先把板子断电,然后点击烧写,再给板子上电就可以烧写了。
在这里插入图片描述
经过上面的操作,uboot已经烧录完成。接下来就是进行kernel和rootfs的烧录,烧录之前,先确定一下uboot、kernel、rootfs的分区表,本人定义的分区表如下所示:

分区名		分区大小	    起始地址		    截至地址
bootloader:1M			0x00000000		0x00100000
kernel:	3M			0x00100000		0x00400000
rootfs:		12M			0x00400000		0x01000000

SDRAM地址范围:80000000-83FFFFFF    //地址通过查阅数据手册获取,内置64MB SDRAM,SPI FLASH 16MB
附:烧录命令
---------------------------------------------------
tftp更新并重新烧写uboot的命令序列:
mw.b 0x82000000 ff 0x100000                 //mw.b:memory write byte按照字节单位进行写,起始地址:0x82000000,写入内容0xff,写入长度1MB
tftp 0x82000000 u-boot-hi3518ev200.bin      //使用tftp的形式进行文件下载,ubuntu中/tftpboot/中的文件的权限尽量改成777,放置下载时出错
sf probe 0									//选择SPI FLASH
sf erase 0x0 0x100000						//擦除的起始地址和长度
sf write 0x82000000 0x0 0x100000			//从SDRAM 0x82000000地址取内容,向SPI FLASH 0X00地址开始写内容,写入长度 0x100000 1MB
--------------------------------------------------
tftp更新并重新烧写kernel的命令序列:
mw.b 0x82000000 ff 0x300000                //SDRAM中的内容随便写,只不过是一个过渡,只要写入的地址和长度再SDRAM范围内就行
tftp 0x82000000 uImage_hi3518ev200
sf probe 0
sf erase 0x100000 0x300000
sf write 0x82000000 0x100000 0x300000
---------------------------------------------------
tftp更新并重新烧写rootfs的命令序列:
mw.b 0x82000000 ff 0xc00000
tftp 0x82000000 rootfs_hi3518ev200_64k.jffs2
sf probe 0
sf erase 0x400000 0xc00000
sf write 0x82000000 0x400000 0xc00000

2:正确的bootcmd和bootargs对应的设置命令:
set bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000'
//因为rootfs在第三部分,所以root=/dev/mtdblock2  ,   0 1 2。 mtdparts= 设置分区。mem=32M,内核使用32M,保留32M留给视频编解码使用
set bootargs mem=32M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1024K(boot),3072K(kernel),12288K(rootfs)

环境变量设置完成后,save保存。
至此,烧录全部完成,并且可以成功启动。

4 rootfs配置

复制必需的文件到开发板的rootfs中

//在Ubuntu的终端窗口执行,复制ko和lib目录的文件
cd /home/bsp/hisilion/Hi3518E_SDK_V1.0.3.0/mpp
cp ko lib /mnt/hisilion_nfs/ -rf
cd /mnt/hisilion_nfs/lib
rm *.a -rf               //静态链接文件在编译时,已经被编译到ko文件内了
//在开发板的终端窗口执行下面的命令,挂载nfs rootfs到开发板的/mnt目录下
mount -t nfs -o nolock 192.168.1.141:/mnt/hisilion_nfs/ /mnt
cd /mnt
cp ko / -rf
cp lib/* /usr/lib -rf

添加用户登录时,自动运行的命令,节省时间:

//在开发板的终端窗口执行
vi /etc/profile
//添加内容
ifconfig eth0 192.168.1.20
ifconfig lo   172.0.0.1

cd /ko
./load3518e -i -sensor ar0130 -osmem 32 -total 64
//mount命令必须放在一定的延时后,因为ifconfig的配置需要一段时间
mount -t nfs -o nolock 192.168.1.141:/mnt/hisilion_nfs/ /mnt
cd /mnt  

5 sample编译测试

在Ubuntu中修改 /home/bsp/hisilion/Hi3518E_SDK_V1.0.3.0/mpp/sample/Makefile.param
在这里插入图片描述
在这里插入图片描述

cd /home/bsp/hisilion/Hi3518E_SDK_V1.0.3.0/mpp/sample/venc/
make
cp sample_venc /mnt/hisilion_nfs/ -rf

在开发板中运行程序
在这里插入图片描述
短暂运行程序,双击ENTER结束运行。程序所在的目录下,产生三个文件,复制文件到windows中,使用VLC软件打开即可观看。
在这里插入图片描述

6 rootfs_uclibc制作镜像

在Ubuntu的终端窗口执行命令

cd /home/bsp/hisilion/Hi3518E_SDK_V1.0.3.0/osdrv/pub
tar xvf rootfs_uclibc.tgz
cd rootfs_uclibc
cp /home/bsp/hisilion/Hi3518E_SDK_V1.0.3.0/mpp/ko ./ -rf
cp /home/bsp/hisilion/Hi3518E_SDK_V1.0.3.0/mpp/lib/*  usr/lib/ -rf
cd usr/lib 
rm *.a -rf
cd ../..
vi etc/profile
//添加内容
ifconfig eth0 192.168.1.20
ifconfig lo   172.0.0.1
cd /ko
./load3518e -i -sensor ar0130 -osmem 32 -total 64
mount -t nfs -o nolock 192.168.1.141:/mnt/hisilion_nfs/ /mnt
cd /mnt

制作镜像的命令:

cd /home/bsp/hisilion/Hi3518E_SDK_V1.0.3.0
osdrv/pub/bin/pc/mkfs.jffs2 -d osdrv/pub/rootfs_uclibc -l -e 0x10000 -o osdrv/pub/rootfs_uclibc_64k.jffs2

在这里插入图片描述

  • 50
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值