基于嵌入式linux视频监控系统内容摘要:

,包括两个方面的移植:第一层面是针对 CPU 的移植,第二层面是针对 BOARD 的移植,同时需要移植相关的头文件。 按照开发板说明对相关文件进行修改、编译,然后烧写到开发板的 Flash中。 这样就完成了 UBoot 的移植。 五、系统 环境搭建 软件平台采用的嵌入式操作系统为 Linux , Linux 具有内核小、效率高、源码开放、内核直接提供网络支持等 优点,但嵌入式系统的硬件资源有限,因此需根据实际需求对内核进行裁剪,配置所需的功能模块,然后再移植到硬件平台上。 嵌入式系统的软件开发采用交叉编译调试的方式,在宿主机上安装 Linux 系统,建立交叉编译环境,在宿主机编写程序代码,再利用交叉编译工具生成目标机上可用的可执行文件,最后向目标机平台移植。 交叉编译环境的搭建 交叉编译就是在一个平台上生成另一个平台上的可执行代码。 在进行嵌入式开发时,由于 ARM 平台的系统资源有限,不可能在 ARM 平台上进行本机编译,因此我们可以在 PC 机上编译出针对 ARM 平台的可移 植程序,然后下载到开发板上执行。 要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具然后用这个交叉编译工具编译程序的源码,最终生成可以在开发板上执行的代码。 目标板的系统是 Linux,我们要进行 Linux 下的程序开发,首先要安装 Linux 系统。 我们选用 作为主机开发环境。 在虚拟机里安装好 Ubuntu,由于嵌入式交叉编译时经常需要用到 root 用户权限,为避免日后频繁要求输入密码,我们可以通过编辑 /etc/gdm/目录下的 Ubuntu设置为 root用户自动登 录。 在 中添加以下内容即可。 [daemon] TimedLoginEnable=true AutomaticLoginEnable=true TimedLogin=root AutomaticLogin=root TimedLoginDelay=30 设置 Ubuntu的 IP 地址为固定 IP,方便以后程序的调试。 交叉编译器我们选用飞凌公司提供的 ,首先将 文件拷贝到 Ubuntu中,输入以下命令安装: mkdir /usr/local/arm tar jxvf –C /usr/local/arm (将文件解压到 /usr/locsl/arm目录下) 安装好后可用 /usr/local/arm/–v 命令查看版本信息,若编译器安装成功则会显示出交叉编译器的版本信息,否则需要重新安装。 为了方便日后调试程序我们可以把安装目录加入环境变量中,编辑 /etc 下的profile 文件,加入: export PATH=”$PATH: /usr/local/arm/” 修改完后重启系统,然后在终端输入 armlinuxgcc 若提示 no input file 则交叉编译环境搭建成功。 NFS环境的搭建 在嵌入式开发过程中,交叉编译好的程序要在开发板上运行,就要烧写到目标板的 flash 上,对于应用程序,我们需要频繁调试,这样每次都要烧写一遍,严重影响开发效率。 为了方便程序调试,我们搭建了 NFS 系统。 NFS 是 Network File System 的简称,是分布式计算机系统的一个组成部分,用它可 实现在已购网络上共享和装配远程文件系统。 可以通过网络让不同操作系统的计算机可以共享数据。 可以通过它把远程主机的目录挂载到本机 ,使得访问远程主机的目录就像访问本地目录一样方便快捷。 Ubuntu 上默认没有安装 NFS 服务器,首先要安装 NFS 服务程序,在终端输入:sudo aptget install nfskernelserver 这样系统会自动帮我们安装好 NFS 服务器,这样宿主机就相当于 NFS Server。 NFS是一个 RPC服务程序 ,所以在使用它之前 , 先要映射好端口 —— 通过 portmap设定,在启动 NFS 之前 , 需要启动 portmap 服务。 修改 /etc/exports,添加一个共享目录: /var/nfs/ *(rw,sync),其中 /var/nfs/是要共享的文件夹, *是表示所有用户都可以挂载这个共享文件夹, (rw,sync)表示以读写方式挂载,并且使资料同步写入存储器中。 使用命令 sudo exportfs r 更新,使用命令 /etc/服务和 nfskernelserver 服务。 在开发板上输入命令: mount t nfs :/var/nfs /mnt o nolock将远程主机 /var/nfs 目录挂在到本地的 /mnt 目录下。 t 选项指定文件系统的类型为 NFS,o 选项禁用锁定。 六 、 流媒体服务器设计 视频采集模块 设计 视频采集模块通过嵌入式 Linux 操作系统调用 Video4Linux(V4L)和底层设备驱动程序来完成视频捕获。 V4L 是 Linux 中关于视频设备的内核驱动,它为Linux 下的各种视频设备提供了统一的编程接口,应用程序通过这些接口函数就可以操纵各种不同的设备。 视频采集流程如图 2 所示。 图 2 视频采集流程 (1)打开视频设备。 Linux 下的视频设备文件一般为“ /dev/video0”,通过调用函数 v4l_open( ),利用 vdfd=open(“/dev/video0”,O_RDWR)打开设备并获得设备文件描述符 vdfd。 (2) 获取设备和图像信息。 通过 v4l_get_capability( ) 函 数获取设备信息, 通过v4l_get_picture( )函数获取图像信息。 (3)内存映射。 获取图像的方式有两种: read( )直接读取和 mmap( )内存映射。 直接读取方式通过内核缓冲区来读取图像数据,而本文使用内存映射方式 mmap( ),内存映射方式可以直接把设备文件映射到内存中,进程可以像访问普通内存一样对文件进行访问,读取效率更高。 初始化内存映射时,需在内存中开辟一块空间,利用 ioctl(vdfd,VIDIOCGMBUF,amp。 (vdmbuf))操作取得需要映射的内存空间大小 vd,利用 mmap( )函数,即 vdmap=(unsigned char*) mmap(0, vd, PROT_READ | PROT_WRITE,MAP_SHARED, vdfd, 0)操作,把设备文件的内容映射到内存, vdmap 指针所。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。