其次是内核的修改。修改的文件主要有:
1)uClinux-dist/linux-2.4.x/arch/armnommu/boot/compressed/head.S,启动文件。
2)uClinux-dist/linux-2.4.x/arch/armnommu/boot/Makefile,启动配置文件,主要修改的是ZTEXTADDR(自解压代码的起始地址)和ZRELADDR(内核解压后代码输出起始地址)。
3)uClinux-dist/linux-2.4.x/arch/armnommu/config.in,修改DRAM_BASE、DRAM_SIZE、FLASH_MEM_BASE和FLASH_SIZE,主要为确定SDRAM、FLASH的起始地址和大小。
4)uClinux-dist/linux-2.4.x/arch/armnommu/Makefile,修改TEXTADDR来配置内核的起始地址。
5)uClinux-dist/linux-2.4.x/drivers,修改并添加所需的驱动程序。
6)uClinux-dist/linux-2.4.x/drivers/block/blkmem.c,ROM文件系统的定位修改。
7)uClinux-dist/vendors/TI/dm270,修改硬件配置文件。
8)uClinux-dist/linux-2.4.x/Makefile,选择CPU体系机构(ARCH?:=?armnommu)和交叉编译器(CROSS_COMPILE?=?arm-elf-)。
对内核修改完毕后,在uClinux-dist目录下执行make menuconfig。在弹出的对话框中对内核进行配置和裁减。
最后就是编译内核。依次执行make dep(编译相关依赖文件),make clean(在编译内核之前把内核清理干净),make(最终的编译命令),此时在images目录下生成了image.ram和image.rom文件,iamge.rom便是要烧写到FLASH中的内核映像文件。
驱动程序设计
设备驱动程序是内核的一部分,是操作系统内核和机器硬件之间的接口。Linux操作系统将所有的设备看作具体的文件,对与用户而言,可以通过设备驱动程序所提供的一组入口点(open()、close()、read()、write()、ioctl()等)来完成对设备文件的访问和控制。在Linux系统里,设备驱动程序提供的这组入口点是由结构
static struct file_operations xxx_fops =
{
open: xxx_open,
release: xxx_close,
read: xxx_read,
write: xxx_write,
ioctl: xxx_ioctl,
};来向系统进行说明的。file_operations结构中的成员几乎全部是函数指针,所以实际上是函数跳转表,并根据具体硬件功能完成这些函数的编写。之后必须定义一个初始化函数
static int __init xxx_init(void)
{
register_chrdev(major,"xxx",&xxx_fops);
}
向系统注册设备,登记驱动程序所提供的入口点。当应用程序对设备操作时,会根据file_operations结构中的函数指针找到相应的操作函数并进行调用。图3中的驱动程序都是按照上述来完成的。
应用程序设计
在应用程序中设计了两个进程:GPS进程和视频进程,应用程序流程图如图4所示。
GPS进程,首先设置车载终端的IP地址,初始化GPS模块,然后通过Linux Socket编程和服务器建立链接,等待服务器命令,如果10秒钟内没有收到命令,则通过CDMA发送GPS数据到服务器。
视频进程,首先注册信号量SIGUSR1,其次是对视频相关硬件(DSP、TVP5150、CCDC、Preview engine)的初始化,初始化的具体实现是在各个驱动程序中完成的,然后利用Linux Socket编程和服务器建立链接,最后启动MPEG-4编码器。当视频进程成收到SIGUSR1信号后,便通过CDMA传送编码好的视频数据。
ARM与DSP通讯
整个程序运行过程中时刻存在着ARM与DSP之间的通讯。
在视频编码开始前,DSP的引导由ARM来控制,首先ARM将DSP挂起在复位状态,随后向DSP下载MPEG-4编码程序,最后唤醒DSP开始编码。DSP的引导顺序如图5所示。
在视频编码过程中,ARM与DSP通过HPIB进行通信。ARM管理着DSP数据空间的数据输入输出。在DSP数据空间定义了一段内存空间作为命令寄存器,然后通过HPI访问这些寄存器,这就是ARM与DSP之间的一个通讯接口,ARM和DSP都可以异步地向对方发出命令,不存在主从关系。为了建立这种双向通讯,系统设计了两组寄存器,一组用于ARM(命令由DSP发出),另一组用于DSP(命令由ARM发出)。在编码过程中就是利用这组寄存器以及HPI中断完成了图像数据的读取、编码和发送。DSP的HPI中断过程如图6所示。DSP通过写寄存器并发出HPI中断,向ARM发送命令。ARM在HPI中断服务程序中判断命令类型并执行,其中一种命令是DPS向ARM请求原始图像数据进行编码;另一种命令是DPS请求ARM发送压缩后的MPEG-4视频数据,在这个命令中会向视频进程发出SIGUSR1信号。ARM执行完命令之后发出HPI通知DSP。
结语
本系统把无线视频监控技术和GPS定位系统相结合,同单一的GPS定位系统相比有明显的优势。在实际测试中,实现了视频和GPS的同步传输。视频传输速度可达8帧/秒,图像分辨率达到CIF格式。同时通过对GPS数据的解析,可准确的确定客车的位置和速度。随着MPEG-4算法的优化,无线网络的不断发展以及3G的推出,传输效果将会更加的理想。虽然该系统是为长途客运车而设计,但它的整个解决方案可用于其它需要远程监控的行业,比如可广泛应用于军事、交通、油田、煤矿以及手持娱乐设备等。