实验十 USB驱动配置实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验十 USB驱动配置实验
【实验目的】
1、了解USB接口的工作原理
2、掌握USB存储器驱动的配置方法
3、掌握USB存储器的使用方法
【实验原理】
1、USB接口简介
USB的全称是Universal Serial Bus。
最多可连接127台外设,由于USB支持热插拔,即插即用,支持的电子设备多(一般的PC都配置了USB接口)等优点。
当前,在市场上流行的USB接口主要符合:USB1.1,USB2.0和USB OTG三种规范。
目前主流的掌上电脑一般都配置了USB接口,用户可用厂商提供的USB数据线与其它同样具备USB接口的电子设备连接起来使用。
USB1.1规范支持低速(1.5Mb/s)和全速(12Mb/s)两种不同速率的数据传输和4种不同类型的数据传输方式:控制传输、中断传输、批量传输和同步传输。
按照物理接口,USB接口可以分为主机(USB host)端、USB集线器(USB hub)和USB设备(USB device)端三种类型。
USB集线器其实是一类特殊的USB设备,在一个完整的USB拓扑结构上,必须有且仅有一个USB主机,一个或多个USB集线器和USB设备。
为了满足语音和图像传输对宽带的要求,USB2.0在兼容USB1.1低速和全速数据传输基础上,支持高速(480Mb/s)数据传输。
对于USB2.0规范,同样支持控制传输、中断传输、批量传输和同步传输4种类型的数据传输方式。
在物理结构和拓扑结构上,USB2.0和USB1.1也完全相同。
USB OTG规范是作为对USB2.0规范的补充而出现的,其目的是为了满足便携式设备(如数码相机)对USB接口性能的需求。
根据USB OTG规范,一个USB接口可同时具有USB主机和USB设备两种功能,根据与其连接的其他设备属性,USB OTG接口会自动转换成为适合USB总线需求的接口类型。
比如,当一个具有USB OTG接口的PDA直接与打印机相连时,其充当的角色就是USB主机,而当其与PC机相连时,其充当的角色就是USB 设备。
USB使用一个4针插头作为标准插头。
通过这个标准插头,采用菊花链形式可以把所有的外设连接起来,并且不会损失带宽。
USB规范中将USB分为五个部分:控制器、控制器驱动程序、USB芯片驱动程序、USB设备以及针对不同USB设备的客户驱动程序。
USB 需要主机硬件、操作系统和外设三个方面的支持才能工作。
2、Linux内核对USB规范的支持
由于USB接口有主机端和设备端的区别,因而USB驱动程序也有USB主机端驱动程序和USB设备端驱动程序之分。
目前,不同的Linux版本对USB的支持程度不同,比如,Linux2.4.18以下的版本一般只支持USB1.1规范,而Linux2.5.xx版本就支持USB2.0规范。
在主机控制器方面,支持USB1.1规范的一般都支持通用型主机控制器接口UHCI(Universal Host Control Interface)和开放式主机控制器接口OHCI(Open Host Control Interface)两种规范,而对于支持USB2.0规范的Linux内核,则在支持UHCI规范和OHCI规范的基础上,同时支持了增强型主机控制器接口EHCI(Enhanced Host Control Interface)。
UHCI规范和EHCI规范都是由Intel公式提出,符号该规范的硬件平台主要以PC机为
主。
OHCI规范是由康柏、微软、松下等公司联合提出的开放式主机控制器接口标准,该规范已经被大量应用到嵌入式系统中。
由于USB接口是一个主—从方式、多设备连接的树状网络结构,所以USB主机必须具有对所有连接在总线上的不同类型USB设备进行管理的功能。
Linux USB主机驱动程序可以同时支持多路USB总线功能,每路USB总线独立工作。
如图10-1所示,Linux USB主机驱动由三部分组成:USB主机控制器驱动(HCD)、USB驱动(USBD)和不同的USB 设备类驱动。
图
10-1 Linux USB 驱动程序结构
USB主机控制器驱动(HCD)是USB主机驱动程序中直接与硬件交互的软件模块,其主要功能有:主机控制器硬件初始化;为USBD层提供相应的接口函数;提供根HUB(root hub)设备配置、控制功能;完成4种类型的数据传输等。
Linux2.5.xx版本支持USB1.1和USB2.0规范,其USB HCD部分支持UHCI、OHCI和ECHI三种规范。
USBD部分是整个USB主机驱动的核心,其主要实现的功能有:USB总线管理;USB 总线设备、USB总线带宽管理;USB的4种类型的数据传输;USB HUB驱动;为USB设备类驱动提供相关接口;提供应用程序访问USB系统的文件接口等。
USB设备类驱动是最终与应用程序交互的软件模块,其主要实现的功能有:访问特定的USB设备;为应用程序提供访问接口等。
2、配置USB设备
要启用Linux USB 支持,首先进入"USB support"节并启用"Support for USB"选项(对应模块为usbcore.o)。
如图10-2所示
图10-2 USB support 配置界面
接下来需要配置用于系统的正确USB主控制器驱动程序(USB Host Controller Drivers),如图10-3所示。
用于USB主控制器驱动模块主要有:增强型主机控制器接口EHCI驱动模块(对应模块为ehci-hcd.o)、通用型主机控制器接口UHCI驱动模块(对应模块为usb-uhci.o)、开放式主机控制器接口OHCI 驱动模块(对应模块为usb-ohci.o)。
图10-3 USB配置界面
要理解"EHCI"及其同类是什么,首先要知道每块支持插入USB 设备的主板或PCI 卡都需要有USB 主控制器芯片组。
这个特别的芯片组与插入系统的USB 设备进行相互操作,并负责处理允许USB 设备与系统其它部分通信所必需的所有低层次细节。
Linux USB 驱动程序有三种不同的USB 主控制器选项是因为在主板和PCI 卡上有三种不同类型的USB 芯片。
增强型主机控制器接口EHCI驱动程序设计成为实现新的高速USB 2.0 协议的芯片提供支持,开放式主机控制器接口OHCI驱动程序用来为非PC 系统上的(以及带有SiS 和ALi 芯片组的PC 主板上的)USB 芯片提供支持。
通用型主机控制器接口UHCI 驱动程序用来为大多数其它PC 主板(包括Intel 和Via)上的USB 实现提供支持。
在USB主机控制器的配置中,只需选择与希望启用的USB 支持的类型所对应的USB主机控制器驱动程序即可。
为保险起见,可以启用"EHCI"、"UHCI" (两者中任选一种,它们之间没有明显的区别)和"OHCI"。
启用了"USB support"和适当的USB 主控制器驱动程序后,然后启用"Preliminary USB device filesystem",和启用所有特定的且将与Linux 一起使用的实际USB 外围设备的驱动程序。
例如,为了启用对USB 游戏控制器和USB存储器设备的支持,应启用"USB Human Interface Device (full HID) support"。
和"USB Mass Storage support",然后启用主"Input core support" 节下的"Input core support"和"Joystick support"。
一旦使用新的已启用USB 的内核重新引导后,若/proc/bus/usb下没有相应USB设备信息,应输入以下命令将USB 设备文件系统手动挂装到/proc/bus/usb:
[root@localhost xbase]$mount – t usbdevfs none /proc/bus/usb
为了在系统引导时自动挂装USB 设备文件系统,请将none /proc/bus/usb usbdevfs defaults 0 0添加到/etc/fstab 中的/proc 挂装行之后。
3、模块的配置方法
在很多情况下,USB设备驱动并不包含在内核中,这时只要根据所需要使用的模块,逐一加载到内核中就可以使驱动起作用。
首先要确保在内核编译时以模块方式选择了相应支持。
这样就应该可以在/lib/modules/2.4.XX目录看到相应.o文件。
在加载模块时,只需要运行modprobe xxx.o就可以了。
(modprobe主要加载系统已经通过depmod登记过的模块,insmod一般是针对具体.o 文件进行加载)。
存储器相关模块
支持多口的读卡器只能显示一个。
若以模块方式进行加载,就要带参数安装或提前在/etc/modules.conf中添加add options scsi_mod max_scsi_luns=9来支持多个LUN。
4、Linux 下U盘的使用
如果需要在装有Linux操作系统的目标平台中USB存储器,必须在利用make
在目标平台中使用U盘,应按照分区、格式化、装载和使用四个大步骤进行操作。
(1)分区
现结合具体过程讲解几个常用的命令:
●先用p 来查看当前的分区情况
●再用d 删除分区,若有多个分区则按提示输入某个编号,继续本条指令,直到出现No
partition is defined yet!
●接着用n 来新建一个分区
输入n后出现"e p"两个分区选择项,我们这里选择p,并在partition number项输入1,建立第1号分区,以后连续几个回车后即可。
此时默认的是ext2文件系统类型,若要更改文件系统类型可以输入t来更改,具体的文件系统类型可以用l来查看文件系统类型列表,输入t后接着输入文件系统编号即可,如win95 FAT32对应的编号为b。
●最后输入w保存刚才分区设置.
(2)格式化分区
格式化为ext2分区
[root@51Board~]$./sbin/mkfs.ext2 /dev/sda1
若格式化为fat分区,但需在/sbin/下存在mkfs.vfat文件.
[root@51Board~]$./sbin/mkfs.vfat /dev/sda1
(3)安装mount
[root@51Board~]$mkdir /mnt/usb
[root@51Board~]$mount /dev/sda1 /mnt/usb
(4)使用
[root@51Board~]$cd /mnt/usb
[root@51Board~]$mkdir tmp
[root@51Board~]$ls
tmp
【实验仪器】
1、装有Linux操作系统的PC机一台;
2、XSBase270或XSBase255 ARM实验开发平台一套
3、空白U盘一个
【实验内容】
1、利用make menuconfig编译Linux内核,启用Linux内核对USB主机控制器的支持,写
出编译过程以及需要选择的支持项;
2、利用手动和自动将USB各驱动模块添加到Linux内核中,写出添加过程;
3、在目标板上使用USB存储器,写出使用分区和格式化USB存储器的过程及方法;【思考题】
1、在使用U盘时,对内核配置的各项分别起什么作用?
2、字符设备与块设备的使用的区别。
3、思考其他USB设备的挂接方法,如打印机。