内核版本是linux -3.0
此文章只是一个移植流程的介绍,最重要的我们还是需要了解一下usb的协议:http://blog.sina.com.cn/s/blog_8bbf650701013mub.html
进入内核目录下的 mach-smdk2440.c这个文件 (路径/arch/arm/mach-s3c2440/mach-smdk2440.c)
添加头文件
#include <mach/regs-clock.h>
#include <linux/delay.h>
添加usb初始化函数
int usb_s3c2440_init(void) { unsigned long upllvalue= (0x38<<12)|(0x02<<4)|(0x02); while (upllvalue != __raw_readl(S3C2410_UPLLCON)) { __raw_writel(upllvalue, S3C2410_UPLLCON); mdelay(1); } return 0; }
然后将上面这个初始化函数加入smdk2440_map_io中进行初始化
static void __init smdk2440_map_io(void) { s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc)); s3c24xx_init_clocks(12000000); //s3c24xx_init_clocks(16934400); fl2440的时钟晶振频率是12000000 s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs)); usb_s3c2440_init(); }
OK以上就是对代码的修改
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 //这个如果不选进入开发板后看不到u盘里面的东西
//对于这个上面的具体选项可以参考这个博客: http://blog.chinaunix.net/uid-9727915-id-259858.html
[*] HID Devices --->
-*- Generic HID support
<*> USB Human Interface Device (full HID) support
//HID是Human Interface Devices的缩写.翻译成中文即为人机交互设备.这里的人机交互设备是一个宏观上面的概念,任何设备,只要符合HID spec,都可以称之为HID设备
因为u盘用到了scsi命令,所以我们需要增加scsi支持.
(usb storage驱动利用scsi中间层将usb storage设备虚拟成scsi逻辑设备。这样可以方便的使用scsi驱动的设备IO接口,以及plugin/plugout等机制)
SCSI device support --->
<*> SCSI device support
[*] legacy /proc/scsi/ support
<*> SCSI disk support
现在的U盘等移动存储器使用的大都是 FAT/FAT32 格式的,因此我们还需要添加FAT32 文件系统以及分区格式的支持:
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
上面都是应该选上的选项。
1.首先配置busybos,选择mdev
Linux System Utilities --->
[*] mdev
[*] Support /etc/mdev.conf
[*] Support command execution at device addition/removal
2.配置内核支持热拔插
vim .config
CONFIG_HOTPLUG=y //确保此项为y
CONFIG_NET=y //确保此项为y
(/proc/sys/kernel/目录下会出现hotplug文件)
3.在/etc/inittab这个文件中添加启动需要执行的动作
挂载所有的文件系统(在/etc/fstab中):fstab(/etc/fstab)是Linux下比较重要的配置文件,它包含了系统在启动时挂载文件系统和存储设备的详细信息。
::sysinit:/bin/mount -a
#<File system> <mount pt> <type> <options> <dump> <pass>
#devpts /dev/pts devpts defaults 0 0
#/dev/root / ext2 rw,noauto 0 1
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
命令内核在增删设备时执行/sbin/mdev,使设备节点会被创建和删除
::sysinit:/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug //设置系统的hotplug 程序为mdev
设置mdev,让它在系统启动时创建所有的设备节点
::sysinit:/sbin/mdev -s
4.接下来编写mdev配置文件
该文件的作用是:mdev在找到匹配设备时自动执行自定义命令
格式为:
<device regex> <uid>:<gid> <octal permissions> [<@$*><cmd>]
@ 创建节点后执行的
$ 删除节点前执行的
* 创建后和删除前都运行的
vim /etc/mdev.conf
sd[a-z][0-9] 0:0 0777 @(mount /dev/$MDEV /mnt/usb) //当检测到sda1类似的设备时将mdev检测到的设备挂载到mnt/usb上
sd[a-z] 0:0 0777 $(umount /mnt/usb)
ub[a-z][0-9] 0:0 0777 @(mount /dev/$MDEV /mnt/usb)//如果你u盘插上去能检测到设备但是不能看到里面的内容,就加这2句话,是因为你没挂载成功。
ub[a-z] 0:0 0777 $(umount /mnt/usb)
这里再说一点的就是u盘在你的内核中的设备名可能是sd[a-z] 也有可能是ub[a-z],所以最好都加上吧,但是如果你的根文件系统是ubifs的那么你最好改成ub[a-h],就是不能有i在里面,因为ubifs的根文件系统,已经挂了根分区,你如果用ub[a-z]它就会把ubifs的根文件系统挂载mnt/usb里面,就会出现很大的问题!
mmcblk[0-9]p[0-9] 0:0 0777 @(mount /dev/$MDEV /mnt/sdc)
mmcblk[0-9] 0:0 0777 $(umount /mnt/sdc)
OK大功告成了
参考博客:http://blog.163.com/lby147612@126/blog/static/17041045220112255734836/
http://blog.csdn.net/dragon101788/article/details/8757263
点击打开链接
如果出现了这个问题: