数码相机也是一种存储设备,然而对于Linux下的移动存储设备都是通过usb-storage.o驱动的,然后模拟为 SCSI设备。如果数码相机无法使用,通常是usb-storage驱动未包括此厂商识别和产品识别信息(在类似skel_probe的USB最初探测时被屏蔽了)。对于USB存储设备的硬件访问部分,通常是一致的。所以,要支持数码相机,仅需要修改usb-storage中关于厂商识别和产品识别列表部分。
USB设备识别信息中重要的部分如下:
P: Vendor=040a ProdID=0570 Rev= 1.00
S: Manufacturer=Eastman Kodak Company
S: Product=KODAK EasyShare DX6340 Zoom Digital Camera
|
若/proc/bus/usb下没有相应USB设备信息,应输入以下命令将USB设备文件系统手动挂装到/proc/bus/usb:
# mount -t usbdevfs none /proc/bus/usb
|
(3)编辑drivers/usb/storage/unusual_devs.h文件。下面是所有已知的USB产品登记列表,格式如下:
UNUSUAL_DEV(idVendor, idProduct, bcdDeviceMin, bcdDeviceMax,
vendor_name,
product_name,
use_protocol, use_transport, init_function,
Flags).
|
usb-storage.o就是根据这个列表来识别各种设备。这样,可以将刚才/proc/bus/usb/devices文件中得出的信息添加在上面,重新编译模块,让usb-storage驱动去认识和发现它。
UNUSUAL_DEV( 0x040a, 0x0570, 0x0001, 0x0001,
"Eastman Kodak Company",
"KODAK EasyShare DX6340 Zoom Digital Camera",
US_SC_SCSI, US_PR_CB, NULL,
US_FL_FIX_INQUIRY | US_FL_START_STOP | US_FL_MODE_XLATE ),
|
注意,添加以上几句代码的位置一定要正确。经过比较发现,usb-storage驱动对所有注册都是按idVendor、 idProduct数值从小到大排列的,因此添加代码也要放在相应位置。
(4)重新编译模块,之后插入的数码相机就可以像其它优盘一样作为USB存储设备去访问。
# make dep
# make modules
# make modules_install
|
USB摄像头的驱动
在内核源文件中,自带了一部分摄像头的驱动,目前大量的杂牌摄像头都可以使用OV511的驱动模块。如果USB摄像头无法使用,则可以试试重新编译模块。下面就以一个没有驱动程序的摄像头为例,尝试使用OV511驱动模块驱动。
1. 获取内核源码
先从Red Hat光盘或kernel.org获取当前版本的内核源码,并安装:
# rpm -ivh kernel-source-2.XXX.rpm
|
或者
# tar zxvf linux-2.XXX.tar.gz
|
2. 运行
到源码目录中运行:
或者
# make xconfig //需要在X-Window下
|
3. 选择USB的模块
选择USB的模块如图3所示。
选择要编译的驱动可以查看说明书,确定摄像头芯片是什么型号,如图4所示,选定OV511摄像头的支持。在USB support下可以选择多种驱动的模块,比如常用的OV511芯片的摄像头驱动、USB打印机的驱动等。

图3 编译内核选择USB support

图4 在USB support下可选择多种驱动模块
4. 保存、编译和安装
# make dep
# make modules
# make modules_install
|
5. 加载驱动
# modprobe ehci-hcd
# modprobe usb-uhci
# modprobe ov511
cat /proc/devices
|
接着运行gnomemeeting等工具,选择/dev/video0或/dev/video1作为摄像头设备文件,这样摄像头就可以使用了。
|