海思笔记

海思笔记

 

第一章、海思hi3518e的底层

所使用的的cpu是海思HI3518E V200

1.1、hi3518e开发板的运行过程

通过串口转接线(不接电源线,txd接rxd,rxd接txd,地线接地线)连接上电脑,接网线。通过SecureCRT挂载到ubuntu16.0403中的/aston/rootfs。在SecureCRT的cmdline中./sample_venc进入运行模式。

设置windows的网络ip(192.168.1.20),让虚拟机linux、windows和海思开发板中设置的网络(192.168.1.10)三者保持同网段(192.168.1.1)。

关闭windows中的防火墙,打开vlc软件,在媒体中点打开网络串流,输入rtsp://192.168.1.10:554/stream_chn0.h264   在下面的选项(缓冲)选300ms。

1.2、视频的产生整个流程

sensor可以看成时光电传感器,镜头把光折射后缩小(大范围的光转小范围),光照射到sensor,sensor把光信号转成模拟电信号。模数转换出来。

图像处理ISP(image signal processing),处理曝光等等。

内置DSP进行视频编码压缩,编码和压缩是同个意思。h.264/h.265压缩算法,运算。所以hi3518e的SoC的cpu为arm+dsp。

视频流传输:网络传输、http/rtsp等。

 

接收端有两个处理方法:

视频存储或者视频回放。

视频存储:打包成MP4等格式存储。

视频回放:解码+播放。

 

 

mpp文件夹 视频编码

ko后缀文件,海思官方提供的驱动

extdrv外部驱动,sensor驱动

 

1.3、海思SDK

   海思hi3518e的bsp在osdrv中的opensource文件夹中。

   编译完后,uboot、kernel、jffs2的镜像在pub目录下。

在交叉编译工具链的选择:300和400。glibc库是gcc中最完整的库。uclibc是精简了glibc库。我们选择了uclibc库的arm-hisiv300-linux。安装后出现下列问题:

第一是sh脚本的链接文件有问题,本来是链接与dash的,需要换成bash。

第二是工具链是32位的,而我们的ubuntu系统是64位的,我们需要添加软件兼容包。

  

参考资料:

http://blog.csdn.net/ma57457/article/details/68923623

http://www.cnblogs.com/leaven/p/5084902.html

sudoaptitude install lib32zl

sudoaptitude install lib32stdc++6-4.8-dbg

安装完这个两个包后,加上先前先.bashrc添加的PATH路径,即可编译osdrv。

   在编译整个osdrv的时候出现的问题有:
第一、找不到mkimage,解决方法:把mkimage复制到一个路径(在PATH环境变量中指定的位置)。

第二、是找不到zlib,解决方法:整个osdrv是提供了zlib的,只是因为已经编译了zlib没有部署它。所以要做的就是部署zlib,把osdrv/tools/pc/zlib/tmp/lib下的全部库复制到osdrv/tools/pc/jffs2_tool/tmp/lib/,

和把osdrv/tools/pc/zlib/tmp/zlib-1.2.7下的zlib.h, zconf.h复制到osdrv/tools/pc/

jffs2_tool/tmp/include/;在次编译就可以完成jffs2的根文件系统。

第三、

是因为我们使用的ubuntu的版本太高,海思的SDK中使用的mtd-utils的版本过低导致的问题。

解决方法参考这片博客中http://blog.csdn.net/mtbiao/article/details/77052659

