首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | HR | 镜像
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>linux基础>安装配置>正文

详细介绍Linux操作系统下的USB硬件设备驱动

http://www.oklinux.cn  2007-08-28  赛迪网 kit  会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn

  一旦用新的已启用 USB 的内核重新引导后,若/proc/bus/usb下没有相应USB设备信息,应输入以下命令将 USB 设备文件系统手动挂装到 /proc/bus/usb:

# mount -t usbdevfs none /proc/bus/usb 

  为了在系统引导时自动挂装 USB 设备文件系统,请将下面一行添加到 /etc/fstab 中的 /proc 挂装行之后:

none /proc/bus/usb usbdevfs defaults 0 0 

  模块的配置方法.

  在很多时候,我们的USB设备驱动并不包含在内核中。其实我们只要根据它所需要使用的模块,逐一加载。就可以使它启作用。

  首先要确保在内核编译时以模块方式选择了相应支持。这样我们就应该可以在/lib/modules/2.4.XX目录看到相应.o文件。在加载模块时,我们只需要运行modprobe xxx.o就可以了(modprobe主要加载系统已经通过depmod登记过的模块,insmod一般是针对具体.o文件进行加载)

  对应USB设备下面一些模块是关键的。

 

usbcore.o 要支持usb所需要的最基础模块
usb-uhci.o (已经提过)
usb-ohci.o (已经提过)
uhci.o 另一个uhci驱动程序,我也不知道有什么用,一般不要加载,会死机的
ehci-hcd.o (已经提过 usb2.0)
hid.o USB人机界面设备,像鼠标呀、键盘呀都需要
usb-storage.o USB存储设备,U盘等用到

  相关模块

 

ide-disk.o IDE硬盘
ide-scsi.o 把IDE设备模拟SCSI接口
scsi_mod.o SCSI支持

  注意kernel config其中一项:

 Probe all LUNs on each SCSI device

  最好选上,要不某些同时支持多个口的读卡器只能显示一个。若模块方式就要带参数安装或提前在/etc/modules.conf中加入以下项,来支持多个LUN。

 add options scsi_mod max_scsi_luns=9  

 

  sd_mod.o SCSI硬盘
  sr_mod.o SCSI光盘
  sg.o SCSI通用支持(在某些探测U盘、SCSI探测中会用到)

  常见USB设备及其配置

  在Linux 2.4的内核中已经支持不下20种设备。它支持几乎所有的通用设备如键盘、鼠标、modem、打印机等,并不断地添加厂商新的设备象数码相机、MP3、网卡等。下面就是几个最常见设备的介绍和使用方法:

  USB鼠标:

  键盘和鼠标属于低速的输入设备,对于已经为用户认可的PS/2接口,USB键盘和USB鼠标似乎并没有太多更优越的地方。现在的大部分鼠标采用了PS/2接口,不过USB接口的鼠标也越来越多,两者相比,各有优势:一般来说,USB的鼠标接口的带宽大于PS/2鼠标,也就是说在同样的时间内,USB鼠标扫描次数就要多于PS/2鼠标,这样在定位上USB鼠标就更为精确;同时USB接口鼠标的默认采样率也比较高,达到125HZ,而PS/2接口的鼠标仅有 40HZ(Windows 9x/Me)或是60HZ(Windows NT/2000)。

  对于USB设备你当然必须先插入相应的USB控制器模块:usb-uhci.o或usb-ohci.o

 modprobe usb-uhci

  USB鼠标为了使其正常工作,您必须先插入模块usbmouse.o和mousedev.o

 modprobe usbmouse modprobe mousedev

  若你把HID input layer支持和input core 支持也作为模块方式安装,那么启动hid模块和input模块也是必要的。

 modprobe hid modprobe input

  USB键盘:

  一般的,我们现在使用的键盘大多是PS/2的,USB键盘还比较少见,但是下来的发展,键盘将向USB接口靠拢。使用USB键盘基本上没有太多的要求,只需在主板的BIOS设定对USB键盘的支持,就可以在各系统中完全无障碍的使用,而且更可以真正做到在即插即用和热插拔使用,并能提供两个USB连接埠:让您可以轻易地直接将具有USB接头的装置接在您的键盘上,而非计算机的后面。

  同样你当然必须先插入相应的USB控制器模块:usb-uhci.o或usb-ohci.o

 modprobe usb-uhci

  然后您还必须插入键盘模块usbkbd.o,以及keybdev.o,这样usb键盘才能够正常工作。此时,运行的系统命令:

