表1 批量传送图片测试
下面简要介绍Kodak DX6340数码相机USB驱动程序设计:
(1) 驱动程序的注册:
本程序中数码相机驱动以USB字符型设备来实现,USB设备驱动第一步要做的是通过usb_driver结构向uClinux内核注册自己,告诉系统它所支持的设备类型及操作类型。
statIC struct usb_driver dx6340_driver = {
name: "dx6340", // 驱动程序名称
id_table: dx6340_table, // 此结构用于保存设备的厂商ID和产品ID
probe: dx6340_probe, // 用于USB设备探测枚举例程
disconnect: dx6340_disconnect, // 用于设备的卸载
fops: &dx6340_fops, // 驱动程序的操作类型
minor: USB_DX6340_MINOR, // 设备的次设备号
};
结构成员fops指向一个file_operations结构。这个结构提供基本的I/O操作接口函数open、close、read、write的实现,对中断的处理、内存映射及对I/O通道的控制函数ioctl的实现。通过这个结构,实现了系统调用和驱动程序的关联。在应用程序中发出文件操作的相关命令时,内核根据这些指针调用相应的函数,从而完成驱动与内核间的通信。
static struct file_operations dx6340_fops = {
owner: THIS_MODULE, // fops所属范围
read: dx6340_read, // 相机的读操作
write: dx6340_write, // 相机的写操作
open: dx6340_open, // 打开相机设备
release: dx6340_release, // 关闭相机设备
};
在数据读写read、write函数中使用批量传输方式,调用函数usb_bulk_msg (struct usb_device *usb_dev, unsigned int pipe, void *data, int len, int *actual_length, int timeout)。
(2) 驱动程序的在系统中的调用
接下来的工作是将设备驱动程序嵌入内核。通常有两种方式,一种是静态编译进内核,另一种是编译成模块。后者能够动态进行加载,利于调试。当系统使用该设备驱动时,调用驱动初始化函数int __init dx6340_init(void){
if (usb_register (&dx6340_driver) < 0)
return -1;
info(DRIVER_VERSION ":" DRIVER_DESC);
return 0;
}
与之对应,当系统注销该设备驱动时,则调用驱动注销函数void __exit dx6340_cleanup(void){
usb_deregister (&dx6340_driver);
}
实验研究
为了测试该终端设备的工作性能,设计场景进行了现场实验:
(1) 批量传送测试
(2) 网络断开测试
当终端设备连接到服务器后,将终端设备网线拔掉,模拟网络故障。在网络断开后30秒,终端设备检测到网络故障,进入重连程序,接好网线后,终端顺利连接到服务器,并正常工作。
(3) 异常测试
a.模拟串口通信异常实验。将设备与相机控制板连线断开,设备终端向控制板发送命令尝试3次,若无响应则发送信息至服务器,需要人工查看控制板/相机状况。
b.续传测试。在设备终端向服务器发送图片过程中,将服务器关闭。这时终端设备进入重连程序,等待与服务器重新连接后,从发生中断时那张照片开始继续向服务器发送图片。
(4) 定时取图测试
上位机定时操作,实现无人职守自动取图。
通过实验表明,该设备具有良好的稳定性,能够适应不同的网络环境,可以应付不同的异常情况,有较好的通用性。
结 语
本文中设计的电子警察终端设备满足用户设计要求,经现场实际运行,证明了所设计的系统可靠、稳定。所提出的照片采集传输方案已用于电子警察实际系统中,并实现无人职守自动定时取图,服务器获取照片信息准确无误。对于停电或网络问题造成的异常,设备可以及时进行处理,很好的验证了本方案的可行性和实用性。
上一页 [1] [2]
本文关键字:电子 嵌入式 嵌入式系统-技术,单片机-工控设备 - 嵌入式系统-技术