方法2:修改操作系统头文件/usr/include/netdb.h,将此宏__USE_XOPEN2K注释,如下图(注意#ifdef与#endif是一一对应的)。这个宏不止一个。

将Makefile中的hipctools下面除了jffs2编译和复制的内容外的全部去除,这样保证了不会出现很多错误。

   至此,我们就可以编译得到u-boot和kernel,jffs2的rootfs。分别名为:

 

   这些制作完毕后,需要进行烧录。uboot作为第一个烧录需要使用下列两种方法中的一种:

第一使用烧录工具对spi flash进行烧录。

第二使用海思官方提供的烧录工具进行烧录。

 

我选择的分区表:

BootLoader            1M         0x0-0x00100000

kernel                     3M         0x00100000-0x00400000

rootfs               12M              0x00400000-0x01000000

 

相关烧录命令:

前提:DDR地址为0x80000000-0x83FFFFFF

1、tftp更新并重新烧录uboot的命令序列:
mw.b 0x82000000 ff 0x100000        //擦除ddr中以0x82000000起,1M大小

tftp0x82000000 u-boot-hi3518ev200.bin              //tftp下载uboot

sfprobe 0                                    //选择spi flash (数字是表示第几块flash)

sferase 0x0 0x100000         //擦除spi flash中以0x0起,1M大小

sfwrite 0x82000000 0x0 0x100000        //     从ddr中0x82000000烧录到flash

2、tftp更新并重新烧录kernel的命令序列:

mw.b 0x82000000 ff 0x300000

tftp0x82000000 uImage_hi3518ev200

sfprobe 0

sferase 0x100000 0x300000             //0x100000起始位置,0x300000大小

sfwrite 0x82000000 0x100000 0x300000            

tftp更新并重新烧录rootfs的命令序列:

mw.b 0x82000000ff 0xc00000

tftp0x82000000 rootfs_uclibc_64k.jffs2

sf probe 0

sferase 0x400000 0xc00000

sf write0x82000000 0x400000 0xc00000

 

注:sf erase 0x400000 0xc00000 这句擦除flash的命令,实质是向flash中写ff。mw.b 0x820000000 ff 0xc00000是把ddr中12M空间写为ff。所以要保证flash和ddr中的擦除大小要一致,不然会在flash中校验出现错误。

 

设置bootcmd和bootargs:

set bootcmd ‘sfprobe 0; sf read 0x82000000 0x100000 0x300000; bootm 0x82000000’

 

setenvbootargs 'mem=32M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2mtdparts=hi_sfc:1M(boot),3M(kernel),12M(rootfs)'

注意:

root=/dev/mtdblock2代表我们rootfs在第三个分区
mem=32M,我们的内存是64M,而分配给kernel的只有32M,剩下的是给海思mpp(专门用于处理视频相关的)使用。

1.4、部署开发环境

1.4.1、mpp

   由海思官方以.ko(模块)和lib中的静动态库。

ko的使用,在ko文件夹中有一个load3518e,执行:

./load3518e-i -sensor ar0130 -osmem 32 -total 64

传参分别指定了sensor,osmem(linux kernel)的大小,total整体的大小。

1.4.2、kernel设置网络并挂载nfs

   在etc/profile中写入:
ifconfig lo 127.0.0.1

ifconfigeth0 192.168.1.10

保存。

在cmdline下输入下列命令挂载nfs服务器:
mount-t nfs -o nolock 192.168.1.141:/home/aston/rootfs/mnt

其中/home/aston/rootfs 是ubuntu中的地址

/mnt是开发板中rootfs的地址

 

小总结:在profile中要去添加做的是分别配置网络,安装ko模块,以及挂载nfs服务器。

再完成了这些操作后,可以重新制作一份rootfs,命令:

osdrv/pub/bin/pc/mkfs.jffs2-d osdrv/pub/rootfs_uclibc -l -e 0x10000 -o

osdrv/pub/rootfs_uclibc_64k.jffs2

   命令中使用的工具是相对路径。

 

第二章、mmp sample

1、基本知识

1.1、sensor和图片的知识

颜色的三个关键:亮度、色度、饱和度

 

sensor的工作原理:

光照在成像物体被反射->镜头汇聚->sensor光电转换->ADC模数转换成rawRGB

rawRGB通过特点的算法获得RGB。

rawRGB是sensor这种硬件的特点,因为不能通过sensor获取整个RGB数值,所以通过每个像素点为下表:           

R

G

B

R

G

B

R

G

B

R

G

B

R

G

B

R

G

B

R

G

B

R

G

B

R

G

B

R

G

B

R

G

B

R

G

   然后通过局部的计算获得一个RGB数据。

   图像处理:压缩、修整、显示等这些是rawRBG进来后的事情(我认为是在rawRGB转RGB前),也就是软件处理的内容。

观看的影响:分辨率&#x

你可能感兴趣的:(个人笔记)