2743|0

64

帖子

62

TA的资源

一粒金砂(高级)

楼主
 

Linux3.4内核USB驱动的移植 [复制链接]

作者:李老师,华清远见嵌入式学院讲师。
【实验目的】
USB接口是现在计算机系统中最通用的一种接口,通过移植USB驱动,了解Linux3.4内核与Linux2.6内核的不同,并且掌握USB驱动的实现原理。
说明:在本系统移植课程实验中命令行提示符“$”表示是在主机上执行,“#”表示在目标板执行。
【实验环境】
            ● 主机:Ubuntu 10.10 (64bit);
            ● 目标机:FS_S5PC100平台;
            ● 交叉编译工具链:arm-eabi-4.4.0(Android4.0.4自带交叉工具链);      
【实验步骤】
1.        添加USB驱动
添加针对我们板子的USB驱动及相关头文件
    ● 拷贝ohci-s3c2410.c 到drivers/usb/host/下
      $ cp ohci-s3c2410.c drivers/usb/host/
    ● 拷贝regs-clock.h到 arch/arm/mach-s5pc100/include/mach/下
       $ cpregs-clock.h arch/arm/mach-s5pc100/include/mach/
2.        平台代码修改
    ● 修改drivers/usb/Kconfig
在(11行)
       default  y  if  ARCH_S3C2410
下面添加:
       default  y  if  ARCH_S5PC100
    ● 修改drivers/usb/host/ohci-hcd.c
在(1002行)
       #if defined(CONFIG_ARCH_S3C2410) || defined(CONFIG_ARCH_S3C64XX)
修改为:
       #if defined(CONFIG_ARCH_S3C2410) || defined(CONFIG_ARCH_S3C64XX) || defined(CONFIG_ARCH_S5PC100)
    ● 修改arch/arm/mach-s5pc100/include/mach/map.h
在map.h文件中添加如下内容:
#define S3C_PA_USBHOST          (0xED400000)
    ● 修改arch/arm/plat-samsung/devs.c
把(1360行)
        #ifdef CONFIG_S3C_DEV_USB_HOST
              staticstruct resource s3c_usb_resource[] = {
                      [0] = DEFINE_RES_MEM(S3C_PA_USBHOST, SZ_256),
                      [1] = DEFINE_RES_IRQ(IRQ_USBH),
              };      
改为:
        #ifdef CONFIG_S3C_DEV_USB_HOST
              staticstruct resource s3c_usb_resource[] = {
                      [0] = DEFINE_RES_MEM(S3C_PA_USBHOST, SZ_256),
                      [1] = DEFINE_RES_IRQ(IRQ_UHOST),
              };      
    ● 修改arch/arm/mach-s5pc100/Kconfig
在(14行)
        Config CPU_S5PC100
                      bool
                      select S5P_EXT_INT
                      select SAMSUNG_DMADEV      
下面添加:
        select  S3C_DEV_USB_HOST
    ● 修改arch/arm/mach-s5pc100/mach-smdkc100.c
添加头文件:
        1 #if defined (CONFIG_USB_SUPPORT)
              2 #include
              3 #endif      
添加平台设备:
        01 #if defined(CONFIG_USB_SUPPORT)
              02 void usb_host_clk_en(void) {
              03    /* Setting the epllclk to 48 MHz, P=3, M=96, S=3 */
              04    writel((readl(S5P_EPLL_CON) & ~(S5P_EPLL_MASK)) | (S5P_EPLL_EN \
              05                | S5P_EPLLVAL(96,3,3)), S5P_EPLL_CON);
              06    writel((readl(S5P_CLK_SRC0) | S5P_CLKSRC0_EPLL_MASK), S5P_CLK_SRC0);
              07    writel((readl(S5P_CLK_SRC1)&~S5P_CLKSRC1_UHOST_MASK),S5P_CLK_SRC1);
              08  
              09    /* USB host clock divider ratio is 1 */
              10    writel((readl(S5P_CLK_DIV2)&~S5P_CLKDIV2_UHOST_MASK),S5P_CLK_DIV2);
              11    writel(readl(S5P_CLKGATE_D10)|S5P_CLKGATE_D10_USBHOST,S5P_CLKGATE_D10);
              12    writel(readl(S5P_SCLKGATE0)|S5P_CLKGATE_SCLK0_USBHOST, S5P_SCLKGATE0);
              13 }
              14 #endif      
    ● 添加平台设备列表
在smdkc100_device[]结构体数组中添加如下内容:
        1 #if defined(CONFIG_USB_SUPPORT)
              2       & s3c_device_ohci,
              3 #endif      
配置内核
        $ make menuconfig
    ● 添加USB控制器支持:
       Device Drivers  --->
                     
  • USB support  --->
                                  <*>   Support for Host-side USB
                                  <*>     OHCI HCD support      
  •     ● 添加U盘支持:
             Device Drivers  --->
                          SCSI device support  --->
                                  <*> SCSI device support
                                  <*> SCSI disk support
                                  <*> SCSI generic support
                                  <*> SCSI media changer support      
           Device Drivers  --->
                         
  • USB support  --->
                                  <*>   USB Mass Storage support      
  • 添加文件系统及语言配置:
          File systems  --->
                          DOS/FAT/NT Filesystems  --->
                                  <*> VFAT (Windows-95) fs support
                  -*- Native language support  --->
                          <*>Codepage 437 (United States, Canada)
                          <*>   Simplified Chinese charset (CP936, GB2312)
                          <*>   NLS ISO 8859-1  (Latin 1; Western European Languages)
                          <*>   ASCII (United States)
                          <*>   NLS UTF-8      
    编译内核
    编译内核并拷贝到tftpboot下。
            $ make zImage
                  $ cp arch/arm/boot/zImage  /tftpboot      
    测试
    启动目标板并在目标板上完成如下操作:
            # mount  -t  vfat  /dev/block/sda1 /mnt/sdcard
                  # ls /mnt/sdcard      
    可以查看到U盘内容,即完成实验。
    点赞 关注

    回复
    举报
    您需要登录后才可以回帖 登录 | 注册

    随便看看
    查找数据手册?

    EEWorld Datasheet 技术支持

    相关文章 更多>>
    关闭
    站长推荐上一条 1/10 下一条

     
    EEWorld订阅号

     
    EEWorld服务号

     
    汽车开发圈

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表