微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 电源设计 > 基于TMS320DM365的网络摄像机底层软件应用

基于TMS320DM365的网络摄像机底层软件应用

时间:08-11 来源:互联网 点击:


整个u-boot的启动过程可以分为三个阶段。首先在flash中启动代码,设置异常的入口地址和异常处理函数、配置系统主频、I/O寄存器初始化、初始化存储空间,然后将之后的程序加载到RAM中,起始地址设定,并在RAM中运行,设置硬件系统结构类型、启动参数地址、打开芯片外围设备的使能端、设置内核参数、复制镜像文件和设置入口函数。最后运行嵌入式系统内核镜像。
将u-boot系列文件导入摄像机后开启电源,通过RS232串口,可以读取系统的启动信息。整个启动过程可以分为三个不同阶段。第一阶段首先u-boot驱动先确定启动的ubl版本和启动方式,检测Flash和总线状态,一般传统的启动方式为NANDFlash启动。第二阶段确认RAM等基本传输硬件状态,检测时钟信号,接下来开始将Flash中的u-boot启动程序转入RAM中。最后一阶段检测所有的硬件信息,并将这些信息传给Linux内核,然后运行Linux内核,当硬件信息有错误时,会跳出错误报告。所检测的硬件信息主要有:CPU内核和状态、PLL状态、RAM存储器、TCP网络协议、I/O口等。这一步骤结束后,系统地控制权将完全转交给Linux。启动一系列内核文件后,会出现Linux的用户登录界面。
完成所有硬件检测和驱动安装以后,高清网络摄像机的所有硬件都开始工作,并且拥有最基本的功能,能够传输模拟视频信号,并且可以登录网络,自动获得IP地址。但是通过游览器进行图像的获取,需要进一步烧录应用程序。同时,还可以通过串口实时地设置摄像机内Linux内核的设置。
3.3 驱动程序移植
驱动程序是硬件运行功能实现的基础。由于所设计的DM365网络摄像机配有USB等多功能通用硬件接口,所以即使是成品之后,处于扩展的原因,新硬件的添加也会非常频繁,这里就必须让设备驱动也更新。这里我们想使用一个最简便的GPIO驱动程序来作为一个驱动程序移植的范例。
驱动移植的一个整体流程,是将针对某一硬件功能的驱动软件加入Linux嵌入式调用的特殊语句,并且存放在内核操作系统特定的存放位置,修改内核配置文件,使这个驱动能被调用。完成这些修改之后,就能在应用程序层面使用这个硬件设备了。
首先是对CPIO驱动源码的修改和放置,GPIO是嵌入式系统最简单、最常用的资源了,比如点亮LED,控制蜂呜器,输出高低电平,检测按键,等等。GPIO分输入和输出,在linux-2.6.32内核中,本来就有有关GPIO的最底层的寄存器驱动,所以不用另外新建驱动程序,其位置是在\arch\arm\mach-dayrinci目录下的gpio.c,这个是寄存器级的驱动,与一般单片机MCU一样,GPIO的设置都是通过特殊寄存器的数值决定的。据DM365的芯片DATASHEET,DM365的CPIO分为3组BANK,BANK01组包括GPIO0~GPIO31,BANK23组包括GPIO32~GPIO63,BANK45组包括GPIO64~GPIO70,由于硬件资源的原因,DM365并不是GPIO管脚就是纯粹的GPIO脚,GPIO管脚和其他一些标准接口复用相同的引脚,比如SPI和GPIO复用,I2C和CPIO复用等,到底是使用CPIO还是其他接口,在初始化的时候,都需要对PINMUX0和PINMUX1两个寄存器进行设置,而这两个寄存器的设置则在\arch\arm\mach-davrinci目录下mux_cfg.c和对应的mux.h里,当然如果只是用一些只作为I/O功能的管脚,则不需要对着两个寄存器进行设置相较于单片机对于I/O口的设置,DM365的GPIO驱动多了一些嵌入式系统特有的功能语句。比如:需要定义一个设备名称用于程序内部的调用,#define DEVICE_NAME“dm365_gpios” /*定义设备驱动的名字,或设备节点名称*/并且定义驱动文件的API,在Linux系统当中,所有设备都可以当做文件进行操作。
static const struct file_operations
davinci_dm365_gpio_fileops={
.owner=THIS_MODULE,
.open=davinci_dm365_gpio_open,
.ioctl=davinci_dm365_gpio_ioctl,
};
定义内核初始化的函数功能,这一部分是ARM最基础的IO口这几方法,这里就不进行详细介绍。
完整这些内容后,这个GPIO的驱动程序就可以被Linux系统内核调用了。之后修改内核文件的设置,修改Kconfig文件,加入一段GPIO设置,说明GPIO驱动功能等。存makefile文件的128行,加入语句:ohi-$(DAVINCI_DM365_GPIOS)+=dm365_gpios.o,输出之前驱动软件的.o ut文件,这样整个内核配置完成。之后这个I/O口的驱动程序就可以在应用程序中利用语句:fd=open(“/dev/dm365_gpios”,0);来运行。
这里使用了一个较为简单常见的GPIO驱动来举例,是为了更简单地描述整个Linux嵌入式系统驱动软件的移植过程。对于其他更为专业的硬件驱动,如usb设备、 无线网络设备等,一般建议从设备购买商那边获取面向Linux的驱动软件,然后经过部分修改后移植进入Linux内核中,最后修改设置文件和makefile文件完成驱动的调用功能。

4 结束语
网络摄像机,简化了传统的以DVR和NVR作为系统的核心的网络监控系统。每个摄像头都可以作为一个独立的视频监控系统,拥有网络传输功能和IP地址。系统结构上能够更具有逻辑性和层次性,系统组件也更为便利、有很大的扩展能力,方便了跨地域的大型监控系统组建和访问。而这种硬件结构上优化的基础就是一个功能强大、扩展性好的软件平台,整个DM365网络摄像机在软件方面选用了拥有丰富源代码和极高稳定性的Linux操作系统,并在该基础上实现了底层软件和上层应用程序的设计分离,使得整个系统的软件开发和使用更为方便和高效。本文详细描述基于DM365的网络摄像机的底层软件应用,包括了整个系统的软件结构、驱动软件的移植、内核系统的优化和启动程序加载等应用性问题。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top