添加USB设备驱动
时间:2010-10-12 来源:swinner1985
一,修改文件: linux-2.6.30/arch/arm/mach-s3c2410/mach-smdk2410.c
头文件处包含下面头文件:
#include <mach/usb-control.h>
#include <mach/regs-gpio.h>
#include <mach/regs-clock.h>
#include <linux/delay.h>
添加USB设备及其初始化函数:
static struct s3c2410_hcd_info s3c2410_usb_info = {
.port[0] = { .flags = S3C_HCDFLG_USED },
// .port[1] = { .flags = S3C_HCDFLG_USED },
};
int s3c2410_usb_init(void)
{
unsigned long upllvalue = (0x78<<12)|(0x02<<4)|(0x03);
printk("Initial S3C241 USB Control, (c) 2009 kernel.\n");
s3c_device_usb.dev.platform_data = &s3c2410_usb_info;
while(upllvalue!=__raw_readl(S3C2410_UPLLCON))
{
__raw_writel(upllvalue,S3C2410_UPLLCON);
mdelay(1);
}
return 0;
}
在函数static void __init smdk2410_init(void)中调用USB设备初始化函数:
static void __init smdk2410_init(void)
{
platform_add_devices(smdk2410_devices, ARRAY_SIZE(smdk2410_devices));
s3c24xx_fb_set_platdata(&smdk2410_fb_info);
s3c2410_usb_init();
smdk_machine_init();
}
或者按下面方法
修改driver/usb/host/ohci-s3c2410.c加入
#include <xxx/regs-clock.h> //xxx为不同内核版本下的目录,找定义S3C2410_UPLLCON
unsigned long upllvalue = (0x78<<12)|(0x02<<4)|(0x03); //add
static void s3c2410_start_hc函數中加入
while (upllvalue !=__raw_readl(S3C2410_UPLLCON))
{
__raw_writel(upllvalue, S3C2410_UPLLCON);
mdelay(1);
}
效果是一样的,若不修改挂载USB会出现错误
usb 1-1: new full speed USB device using s3c2410-ohci and address 2
usb 1-1: device descriptor read/64, error -62
usb 1-1: device descriptor read/64, error -62
usb 1-1: new full speed USB device using s3c2410-ohci and address 3
usb 1-1: device descriptor read/64, error -62
usb 1-1: device descriptor read/64, error -62
hub 1-0:1.0: unable to enumerate USB device on port 1
我使用遇到这样情况 当第一次下载内核后运行是没问题的,但是重启之后就出现上述错误了
二.Make menuconfig时选择USB驱动支持:
Device Drivers --->
[*] USB support --->
[*] Support for Host-side USB
[*] USB device filesystem
[*] OHCI HCD support
[*] USB Mass Storage support
[*] The shared table of common (or usual) storage devices
由于U盘最终还是模拟为SCSI设备来访问,所以还得选上SCSI层的支持
SCSI device support --->
[*] SCSI device support
[*] SCSI target support
[*] legacy /proc/scsi/ support
[*] SCSI disk support
由于没有选IS08859-1这个字符编码方式,所以在mount U盘的时候,会出现下面这个错误:
>: mount -t vfat /dev/sda1 /mnt/
FAT: IO charset iso8859-1 not found
mount: mounting /dev/sda1 on /mnt/ failed: Invalid argument
这时,需要make menuconfig时选择ISO8859的支持:
File systems --->
-*- Native language support --->
--- Native language support
(iso8859-1) Default NLS Option
[*] NLS ISO 8859-1 (Latin 1; Western European Languages)
当然也可以设置其他编码方式:
[*] Codepage 437 (United States, Canada)
[*] Simplified Chinese charset (CP936, GB2312)
[*] ASCII (United States)
[*] NLS UTF-8