系列文章目录
海思3518ev200学习记录(1)- 根据用户手册烧录系统镜像
海思3518ev200学习记录(2) - 交叉编译官方webRTC
海思3518ev200学习记录(3) - 编译 amazon-kinesis webrtc嵌入式实现
海思3518ev200学习记录(4) - 基于海思源码分段录制音频文件
海思3518ev200学习记录(1)- 根据用户手册烧录系统镜像
前言
本想着做笔记来用的,目前接到的任务是音视频通讯,要从信令服务器,打洞服务器,安卓端,苹果端,以及设备端。之前根据网上的资料做的dome前面都实现了,但是唯独设备端无法实现有点麻烦,所以先买了一个开发板研究研究,不然之前所做的一切都报废了,要重新搞了。关于之前系列文章免费机票再次劳请移步
开发板到手
别问怎么买的,TB OR JD 一搜都有的好吧。一般在出厂的时候都会烧录好程序 想要温习一遍如何烧录的请接着看
搭建虚拟机开发环境
VMware 大家都不陌生,在提供的工具中有准备好的 Ubuntu16.04-swann.rar 找到后直接用vM打开
开启虚拟机
等待启动成功
进入之后需要配置桥接
设置桥接网卡:单击 VMware 上方菜单栏中的编辑->虚拟机网络编辑器,在弹出的
对话框里点击更改设置;
设置当前 ubuntu 的网络为桥接模式:接着在 VMware 中选择当前虚拟机,单机鼠
标右键,点击设置
在弹出的对话框中选择网络适配器,更改右边的网络连接选型为桥接模式,然后
点击确定
ifconfig 查看 ip
测试:此时 ping 主机 windows,ping 网关,ping 外网均 OK
记住你虚拟机的ip
Windows 主机安装使用 SecureCRT、WinSCP 工具
在商家给的资料中找到SecureCRT、WinSCP安装并使用。在“辅助工具软件”文件夹中有常用的工具; SecureCRT 用于打开开发板的串口控制台,WinSCP 用于 windows 主机与虚拟机 ubuntu 之间传输文件
1)使用 SecureCRT 进入开发板的串口控制台
安装很简单,全部下一步即可
打开之后点击快速连接
当然前提是你需要先把设备连到电脑上,USB接口连上之后,打开设备管理器(右键我的电脑-管理-设备管理器)
找到你的串口,打开 SecureCRT 软件,点击左上角快速连接,在弹出的对话框里选择协议类型为串口 Serial,选择对应串口号,串口号请到电脑的设备管理器查看,波特率 115200,注意右边的流控选型都不要勾选,其余选项保持默认即可
点击连接按钮,进入串口控制台;
此时给开发板重新上电可以看到很多打印信息
设置虚拟机
使用 WinSCP 在 windows 主机和 ubuntu 虚拟机中传输文件注意请先确保主机 windows 和虚拟机 ubuntu 能 ping 通,才能使用此工具
安装好 WinSCP 后,双击打开,然后点击新建站点
点击登录,左边主机 windows,右边虚拟机 ubuntu
剩下的配置你可以根据文档一步一步来
为开发板烧录镜像
咱直接跳到烧录,因为给的资料中有。
在辅助工具中找到此软件,解压并运行
HiTool-BVT-5.x.x
按如上面配置,点击烧录,设备重新上电。
大概需要15分钟左右,烧制成功后设置启动参数
设置启动参数
成功后打开SecurCRT,连上串口,设备重新上电后你能看到下面信息
System startup
U-Boot 2010.06 (Dec 18 2018 - 23:50:19)
Check Flash Memory Controller v100 ... Found
SPI Nor(cs 0) ID: 0xef 0x40 0x18
spi_general_qe_enable(294): Error: Disable Quad failed! reg: 0x2
Block:64KB Chip:16MB Name:"W25Q128(B/F)V"
SPI Nor total size: 16MB
MMC:
EMMC/MMC/SD controller initialization.
Card did not respond to voltage select!
No EMMC/MMC/SD device found !
*** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Hit any key to stop autoboot: 0
Wrong Image Format for bootm command
ERROR: can't get kernel image!
错误信息,我在网上查的没啥影响,是因为没有初始化启动的原因,我在初始化的过程中遇到了坑
坑
文档中说的是
设置参数
setenv bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 rw mtdparts=hi_sfc:1M(boot),3M(kernel),12M(rootfs)'
setenv bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000'
sa
reset
但是这样设置后重启挂载MMP业务的时候会有问题
遇到的问题是
mmz_start: 0x82000000, mmz_size: 32M
Hisilicon Media Memory Zone Manager
ERROR: Conflict MMZ:
PHYS(0x82000000, 0x83FFFFFF), GFP=0, nBYTES=32768KB, NAME="anonymous"
MMZ conflict to kernel memory (0x80000000, 0x83FFFFFF)
Add MMZ failed: PHYS(0x82000000, 0x83FFFFFF), GFP=0, nBYTES=32768KB, NAME="anonymous"
Module himedia: init ok
hi3518e_base: module license 'Proprietary' taints kernel.
Disabling lock debugging due to kernel taint
malloc buffer for SYS sclcoeffset fail!
load sys.ko for Hi3518EV200...FAILURE!
insmod: can't insert 'hi3518e_sys.ko': Operation not permitted
为啥会这样呢?
找了很多方法确定需要改一下一开始的参数,因为新手不知道咋重新设置的,只能重新烧录一边
然后正确的方法参数是
hisilicon # setenv bootargs 'mem=32M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 rw mtdparts=hi_sfc:1024K(boot),3072K(kernel),12288K(rootfs)'
hisilicon #
hisilicon # setenv bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000'
hisilicon # sa
Saving Environment to SPI Flash...
Erasing SPI flash, offset 0x00080000 size 256K ...done
Writing to SPI flash, offset 0x00080000 size 256K ...done
hisilicon # reseet
Unknown command 'reseet' - try 'help'
hisilicon # reset
resetting ...
把原来的64M改为32M
重启成功后
设置开发板网卡参数
vi /etc/init.d/rcS
ifconfig eth0 192.168.1.10
ifconfig lo 127.0.0.1
route add default gw 192.168.1.1
保存即可
启动断电重启开发板。
还记得之前设置的虚拟机ip吗
接下来需要挂载nfs文件到开发板上
mount -t nfs -o nolock 虚拟机IP:/home/swann/nfs /mnt
然后用winSCP把资料中mmp,上传到/home/swann/nfs
目录
再到开发板的linux下
执行以下命令
cp /mnt/mpp/ko / -rf
cp /mnt/mpp/lib/*.so /lib/ -rfd
cd /ko
./load3518e -i -sensor ar0130 -osmem 32 -total 64
不出意外你应该不会再踩到我踩的坑
输出信息为
/ko # ./load3518e -i -sensor ar0130 -osmem 32 -total 64
mmz_start: 0x82000000, mmz_size: 32M
Hisilicon Media Memory Zone Manager
Module himedia: init ok
hi3518e_base: module license 'Proprietary' taints kernel.
Disabling lock debugging due to kernel taint
load sys.ko for Hi3518EV200...OK!
load tde.ko ...OK!
load region.ko ....OK!
load vgs.ko for Hi3518EV200...OK!
ISP Mod init!
load viu.ko for Hi3518EV200...OK!
load vpss.ko ....OK!
load vou.ko ....OK!
load hifb.ko OK!
load rc.ko for Hi3518EV200...OK!
load venc.ko for Hi3518EV200...OK!
load chnl.ko for Hi3518EV200...OK!
load h264e.ko for Hi3518EV200...OK!
load jpege.ko for Hi3518EV200...OK!
load ive.ko for Hi3518EV200...OK!
==== Your input Sensor type is ar0130 ====
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:166}cmdstr:himm
0x200f0040: 0x00000000 --> 0x00000002
[END]
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:166}cmdstr:himm
0x200f0044: 0x00000000 --> 0x00000002
[END]
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:166}cmdstr:himm
0x200f007c: 0x00000000 --> 0x00000001
[END]
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:166}cmdstr:himm
0x200f0080: 0x00000000 --> 0x00000001
[END]
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:166}cmdstr:himm
0x200f0084: 0x00000000 --> 0x00000001
[END]
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:166}cmdstr:himm
0x200f0088: 0x00000000 --> 0x00000001
[END]
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:166}cmdstr:himm
0x200f008c: 0x00000000 --> 0x00000002
[END]
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:166}cmdstr:himm
0x200f0090: 0x00000000 --> 0x00000002
[END]
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:166}cmdstr:himm
0x200f0094: 0x00000000 --> 0x00000001
[END]
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:166}cmdstr:himm
0x2003002c: 0x000C4003 --> 0x000B4001
[END]
acodec inited!
insert audio
mipi_init
init phy power successful!
load hi_mipi driver successful!
==== Your input Sensor type is ar0130 ====
/ko #
交叉编译海思 mpp 中的 sample 程序,并在开发板中运行
在虚拟机上进入sample目录
sample 文件夹目录结构
sample_venc:视频编码例程
在虚拟机 ubuntu 中进入 venc 文件夹执行编译命令
cd venc
make
生成sample_venc
在开发板 linux 系统下运行该程序
cd /mnt/mpp/sample/venc
./sample_venc 0
c
/ko # cd ../mnt/mpp/sample/venc/
/mnt/mpp/sample/venc # ./sample_venc
Usage : ./sample_venc <index>
index:
0) 1*1080p H264 + 1*VGA H264.
1) 1*1080p MJPEG encode + 1*1080p jpeg.
2) low delay encode(only vi-vpss online).
3) roi background framerate.
4) Thumbnail of 1*1080p jpeg.
5) svc-t H264
/mnt/mpp/sample/venc # ./sample_venc 0
s32ChnNum = 3
=============SAMPLE_COMM_VI_SetMipiAttr enWDRMode: 0
linear mode
Aptina AR0130 sensor 720P30fps init success!
c) cbr.
v) vbr.
f) fixQp
please input choose rc mode!
c
按回车键两次退出编码
please press twice ENTER to exit this sample
program exit normally!
/mnt/mpp/sample/venc #
可以看到录制的视频
/mnt/mpp/sample/venc # ls -la
total 2636
drwxrwxr-x 2 1000 1000 4096 Mar 8 2021 .
drwxrwxr-x 11 1000 1000 4096 May 20 2016 ..
-rw-rw-r-- 1 1000 1000 545 May 20 2016 Makefile
-rwxr-xr-x 1 root root 1306463 Mar 7 2021 sample_venc
-rw-rw-r-- 1 1000 1000 54483 May 20 2016 sample_venc.c
-rw-r--r-- 1 root root 46164 Mar 7 2021 sample_venc.o
-rw-r--r-- 1 root root 555840 Mar 8 2021 stream_chn0.h264
-rw-r--r-- 1 root root 583278 Mar 8 2021 stream_chn1.h264
-rw-r--r-- 1 root root 130649 Mar 8 2021 stream_chn2.h264
录制的多种不同分辨率的 stream_chnx.h264 裸流文件可以通过 VLC 播放器播放
sample_audio:音频编解码例程
在虚拟机 ubuntu 中进入 audio 文件夹执行编译命令
root@ubuntu:/home/swann/nfs/mpp/sample/venc# cd ../
root@ubuntu:/home/swann/nfs/mpp/sample# ls
audio common hifb ive Makefile Makefile.param readme region scene_auto tde venc vio
root@ubuntu:/home/swann/nfs/mpp/sample# cd audio/
root@ubuntu:/home/swann/nfs/mpp/sample/audio# ls
inner_codec_readme.txt Makefile sample_audio.c tlv320aic31_readme.txt
root@ubuntu:/home/swann/nfs/mpp/sample/audio# make
其实就是切换到audio 然后编译,生成sample_audio
root@ubuntu:/home/swann/nfs/mpp/sample/audio# make
ls: cannot access '/hiwork/osdrvhi3518e.C01': No such file or directory
arm-hisiv300-linux-gcc -Wall -g -I/home/swann/nfs/mpp/sample/audio/../common -I/home/swann/nfs/mpp/include -I/home/swann/nfs/mpp/component/acodec -I/home/swann/nfs/mpp/extdrv/tw2865 -I/home/swann/nfs/mpp/extdrv/tlv320aic31 -Dhi3518e -DHICHIP=0x3518E200 -DSENSOR_TYPE=APTINA_AR0130_DC_720P_30FPS -DHI_RELEASE -DHI_XXXX -DCHIP_ID=CHIP_HI3518E_V200 -lpthread -lm -ldl -DISP_V2 -Dhi3518ev200 -DHI_ACODEC_TYPE_INNER -mno-unaligned-access -fno-aggressive-loop-optimizations -ldl -DLCD_ILI9342 -c -o sample_audio.o sample_audio.c
arm-hisiv300-linux-gcc -Wall -g -I/home/swann/nfs/mpp/sample/audio/../common -I/home/swann/nfs/mpp/include -I/home/swann/nfs/mpp/component/acodec -I/home/swann/nfs/mpp/extdrv/tw2865 -I/home/swann/nfs/mpp/extdrv/tlv320aic31 -Dhi3518e -DHICHIP=0x3518E200 -DSENSOR_TYPE=APTINA_AR0130_DC_720P_30FPS -DHI_RELEASE -DHI_XXXX -DCHIP_ID=CHIP_HI3518E_V200 -lpthread -lm -ldl -DISP_V2 -Dhi3518ev200 -DHI_ACODEC_TYPE_INNER -mno-unaligned-access -fno-aggressive-loop-optimizations -ldl -DLCD_ILI9342 -lpthread -lm -o sample_audio sample_audio.o /home/swann/nfs/mpp/sample/audio/../common/sample_comm_vpss.o /home/swann/nfs/mpp/sample/audio/../common/sample_comm_vi.o /home/swann/nfs/mpp/sample/audio/../common/sample_comm_isp.o /home/swann/nfs/mpp/sample/audio/../common/sample_comm_audio.o /home/swann/nfs/mpp/sample/audio/../common/loadbmp.o /home/swann/nfs/mpp/sample/audio/../common/sample_comm_ive.o /home/swann/nfs/mpp/sample/audio/../common/sample_comm_vo.o /home/swann/nfs/mpp/sample/audio/../common/sample_comm_venc.o /home/swann/nfs/mpp/sample/audio/../common/sample_comm_sys.o /home/swann/nfs/mpp/lib/libmpi.a /home/swann/nfs/mpp/lib/libive.a /home/swann/nfs/mpp/lib/libmd.a /home/swann/nfs/mpp/lib/libmpi.a /home/swann/nfs/mpp/lib/libive.a /home/swann/nfs/mpp/lib/libVoiceEngine.a /home/swann/nfs/mpp/lib/libupvqe.a /home/swann/nfs/mpp/lib/libdnvqe.a /home/swann/nfs/mpp/lib/libisp.a /home/swann/nfs/mpp/lib/libsns_ar0130.a /home/swann/nfs/mpp/lib/lib_cmoscfg.a /home/swann/nfs/mpp/lib/lib_iniparser.a /home/swann/nfs/mpp/lib/lib_hiae.a /home/swann/nfs/mpp/lib/lib_hiawb.a /home/swann/nfs/mpp/lib/lib_hiaf.a /home/swann/nfs/mpp/lib/lib_hidefog.a
root@ubuntu:/home/swann/nfs/mpp/sample/audio# ls
inner_codec_readme.txt Makefile sample_audio sample_audio.c sample_audio.o tlv320aic31_readme.txt
在开发板 linux 系统下运行该程序
/mnt/mpp/sample/venc # cd ../audio/
/mnt/mpp/sample/audio # ls
Makefile sample_audio sample_audio.o
inner_codec_readme.txt sample_audio.c tlv320aic31_readme.txt
/mnt/mpp/sample/audio # ./sample_audio
/************************************/
please choose the case which you want to run:
0: start AI to AO loop
1: send audio frame to AENC channel from AI, save them
2: read audio stream from file, decode and send AO
3: start AI(AEC/ANR/ALC process), then send to AO
q: quit whole audio sample
sample command:0
ai(0,0) bind to ao(0,0) ok
please press twice ENTER to exit this sample
set volume 0
此时接上麦克风和喇叭,对着麦克风说话,可以听到喇叭也发出同样的声音
视频为证
海思3518ev200 sample
想要看视频还需要最有一点努力
在虚拟机上进入目录
/home/swann/nfs/mpp
把原来的sample文件夹重名吧备份一下,然后找到客服给的
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/51306f0367eb40cd2171277fdaf22d79.png)
文件解压后重命名为sample
上传到/home/swann/nfs/mpp
。
然后进入到venc
目录
执行
make clean
make
生成sample_venc
在开发板的linux系统下进入该目录
然后在局域网内的电脑上打开 vlc 播放器,输入地址:
rtsp://192.168.1.10/live.sdp 或者 rtsp://192.168.1.10/test.264
就可以看到摄像头了。
好了海思3518ev200开发板至此已经有了一个比较熟悉的了解,接下来祝你好运
因为新手,全都是按照客服给的文档整的,这里只是记录一下,怕到后期重头再来没有头绪。
有啥不对的地方欢迎指正。
有啥需要交流的我在这里等你v//x\公众号:“dasha500”