USB设备驱动移植之开发板做U盘

TQ2440开发板有两个USB端口,需要把第二个USB(就是烧写的那个 USB 口)设置为USB device

1、修改源码

首先把开发板当成从设备 来 用,也 就 是 该 USB 口 使 用 USB Device 功 能 , 修 改 内 核 源 码 的“arch/arm/mach-s3c2440/mach-smdk2440.c”文件:
在 2.6.30.4 中的 52 行添加如下内容:
#include <plat/udc.h>
在 151 行添加如下内容:
.lpcsel = ((0xCE6) & ~7) | 1<<4,
};
static void EmbedSky_udc_pullup(enum s3c2410_udc_cmd_e cmd)
{
printk(KERN_DEBUG “EmbedSky udc: pullup(%d)\n”,cmd);
switch (cmd)
{
case S3C2410_UDC_P_ENABLE :
s3c2410_gpio_setpin(S3C2410_GPG12, 1);
break;
case S3C2410_UDC_P_DISABLE :
s3c2410_gpio_setpin(S3C2410_GPG12, 0);
break;
case S3C2410_UDC_P_RESET :
break;
default:
break;
}
}

static struct s3c2410_udc_mach_info EmbedSky_udc_cfg = {
.udc_command = EmbedSky_udc_pullup,
};

static struct platform_device *smdk2440_devices[] __initdata = {
&s3c_device_usb,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c,
&s3c_device_iis,
};

在 180 行添加如下内容:
static struct platform_device *smdk2440_devices[] __initdata = {
&s3c_device_usb,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c,
&s3c_device_iis,
&s3c_device_usbgadget,
};
在 196 行添加如下内容:
static void __init smdk2440_machine_init(void)
{
s3c24xx_fb_set_platdata(&smdk2440_fb_info);
platform_add_devices(smdk2440_devices, ARRAY_SIZE(smdk2440_devices));
smdk_machine_init();
s3c2410_gpio_setpin(S3C2410_GPG12, 0);
s3c2410_gpio_cfgpin(S3C2410_GPG12, S3C2410_GPIO_OUTPUT);
s3c24xx_udc_set_platdata(&EmbedSky_udc_cfg);

2、配置内核

添加上对 USB Device 的配置,输入:#make menuconfig,进入“Device Drivers”选项的配置单的“USB support”选项的配置单的最后一项“USB Gadget Support”选项的配置单,加入对 UDC 设备的支持,以及文件系统的支持(以模块的形式),然后配置如下所示:

Device Drivers —>
[
] USB support —>
<*> USB Gadget Support —>
USB Peripheral Controller (S3C2410 USB Device Controller)
S3C2410 USB Device Controller
< M > USB Gadget Drivers
< M > File-backed Storage Gadget
*

配 置 完 毕 后,编 译 出uImage 镜 像 , 烧 写 到 开 发 板 中 , 然 后 在 PC 的 终 端 上 使 用
#make modules SUBDIRS=drivers/usb/gadget/
命令可以编译出来刚刚以模块形式配置的文件系统的驱动模块,最后在内核源码的“drivers/usb/gadget/”目录下生成名为:“g_file_storage.ko”的驱动模块,将其复制到文件系统的“/lib/”目录下面,然后制作新的yaffs2根文件系统:
#mkyaffs2image root_2.6.30.4 root.bin
将新的文件系统烧写到开发板中,启动开发板。

3、实现开发板做U盘

在开发板的串口终端使用下面的命令挂载刚刚编译出来的驱动模块:
$insmod /lib/g_file_storage.ko file=/dev/mtdblock2 removable=1
yaffs 文件系统所在的分区为mtdblock2 ,可以作为“U 盘”的存储部分,
然后挂载完毕后,插入 USB 线到开发板的 USB Device 接口(也就是烧写时用的那个 USB 口),然后可以在 Windows 的设备管理器中发现可移动硬盘,此时整个开发板就是一个“U 盘”,然后 yaffs 文件系统的分区就是“U 盘”的存储器。
USB设备驱动移植之开发板做U盘
USB设备驱动移植之开发板做U盘
USB设备驱动移植之开发板做U盘