modprobe usbkbdmodprobe keybdev

  同样若你把HID input layer支持和input core 支持也作为模块方式安装,那么启动hid模块和input模块也是必要的。

  U盘和USB读卡器:

  数码存储设备现在对我们来说已经是相当普遍的了。CF卡、SD卡、Memory Stick等存储卡已经遍及我们的身边,通常,他们的读卡器都是USB接口的。另外,很多MP3、数码相机也都是USB接口和计算机进行数据传递。更我们的U盘、USB硬盘,作为移动存储设备,已经成为我们的必须装备。

  在Linux下这些设备通常都是以一种叫做usb-storage的方式进行驱动。要使用他们必须加载此模块

 modprobe usb-storage

  当然,usbcore.o 和usb-uhci.o或usb-ohci也肯定是不可缺少的。另外,若你系统中SCSI支持也是模块方式,那么下面的模块也要加载

 modprobe scsi_mod modprobe sd_mod

  在加载完这些模块后,我们插入U盘或存储卡,就会发现系统中多了一个SCSI硬盘,通过正确地mount它,就可以使用了(SCSI硬盘一般为/dev/sd?,可参照文章后面的常见问题解答)。

 mount /dev/sda1 /mnt

  Linux支持的其他USB设备。

  MODEM--(比较常见)
  网络设备
  摄像头--(比较常见)例如ov511.o
  联机线--可以让你的两台电脑用USB线实现网络功能。usbnet.o
  显示器--(我没见过)
  游戏杆
  电视盒--(比较常见)
  手写板--(比较常见)
  扫描仪--(比较常见)
  刻录机--(比较常见)
  打印机--(比较常见)

  注意:上面所说的每个驱动模块,并不是都要手动加载,有很多系统会在启动或你的应用需要时自动加载的,写明这些模块,是便于你在不能够使用USB设备时,可以自行检查。只要用lsmod确保以上模块已经被系统加载,你的设备就应该可以正常工作了。当然注意有些模块已经以内核方式在kernel启动时存在了(这些模块文件在/lib/modules/2.4.XX中是找不到的)。

  最常遇见的USB问题

 

  1. 有USB设备的系统安装完redhat 7.3启动死机问题

    有USB 设备,当你刚装完redhat 7.3第一次启动时,总会死掉。主要原因是Linux在安装时探测到有usb-uhci和ehci-hcd两个控制器,但在启动时,加载完usb- uhci再加载ehci-hcd就会有冲突。分析认为redhat7.3系统内核在支持USB2.0标准上存在问题。在其他版本的Linux中均不存在此问题。

    解决办法:在lilo或grub启动时用命令行传递参数init=/sbin/init。这样在启动后就不运行其他服务而直接启动shell。然后运行
    mount -o remount,rw / 使/ 可写,init直接启动的系统默认只mount /为只读
    然后vi /etc/modules.config文件
    删除alias usb-controller1 ehci-hcd一行。或前面加#注释掉
    然后mount -o remount,ro / 使/ 只读,避免直接关机破坏文件系统
    然后就可以按Ctrl-Alt-Delete直接重启了
    或许,你有更简单的办法:换USB键盘和鼠标为PS2接口,启动后修改/etc/modules.config文件。

  2. 我们已经知道U盘在Linux中会模拟为SCSI设备去访问,可怎么知道它对应那个SCSI设备呢?

    方法1:推测。通常你第一次插入一个SCSI设备,它就是sda,第二个就是sdb以此类推。你启动Linux插入一个U盘,就试试sda,换了一个就可能是sdb。这里注意两个特例:1)你用的是联想U盘,它可能存在两个设备区(一个用于加密或启动电脑),这样就可能一次用掉两个sda、sdb,换个U盘就是sdc、sdd。2)联想数码电脑中,可能已经有了六合一读卡器。它同样也是USB存储设备。它会占掉一个或两个SCSI设备号。

    方法2:看信息。其实,只要你提前把usb-storage.o、scsi_mod.o、sd_mod.o模块加载(直接在kernel中也可以)了,在你插入和拔出U盘时,系统会自动打出信息如下:

    SCSI device sda: 60928 512-byte hdwr sectors ( 31 MB )sda: Write Protect is on

    根据此信息,你就知道它在sda上了。当然,可能你的系统信息级别比较高,上述信息可能没有打出,这时候你只要tail /var/log/messages就可以看到了。

    方法3:同样,cat /proc/partitions也可以看到分区信息,其中sd?就是U盘所对应的了。若根本没有sd设备,就要检查你的SCSI模块和usb-storage模块是否正确加载了。

  3. 在使用U盘或存储卡时,我该mount /dev/sda还是/dev/sda1呢?

    这是一个历史遗留问题。存储卡最初尺寸很小,很多厂商在使用时,就直接使用存储,不含有分区表信息。而随着存储卡尺寸的不断扩大,它也就引入了类似硬盘分区的概念。例如/dev/hda你可以分成主分区hda1、hda2扩展分区hda3,然后把扩展分区hda3又分为逻辑分区hda5、hda6、hda7 等。这样,通常的U盘就被分成一个分区sda1,类似把硬盘整个分区分成一个主分区hda1。实际上,我们完全可以通过fdisk /dev/sda对存储卡进行完全类似硬盘的分区方式分成sda1、sda2甚至逻辑分区sda5、sda6。实际上,对USB硬盘目前你的确需要这样,因为它通常都是多少G的容量。而且通常,它里面就是笔记本硬盘。

    一个好玩的问题。你在Linux下用 fdisk /dev/sda 对U盘进行了多分区,这时候到windows下,你会发现怎么找,怎么格式化,U盘都只能找到第一个分区大小尺寸,而且使用看不出任何问题。这主要是 windows驱动对U盘都只支持一个分区的缘故。你是不是可以利用它来进行一些文件的隐藏和保护?你是不是可以和某些人没玩过Linux的人开些玩笑:你的U盘容量变小了J。

    现在较多的数码设备也和windows一样,是把所有U盘容量分为一个,所以在对待U盘的时候,通常你mount的是sda1。但对于某些特殊的数码设备格式化的U盘或存储卡(目前我发现的是一款联想的支持模拟USB软盘的U盘和我的一个数码相机),你就要mount /dev/sda。因为它根本就没分区表(若mount /dev/sda1通常的效果是死掉)。其实,这些信息,只要你注意了/proc/partitions文件,都应该注意到的。

  4. 每次插入U盘,都要寻找对应设备文件名,都要手动mount,我能不能做到象windows那样插入就可以使用呢。

    当然可以,不过你需要做一些工作。我这里只提供一些信息帮助你去尝试完成设置:Linux内核提供了一种叫hotplug支持的东西,它可以让你系统在 PCI设备、USB等设备插拔时做一些事情。而automount 功能可以使你的软驱、光盘等设备的分区自动挂载和自动卸载。你甚至可以在KDE桌面中创建相应的图标,方便你操作。具体设置方法就要你自己去尝试了。反正我使用Linux已经麻木了,不就是敲一行命令嘛。

  参考资料

  1. 《LINUX设备驱动程序》
    ALESSANDRO RUBINI著
    LISOLEG 译
  2. 《Linux系统分析与高级编程技术》
    周巍松 编著
  3. Linux Kernel-2.4.20源码和文档说明

 

