Linux 2.6.22.6移植到S3C2410(gec2410)之:USB驱..
时间:2009-07-03 来源:mijianbin2008
Linux 2.6.22.6移植到S3C2410(gec2410)之:USB驱动移植
参照资料
http://blog.chinaunix.net/u3/93290/showart_1904445.html (不是很完整)
下面主要例一下修改过的地方
移植步骤:
1. 修改在arch/arm/mach-s3c2410目录下的mach-smdk2410.c,添加如下内容
//添加usb头文件
#include <asm/arch/usb-control.h>
#include <asm/arch/regs-clock.h>
#include <linux/device.h>
#include <linux/delay.h>
//……………………………………………………………………………………usb
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 sbc2410\n");
s3c_device_usb.dev.platform_data = &usb_sbc2410_info;
while(upllvalue!=__raw_readl(S3C2410_UPLLCON))
{
__raw_writel(upllvalue,S3C2410_UPLLCON);
mdelay(1);
}
return 0;
}
注(__raw_readl 和__raw_writel ,“l”是字每来的)
static struct platform_device *smdk2410_devices[] __initdata = {
&s3c_device_usb,
// &s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c,
&s3c_device_iis,
&s3c_device_usbgadget,
};
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);
usb_sbc2410_init();
}
2. 编译内核,选中所装驱动,配置USB鼠标键盘
#make menuconfig
Device Drivers >
USB support --->
<*> Support for Host-side USB
<*> OHCI HCD support
--- USB Input Devices
<*> USB Human Interface Devices (full HID) support
[*] HID input layer support
3. 配置U盘支持
因为要优盘用到了SCSI 命令,所以我们先增加SCSI 支持。
在Device Drivers 菜单里面,选择SCSI device support
#make menuconfig
Device Drivers >
SCSI device support --->
[*] legacy /proc/scsi support
<*> SCSI disk support
然后选择<Exit>返回Device Drivers 菜单,再选择 USB support,按回车进入USB support菜单找到并选中
Device Drivers >
USB support --->
<*> USB Mass Storage support
[*] USB Mass Storage verbose debug
Mount /dev/sda1 usb/