资源描述
想查看usb设备的信息,输入:
cat /proc/bus/usb/devices
但我的ubuntu系统显示:没有这个文件或目录。
在网上搜了很久,发现没人进行该问题的讨论,郁闷了很久。无意间看到了解决方法,哈哈,大喜......
解决办法:
$ sudo mount -t usbfs usbfs /proc/bus/usb/
保证usbfs是挂载在/proc/bus/usb上的
此外,还可以用lsusb命令查看,如果你喜欢看大量的输出信息,运行lsusb -v就可以满足你的这一欲望。lsusb另一个有用的选项是给出当前USB物理层次的树状信息,这可以更容易让你准确理解设备体系结构,这个命令就是lsusb -t
linux-2.6.28 内核配置,支持网络,SCSI硬盘,USB配置
发布时间:2010-10-05 12:19 来源: 浏览: 47
2010-04-16 12:21
转载地址:
内核支持U盘 -- zImage for sbc-2410x
# cd linux-2.6.19
# vi arch/arm/mach-s3c2410/mach-smdk2410.c
--------------------------------------------------
(1) 添加头文件
//zxl for usb start
#include <asm/arch/usb-control.h>
#include <asm/arch/regs-clock.h>
#include <linux/device.h>
#include <linux/delay.h>
//zxl for usb end
(2) 以下内容加在static void __init smdk2410_map_io(void)前面
/***************** zxl add start *****************/
static struct s3c2410_hcd_info usb_sbc2410_info = {
.port[0] = {
.flags = S3C_HCDFLG_USED
}
};
int usb_sbc2410_init(void)
{
unsigned long upllvalue = (0x78<<12)|(0x02<<4)|(0x03);
printk("USB Control, (c) 2006 sbc2410n");
s3c_device_usb.dev.platform_data = &usb_sbc2410_info;
while(upllvalue!=__raw_readl(S3C2410_UPLLCON)) {
__raw_writel(upllvalue,S3C2410_UPLLCON);
mdelay(1);
}
return 0;
}
/***************** zxl add end *****************/
(3) 在MACHINE_START与MACHINE_END 之间加上.init_machine= &usb_sbc2410_init,结果变成了
MACHINE_START(SMDK2410, "SMDK2410") /* @TODO: request a new identifier and switch
* to SMDK2410 */
/* Maintainer: Jonas Dietsche */
.phys_ram = S3C2410_SDRAM_PA,
.phys_io = S3C2410_PA_UART,
.io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
.boot_params = S3C2410_SDRAM_PA + 0x100,
.map_io = smdk2410_map_io,
.init_irq = smdk2410_init_irq,
.timer = &s3c24xx_timer,
//zxl add
.init_machine= &usb_sbc2410_init,
MACHINE_END
(4) 在smdk2410_map_io()函数里面添加usb_sbc2410_init()函数调用:
static void __init smdk2410_map_io(void)
{
s3c24xx_init_io(smdk2410_iodesc, ARRAY_SIZE(smdk2410_iodesc));
s3c24xx_init_clocks(0);
s3c24xx_init_uarts(smdk2410_uartcfgs, ARRAY_SIZE(smdk2410_uartcfgs));
s3c24xx_set_board(&smdk2410_board);
//zxl add
usb_sbc2410_init();
}
内核配置(For USB)
--------------------------------------------------
让内核支持热插拔
General setup --->
[*] Configure standard kernel features (for small systems) --->
[*] Support for hot-pluggable devices (NEW)
Device Drivers --->
Generic Driver Options --->
<*> Userspace firmware loading support //(1)
Block devices --->
<*> Low Performance USB Block driver
SCSI device support --->
<*> SCSI device support
<*> SCSI disk support
<*> SCSI generic support
USB support --->
<*> Support for Host-side USB
[*] USB device filesystem
<*> OHCI HCD support
--- NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--- may also be needed; see USB_STORAGE Help for more information
<*> USB Mass Storage support
[*] USB Monitor
File systems --->
DOS/FAT/NT Filesystems --->
<*> MSDOS fs support
<*> VFAT (Windows-95) fs support
(936) Default codepage for FAT
(cp936) Default iocharset for FAT
< > NTFS file system support
Partition Types --->
[*] PC BIOS (MSDOS partition tables) support
Native Language Support --->
<*> Simplified Chinese charset (CP936, GB2312)
<*> NLS UTF8
# make zImage
注: 系统正真支持U盘,busybox中还需要有udev应用程序(用户工具)
将zImage下载到开发板上,然后挂载U盘
# mount /dev/sda1 /mnt
=========================================================================
转载地址:
配置USB for mini2440 & Linux2.6.30.4
U盘与鼠标的配置:
配置:
# make menuconfig
选上以下:
Device Drivers --->
SCSI device support --->
<*> SCSI device support
[*] legacy /proc/scsi/ support
<*> SCSI disk support
[*] HID Devices --->
<*> USB Human Interface Device (full HID) support
[*] /dev/hiddev raw HID device support
[*] USB support --->
<*> Support for Host-side USB
[*] USB device filesystem
[*] USB device class-devices (DEPRECATED)
<*> OHCI HCD support
<*> USB Mass Storage support
编译:
# make zImage
U盘和USB鼠标均可以使用!
摄象头的配置:
配置:
# make menuconfig
选上以下:
Device Drivers --->
Multimedia devices --->
<*> Video For Linux
[*] Enable Video For Linux API 1 (DEPRECATED)
[*] Video capture adapters --->
[*] Autoselect pertinent encoders/decoders and other helper chip
[*] V4L USB devices --->
<*> USB Video Class (UVC)
[*] UVC input events device support
<*> GSPCA based webcams --->
如果不确定你的USB摄像头使用何种芯片,全部选上即可!
编译:
# make zImage
友善之臂公司提供的基于Qt的USB摄像头测试程序可以使用!
usb设备/proc/bus/usb
USB设备检测的一般过程
作者 pxe2
USB设备检测也是通过/proc目录下的USB文件系统进行的。为了使一个USB设备能够正常工作,必须要现在系统中插入USB桥接器模块。在检测开始时,一般要先检测是否存在/proc/bus/usb目录,若不存在则尝试插入USB桥接模块。
现在一般的USB桥接器模块有两种类型,UHCI和OHCI。在决定插入那一个桥接器模块时,可以察看/proc/pci文件来决定。打开此文件,您若发现USB节为 I/O at 0xHHHH格式(例如出现 I/O at 0xe000 [0xe01f]),HHHH为16进制数,则桥接器类型为UHCI。若是它为32 bit memory at 0xHH000000形式(例如出现32 bit memory at 0xee000000),HH为16进制数,则桥接器类型为OHCI。但是若您的桥接器类型不满足上述任何一种情况,唯一的解决办法就是您尝试插入这两种模块,直到成功为止。一般而言,UHCI类型的桥接器它的插入模块是uhci或usb-uhci(由内核版本决定);而对于OHCI类型的桥接器它的插入模块是ohci或usb-ohci。
您在正确的插入了桥接器模块之后,这时/proc文件系统下就会出现USB设备目录,不过这时这个目录是空的,没有任何文件。这时您就必须挂接usbdevfs文件系统,然后通过此文件系统检测连接的设备。在成功挂接usb文件系统之后,就会生成文件/proc/bus/usb/devices,/proc/bus/usb/drivers和目录/proc/bus/usb/busNo。挂接usbdevfs文件您可以通过如下操作实现:
mount -t usbdevfs none /proc/bus/usb
或在/etc/fstab上加入
none /proc/bus/usb usbdevfs defaults 0 0
然后通过/proc/bus/usb/devices文件的内容,您就可以获得连接的设备信息,包括设备标识和制造商标是等信息。
usb设备类型描述:
设备规范 设备类码 接口类码
应用程序特定 - 0xFE
声音接口 0x00 0x01
通信设备 0x02 -
CDC控制接口 - 0x02
CDC数据接口 - 0x0A
HID 0x00 0x03
HUB 0x09 0x09
批量存储设备 0x00 0x08
监视器 same as HID same as HID
电源设备 same as HID same as HID
物理设备 - 0x05
打印机 - 0x07
供应商特定 - 0xFF
5.2 usb文件系统简介
T = 总线拓扑结构(Lev, Prnt, Port, Cnt, 等),是指USB设备和主机之间的连接方式
B = 带宽 (仅用于USB主控制器)
D = 设备描述信息
P = 产品标识信息
S = 串描述符
C = 配置描述信息 (* 表示活动配置)
I = 接口描述信息
E = 终端点描述信息
一般格式:
d = 十进制数
x = 十六进制数
s = 字符串
拓扑信息
T: Bus=dd Lev=dd Prnt=dd Port=dd Cnt=dd Dev#=ddd Spd=ddd MxCh=dd
| | | | | | | | |__最大子设备
| | | | | | | |__设备速度(Mbps)
| | | | | | |__设备编号
| | | | | |__这层的设备数
| | | | |__此设备的父连接器/端口
| | | |__父设备号
| | |__此总线在拓扑结构中的层次
| |__总线编号
|__拓扑信息标志
带宽信息
B: Alloc=ddd/ddd us (xx%), #Int=ddd, #Iso=ddd
| | | |__同步请求编号
| | |__中断请求号
| |__分配给此总线的总带宽
|__带宽信息标志
设备描述信息和产品标识信息
D: Ver=x.xx Cls=xx(s) Sub=xx Prot=xx MxPS=dd #Cfgs=dd
P: Vendor=xxxx ProdID=xxxx Rev=xx.xx
D: Ver=x.xx Cls=xx(sssss) Sub=xx Prot=xx MxPS=dd #Cfgs=dd
| | | | | | |__配置编号
| | | | | |______缺省终端点的最大包尺寸
| | | | |
| | | | |__设备协议
| | | |__设备子类型
| | |__设备类型
| |__设备USB版本
|__设备信息标志编号#1
P: Vendor=xxxx ProdID=xxxx Rev=xx.xx
| | | |__产品修订号
| | |__产品标识编码
| |__制造商标识编码
|__设备信息标志编号#2
串描述信息
S: Manufacturer=ssss
| |__设备上读出的制造商信息
|__串描述信息
S: Product=ssss
| |__设备上读出的产品描述信息,对于USB主控制器此字段为"USB *HCI Root Hub"
|__串描述信息
S: SerialNumber=ssss
| |__设备上读出的序列号,对于USB主控制器它是一个生成的字符串,表示设备标识
|__串描述信息
配置描述信息
C: #Ifs=dd Cfg#=dd Atr=xx MPwr=dddmA
| | | | |__最大电流(mA)
| | | |__属性
| | |__配置编号
| |__接口数
|__配置信息标志
接口描述信息(可为多个)
I: If#=dd Alt=dd #EPs=dd Cls=xx(sssss) Sub=xx Prot=xx Driver=ssss
| | | | | | | |__驱动名
| | | | | | |__接口协议
| | | | | |__接口子类
| | | | |__接口类
| | | |__中断点数
| | |__可变设置编号
| |__接口编号
|__接口信息标志
终端点描述信息
E: Ad=xx(s) Atr=xx(ssss) MxPS=dddd Ivl=dddms
E: Ad=xx(s) Atr=xx(ssss) MxPS=dddd Ivl=dddms
| | | | |__间隔
| | | |__终端点最大包尺寸
| | |__属性(终端点类型)
| |__终端点地址(I=In,O=Out)
|__终端点信息标志 '
mount -t usbfs none /proc/bus/usb 或者
mount -t usbdevfs none /proc/bus/usb
这需要看你的系统支持哪些文件系统。
# cat /proc/filesystem
nodev sysfs
nodev rootfs
nodev bdev
nodev proc
nodev tmpfs
nodev binfmt_misc
nodev sockfs
nodev usbfs
nodev pipefs
nodev anon_inodefs
nodev rpc_pipefs
nodev configfs
nodev devpts
ext3
ext2
ext4
cramfs
nodev ramfs
nodev hugetlbfs
vfat
msdos
nodev nfs
nodev nfs4
nodev nfsd
nodev cifs
ntfs
nodev autofs
nodev fuse
fuseblk
nodev fusectl
一、代码修改
主要是按照这个贴来做:
我也看过其它不同版本的内核关于usb驱动的移植,移植方法几乎一样,只是修改的文件不同而已。上面的贴子有不少头文件没有例出来,以下是我按照以上贴子添加的代码(好像在很多论坛上包括头文件部分都显示不出来,在这里把include前面的#给删了,希望有帮助):
/*add by lfc*/
include
include
include
include
/*end add*/
/**********************add by lfc*************************************/
static struct s3c2410_hcd_info usb_sbc2410_info = {
.port[0] = {
.flags = S3C_HCDFLG_USED
}
};
int usb_sbc2410_init(void)
{
unsigned long upllvalue = (0x78上面的修改其实也参考了这个牛贴一下,里面有大虾们对USB驱动移植的讨论,还不错:
其实到了这里,要修改的代码已经修改完了,比添加Nand flash的支持修改的地方还要少^_^,不过我一直以为还没修改好,最后发现原来是没配置好~_~
二、内核配置
下面说一下郁闷了我好一阵子的内核配置(支持USB)问题,这个就比Nand flash的配置要复杂多了。
1、让内核支持热插拔
│ General setup --->
│ │
· Support for hot-pluggable devices
2、USB驱动设置,可能有些不选也行,不过没时间去试,至于为什么要选这些选项的话可以看一下这个贴(Linux下的硬件驱动——USB设备):
│ │ Device Drivers --->
│ │ Generic Driver Options --->
│ Hotplug firmware loading support
│ │ Block devices --->
│ │ Low Performance USB Block driver
│ │ SCSI device support --->
│ │ SCSI generic support
│ │
· Probe all LUNs on each SCSI device
│ │ USB support --->
│ │ Support for Host-side USB
│ │
· USB device filesystem
│ │ OHCI HCD support
│ │ USB Mass Storage support
│ │
· USB Monitor
3、加入了MSDOS fs和VFAT fs的支持。
│ │ File systems --->
│ │ DOS/FAT/NT Filesystems --->
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ MSDOS fs support │ │
│ │ VFAT (Windows-95) fs support │ │
│ │ (936) Default codepage for FAT │ │
│ │ (cp936) Default iocharset for FAT │ │
│ │ NTFS file system support
做完这些后,插入u盘后,内核应该可以识别到u盘,出现:
usb 1-1: new full speed USB device using s3c2410-ohci and address 3
ub(1.3): GetMaxLUN returned 0, using 1 LUNs
但是,还有下面一句出错提示:
/dev/ub/a: unknown partition table
再次查看了贴子上大虾们的讨论,提到:“使能CONFIG_MSDOS_PARTITION选项”,再仔细查找,发现配置选项如下:
│ │ File systems --->
│ │ Partition Types --->
│ │
· PC BIOS (MSDOS partition tables) support
加上这个后应该就可以挂载usb上的MSDOS分区了
以下是我的内核插入u盘后的提示信息:
usb 1-1: new full speed USB device using s3c2410-ohci and 2
ub(1.2): GetMaxLUN returned 0, using 1 LUNs
/dev/ub/a: p1
表示usb设备已经挂载到/dev/ub/a/part1设备文件下
4.加入中文字体库(可惜在我的板上还是没能正常显示中文~_~,知道的朋友麻烦告诉我一声,大家一起探讨)
│ │ Native Language Support --->
│ │ Simplified Chinese charset (CP936, GB2312)
│ │ NLS UTF8
以下是挂载usb设备后的显示:
[root@luofuchong /]# mount -t vfat -o iocharset=cp936 /dev/ub/a/part1 /mnt
[root@luofuchong /]# ls /mnt
cramfs-1.1.tar.gz netkit-base-0.17.tar.gz thttpd-2.25b.tar.gz
lfc settings.dat . . I. .. . .txt
三、一点心得。
如果想知道内核有没有识别出u盘的话可以执行命令:cat /proc/partitions ,看看插入USB前后分区信息有什么不同就知道了。
另外,我在贴上看到其它大虾移植了USB驱动的内核,在插入U盘后内核都把它当成SCSI设备来处理的,不过在我这里却没有,这点我倒不是很明白,难道是我u盘的问题?
还有就是,usb设备的挂载点比较特别,在我移植的系统中是:/dev/ub/a/part1。刚开始我不知道,以为/dev/ub/a就是了,结果当然挂载不了,差点就重编内核了,所以如果内核提示挂载usb设备成功的话,最好进入对应的目录仔细看清楚。如果是当成SCSI设备的话挂载点就在 /dev/scsi/host0/bus0/target0/lun0之类吧。其实插入u盘的时候都有提示,自己看着办吧。
还有一个问题,为了统一起见,一般都会新建一个/dev/sda1的链接指向usb设备的挂载点的,但是我的内核是采用devfs的,文件系统的/dev目录空空如也,而且/dev/ub/a/part1是插入u盘后才有的挂载点,那请问我应该怎样去新建这个链接呢?希望各位大虾知道的话可以告知我,感激不尽!
asm/arch/regs-clock.h asm/arch/usb-control.h linux/device.h linux/delay.h
搞定了这个问题,没有加入对应文件系统的language编码支持。
配置如下:
File systems -->
DOS/FAT/NT Filesystems --->
· MSDOS fs support
· VFAT (Windows-95) fs support
(437) Default codepage for FAT
(iso8859-1) Default iocharset for FAT
Native Language Support -->
(iso8859-1) Default NLS Option
· Codepage 437 (United States, Canada)
· NLS ISO 8859-1 (Latin 1; Western European Languages)
两路USB问题的解决
展开阅读全文