天天看点

基于s3c2410开发板2.6.25内核的USB驱动的移植 (转)

http://www.cppblog.com/040410615/archive/2008/05/16/50050.html

因为2.6.25内核源码中并没有USB驱动的初始化程序,因此我添加了相应的代码:

在linux-2.6.25/arch/arm/mach-s3c2410/mach-smdk2410.c文件中添加:

static struct s3c2410_hcd_info usb_s3c2410_info = {

       .port[0]        = {

               .flags  = S3C_HCDFLG_USED

       },

       .port[1]        = {

               .flags  = S3C_HCDFLG_USED

       }

};

int __init s3c2410_init_usb(void)

{

    unsigned long upllvalue;

    printk("USB Control, (c) 2006 pc104/n");

    s3c_device_usb.dev.platform_data = &usb_s3c2410_info;

    s3c2410_modify_misccr(S3C2410_MISCCR_USBSUSPND0 |

                  S3C2410_MISCCR_USBSUSPND1, 0x8);

    upllvalue = (0x78<<12)|(0x02<<4)|(0x03);

    while(upllvalue!=__raw_readl(S3C2410_UPLLCON))

    {

        __raw_writel(upllvalue,S3C2410_UPLLCON);

        mdelay(1);

    }

    return 0;

}

在此函数中添加了红色部分:

static void __init smdk2410_init(void)

{

        platform_add_devices(smdk2410_devices, ARRAY_SIZE(smdk2410_devices));

        smdk_machine_init();

       s3c2410_init_usb();

}

其对上面代码的解释看下此帖:

http://www.linuxforum.net/forum/showflat.phpCat=&Board=embedded&Number=556915&page=0&view=collapsed&sb=5&o=0&fpart=

拷贝linux-2.6.25/arch/arm/configs/s3c2410_defconfig 缺省配置文件  并命名.config

make  menuconfig  再进行配置

1.设备驱动部分设置

          General setup  --->  

     [*]Configure standard kernel features (for small systems)  --->

         [*] Support for hot-pluggable devices

              Device Drivers  ---> 

              Generic Driver Options  --->          

<*> Hotplug firmware loading support    

               Block devices  --->    

<*> Low Performance USB Block driver   

           SCSI device support  --->   

      <*>   SCSI generic support  

      <*>   SCSI disk  support

          [*]   Probe all LUNs on each SCSI device    

              USB support  --->        

 <*> Support for Host-side USB    

          [*]   USB device filesystem 

 <*>   OHCI HCD support  

<*>   USB Mass Storage support 

      [*]   USB Monitor

这里我选择了SCSI设备。

2 文件系统部分设置

           File systems  --->      

         DOS/FAT/NT Filesystems  --->   

                 <*> MSDOS fs support                               

                 <*> VFAT (Windows-95) fs support                  

                 (936) Default codepage for FAT                      

                (cp936) Default iocharset for FAT                   

   File systems  --->

     Partition Types  ---> 

        [*]   PC BIOS (MSDOS partition tables) support

 3 加入一些字体库

  Native Language Support  --->   

    <*>   Simplified Chinese charset (CP936, GB2312) 

    <*>   NLS UTF8

但我将内核镜像烧入板中后,插入U盘  mount  挂载时出现如下错误:

Unable to load NLS charset cp437

FAT: codepage cp437 not found

mount: mounting sda1 on /mnt failed: Invalid argument

因此我又重新增加了配置选项在 Native Language Support  --->    中

File systems  --->   

Native Language Support  --->   

  <*>   Codepage 437 (United States, Canada) 

<*>   Simplified Chinese charset (CP936, GB2312) 

然后再编译

make  zImage

烧入镜像后插入U盘显示如下信息

sd 1:0:0:0: [sda] 129312 512-byte hardware sectors (66 MB)

sd 1:0:0:0: [sda] Write Protect is off

sd 1:0:0:0: [sda] Assuming drive cache: write through

sd 1:0:0:0: [sda] 129312 512-byte hardware sectors (66 MB)

sd 1:0:0:0: [sda] Write Protect is off

sd 1:0:0:0: [sda] Assuming drive cache: write through

sda: sda1

sda: p1 exceeds device capacity

sd 1:0:0:0: [sda] Attached SCSI removable disk

然后mount  -t vfat /dev/sda1  /mnt

其中设备文件名是我在安装文件系统时生成的

在/dev/中

mknod  sda1  b 8 0

加载成功