usb接口简单、即插即用、支持热插拔等优点,在各种场合已经大量使用,在嵌入式系统中,也常常需要通过usb外接u盘、键盘、鼠标等设备。 Linux内核已经支持usb主机控制协议ohci,可以支持u盘、键盘、鼠标等usb设备。
1、OHCI设备
ohci设备包含了名字、独有的资源等等一些驱动程序的硬件或自定义信息。 通过platform_add_devices(platform_device_register)函数将定义的平台设备注册到内核中,用于匹配设备驱动。
内核在drivers\usb\host\ohci-s3c2410.c中实现了s3c2416 ohci驱动, ohci设备的平台代码如下。
#ifdef CONFIG_S3C_DEV_USB_HOST
static struct resources3c_usb_resource[] = {
[0]= DEFINE_RES_MEM(S3C_PA_USBHOST, SZ_256),
[1]= DEFINE_RES_IRQ(IRQ_USBH),
};
struct platform_device s3c_device_ohci ={
.name = "s3c2410-ohci",
.id = -1,
.num_resources = ARRAY_SIZE(s3c_usb_resource),
.resource = s3c_usb_resource,
.dev = {
.dma_mask = &samsung_device_dma_mask,
.coherent_dma_mask = DMA_BIT_MASK(32),
}
};
#endif /* CONFIG_S3C_DEV_USB_HOST */
在static struct platform_device *home2416_devices[]板级平台设备列表中加入&s3c_device_ohci,使ohci设备能够注册到内核中。
2、内核配置
Linux配置支持ohci设备驱动,选中Device Drivers->USB support->OHCI support for Samsung S3C24xx/S3C64xx Soc series,并且选中USB Mass Storage support,用于支持u盘:
u盘使用fat32文件系统,配置内核支持vfat文件系统。 File systems->DOS/FAT/NT Filesystems->VFAT (Windows-95) fssupport:
3、u盘测试
cat /proc/partitions 可以知道u盘的主设备号为8,次设备号为0,在/dev目录中创建sda设备文件。
mknod /dev/sda b 8 0
先对sd卡格式化成vfat文件系统。
mkfs.vfat /dev/sda
挂载sda设备。
mkdir /mnt/udisk
mount /dev/sda /mnt/udisk
对u盘读写文件。
echo This is file test. > /mnt/udisk/test.txt
cat /mnt/udisk/test.txt