关于USB的基础知识可以参考这篇博文:http://blog.csdn.net/u012507643/article/details/52932578
USB的协议还是比较复杂的,有空希望能了解一下,在这仅记录学习移植过程。
一、修改代码
vim arch/arm/mach-s3c2440/mach-smdk2440.c
添加头文件:
添加USB init函数:
在smdk2440_map_io
中添加:
二、内核添加支持
make menuconfig 选择如下选项:
Device Drivers --->
[*] USB support --->
{*} Support for Host-side USB
[*] USB device filesystem (DEPRECATED)
[*] USB device class-devices (DEPRECATED)
<*> OHCI HCD support
<*> USB Mass Storage support
[*] HID Devices --->
-*- Generic HID support
<*> USB Human Interface Device (full HID) support
SCSI device support --->
<*> SCSI device support
[*] legacy /proc/scsi/ support
<*> SCSI disk support
usb storage驱动利用scsi中间层将usb storage设备虚拟成scsi逻辑设备。这样可以方便的使用scsi驱动的设备IO接口,以及plugin/plugout等机制
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
<*> NTFS file system support
[*] NTFS write support
Partition Types --->
[*] PC BIOS (MSDOS partition tables) support
[*] Windows Logical Disk Manager (Dynamic Disk) support
-*- Native language support --->
<*> Codepage 437 (United States, Canada)
<*> Simplified Chinese charset (CP936, GB2312)
<*> ASCII (United States)
<*> NLS ISO 8859-1 (Latin 1; Western European Languages)
<*> NLS UTF-8
三、U盘使用mdev自动挂载
mdev是busybox自带的一个简化版的udev.
作用是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需的节点文件,在文件系统中的/dev目录下的设备节点都是由mdev创建的。mdev扫描/sys/class和/sys/block中所有的类设备目录,如果在目录中含有名为”dev”的文件,且文件中包含的是设备号,则mdev就利用这些信息为这个设备在/dev下创建设备节点。
1.在busybox目录下:
[tangbin@localhost busybox-1.20.2]$ make menuconfig
Linux System Utilities --->
[*] mdev
[*] Support /etc/mdev.conf
[*] Support command execution at device addition/removal
2.在busybox目录下:
vim .config
CONFIG_HOTPLUG=y
CONFIG_NET=y
[tangbin@localhost linux-3.0]$ ls /proc/sys/kernel/hotplug
/proc/sys/kernel/hotplug
3.在开发板上修改inittable
vi /etc/inittable
4.在开发板上修改mdev.conf
vi /etc/mdev.conf
它是有命令的格式的:
<device regex> <uid>:<gid> <octal permissions> [<@$*><cmd>]
@ 创建节点后执行的
$ 删除节点前执行的
* 创建后和删除前都运行的
如果你的根文件系统是ubifs的那么你最好改成ub[a-h],就是不能有i在里面,因为ubifs的根文件系统,已经挂了根分区,你如果用ub[a-z]它就会把ubifs的根文件系统挂载mnt/usb里面,会出现无法预知的问题。