添加USB设备驱动

一,修改文件: 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

 

 

作者: swinner1985   发布时间: 2010-10-12