尽管各种数码设备越来越多,但是Linux在对它们的配置上还没有做到像Windows一样方便,很多人正是因为心爱的数码相机无法在Linux下使用,而不得不保留一个Windows系统。所以,掌握如优盘、移动硬盘、数码相机等设备在Linux下的驱动方法,对于熟练使用Linux而言是必备的技能。
这一讲将会介绍常见USB、IEEE1394、PCMCIA等移动设备的驱动概念和安装技巧,为读者更好地配置和使用这些设备提供帮助。
USB设备驱动概述
USB是通用串行总线(Universal Serial Bus),是在1994年由Intel、NEC、微软和IBM等公司共同提出的。USB的目的在于将众多的接口(串口、并口、PS2口等),改为通用的标准。它仅仅使用一个4针插头作为标准插头,并通过这个标准接头连接各种外设,如鼠标、键盘、游戏手柄、打印机、数码相机等。USB接口的特点是支持热插拔,支持单接口上接多个设备等。
USB的优点此处不再赘述,我们主要来看一看Linux对USB的支持。USB采用串行方式传输数据,USB 1.1最大数据传输率为12Mbps,Linux内核为2.4以上版本都可以支持。
USB 2.0规范是由USB 1.1规范演变而来的,它理论上速度较1.1提高了40倍,达到了480Mb/s,但目前常见的USB 2.0设备只能达到理论值的一半。 Linux内核2.4.19版本开始对USB 2.0进行支持。
除了内核的版本要对USB接口进行支持之外,还要确定目前的系统是否编译了USB的驱动模块。如果让Linux系统支持USB设备,还需要一些驱动模块。我们都知道内置的驱动程序一般都在 /lib/modules/2.4XXX/kernel/drivers目录中。这个目录中会有usb及几个子目录,可以从中找到以下的几个USB关键基础模块:
usbcore.o 所有USB设备都需要的基本驱动模块;
host/ehci-hcd.o USB 2.0设备支持;
host/usb-uhci.o Intel VIA等芯片组USB部分的驱动;
host/usb-ohci.o iMac、SiS、Ali等非Intel芯片组USB部分的驱动;
storage/usb-storage.o USB接口的存储设备,如移动硬盘、U盘等都会用到;
hid.o USB接口的键盘、鼠标等人机交互设备的基础支持。
在该目录下还有一些具体设备的驱动程序,分别驱动不同设备:
# ls -p /lib/modules/2.4.21-4.EL/kernel/drivers/usb/
acm.o CDCEther.o hpusbscsi.o microtek.o rtl8150.o usbcore.o wacom.o
audio.o dabusb.o kaweth.o pegasus.o scanner.o usb-midi.o
brlvger.o hid.o kbtab.o powermate.o serial/ usbnet.o
catc.o host/ mdc800.o printer.o storage/ uss720.o
|
usb-storage.o USB对与存储部分的驱动模块;
scsi_mod.o 对SCSI设备的支持;
sd_mod.o 对SCSI硬盘支持模块,针对USB硬盘;
sr_mod.o 对SCSI光盘支持模块,针对USB光驱;
sg.o SCSI序列的通用支持模块;
ide-scsi.o 该模块可以把IDE设备模拟成SCSI接口。
通过查看/lib/modules/2.XXX/modules.dep文件,可以查看上述这些模块是否存在。一般情况下这些模块已经被编译,否则需要重新编译内核模块。
在正确地装载了驱动以后,可以通过访问/dev/sd?设备来访问优盘或移动硬盘。通常情况下,通过访问sda1来访问移动硬盘或优盘的第一个分区。在USB基本驱动存在的情况下插入优盘,就可以看到如下信息:
usb.c: USB device 7 (vend/prod 0xea0/0x6803) is not claimed by any active driver.
Starting timer : 0 0
Vendor: Netac Model: OnlyDisk Rev: 1.11
Type: Direct-Access ANSI SCSI revision: 02
Starting timer : 0 0
Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
SCSI device sda: 32256 512-byte hdwr sectors (17 MB)
sda: Write Protect is off
|
上面这一段是usb-storage.o和SCSI驱动在起作用,我们可以看到优盘被认成是sda,要使用它可以先查看分区表:
# fdisk -l /dev/sda
Disk /dev/sda: 16 MB, 16515072 bytes
2 heads, 32 sectors/track, 504 cylinders
Units = cylinders of 64 * 512 = 32768 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 503 16080 1 FAT12
# mkdir /mnt/usb
# mount -t msdos /dev/sda1 /mnt/usb 该优盘得类型为FAT12
|
之后就可以通过访问/mnt/usb来访问优盘了。注意,如果要拔掉优盘或移动存储设备,请先umount然后再拔出,这样可以保证数据全部被写入,否则系统会出错,数据可能不完整。
USB数码相机的驱动
数码相机类型繁多,但是在Linux下使用数码相机有比较简便的方法。我们知道USB接口是数码相机的主要接口,在Linux中访问数码相机,通常可以通过下面两种方法。
1.使用专门软件
Red Hat Linux中自带的gtkam软件是一个提供了数码照相机图形化界面的程序,它支持100多种数码相机。gtkam可以直接与数码照相机相连,允许直接打开、查看、并删除图像。在Red Hat 9.0的光盘中,有gtkam的RPM包:
# ls gtkam*
gtkam-XXXX.i386.rpm gtkam-gimp-XXXX.i386.rpm
# rpm -ivh --aid gtkam*
# rpm -ivh --aid --force gphoto2-XXXX.i386.rpm
|
gtkam基于gphoto,有时无法使用gtkam的原因是因为gphoto没有安装或模块被覆盖,所以需要重新安装gphoto。安装完毕后,在X-Window中运行gtkam就可以看到如图1所示界面。

图1 gtkam界面
在图1中,单击gtkam的“camera”→“Add Camera”可以添加数码相机,然后在弹出的窗体中单击“Detect”,测试数码相机的连接类型。最后单击“OK”,就可以看到数码相机中的照片了。

图2所示使用gtkam连接Kodak DX6340相机,看到存储卡中的照片。选择照片,单击保存就可以把照片保存到硬盘上。
我们也可以从http://sourceforge.net/project/showfiles.php?group_id=8874&release_id=209817获得gtkam的最新版本及源代码,下载后可以使用其中的install.sh来进行安装。
2.把数码相机当做是USB存储设备还有一种方式就是把数码相机当做是USB存储设备,如优盘、读卡器等,这样就可以像访问优盘那样来访问数码相机:
# mount -t vfat /dev/sda1 /mnt/usb
|
但是,采用这种方式极有可能遇到不能支持的数码相机,比如笔者使用的Kodak DX6340数码相机,插入USB口之后出现以下信息:
usb.c: USB device 2 (vend/prod 0x40a/0x570)
is not claimed by any active driver.
|
对这种问题的解决办法不只是可以驱动不支持的数码相机,像不支持的存储设备也都可以使用,比如优盘、读卡器等。
(1)使用lsmod确定USB基本驱动模块已经装载,如果没有使用以上的命令装载:
# modprobe ehci-hcd; modprobe usb-uhci;
modprobe usb-storage
# modprobe ide-scsi; modprobe scsi_mod;
modprobe sd_mod
|
(2)使用cat /proc/bus/usb/devices得到当前系统USB总线上的设备信息,尤其注意Vendor、ProdID、Product等信息:
C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=255ms
T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 3 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=040a ProdID=0570 Rev= 1.00
S: Manufacturer=Eastman Kodak Company
S: Product=KODAK EasyShare DX6340 Zoom Digital Camera
S: SerialNumber=KCKCJ33400274
|
|