共2页: 上一页 [1] 2 下一页

上一篇:又一款Linux开源中文输入软件Fireinput   下一篇:Linux下利用Squid构建高速的Proxy Server

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·VPM小型虚拟机软件 在多平台上体验Linux
·如何使Linux系统上的程序开机后自动运行
·Ubuntu编译时找不到Makefile的解决办法
·Windows分区在Linux下自动挂载及字符集设置
·Ubuntu Linux系统下自启动选项的设置方法
·Linux 2.6内核启动传递命令行的过程分析
·自动挂载Windows文件系统分区的常用方法
·使用Tftp从网络引导Debian进行系统安装
·Linux系统程序启动引导过程详细剖析
·Linux操作系统的硬盘分区建议
·Ubuntu Linux操作系统安装后的自定义设置
·删除Ubuntu Linux系统旧内核的方法
·OpenVPN在Linux系统下的安装配置和使用
·VMware在Linux上安装时内核头文件的问题
·Redhat Linux系统下安装IE浏览器的方法
·用U盘加载控制器驱动安装Linux系统
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Fedora11 beta i386安装图解
·红旗Linux 6.0 SP1桌面安装图解
·利用虚拟机在移动硬盘中安装Puppy Linu
·红旗Linux6.0 SP1桌面版安装 xfce 4.4.
·利用Ubuntu 8.10的usb-creator创建Live
·Ubuntu 8.10 更新源整理
·用kexec迅速切换内核
·Bazaar:分布式的版本控制系统
·Linux终端捕获
·openSUSE 11.0 NTFS分区硬盘安装过程
·GRUB2 引导程序的发展目标
·SUSE10.3恢复GRUB方法
  阅读排行
·Ubuntu 8.10 更新源整理
·从硬盘安装RHEL 5(Red Hat Enterprise
·Redhat5 Server下载、序列号以及相关介
·Linux对EXT3分区大小进行无损更改的步
· 在U盘上安装Damn Small Linux
·Fedora11 beta i386安装图解
·Ubuntu Linux 中 ADSL PPPoE 宽带上网
·主流显卡Linux驱动安装-Intel、ATi篇
·安装Ubuntu Linux分区的推荐方案和方法
·XP下硬盘安装Ubuntu8.04的2种方法
· U盘上运行的linux系统--babylinux
·Linux的GRUB引导程序配置方法大全
·新手学堂 详细讲解Ubuntu Server安装过
·Linux文件的复制、删除和移动命令
·让linux系统可以Mount NTFS分区
网摘收藏: