关于fl2440开发板Linux内核添加USB驱动的问题

添加USB支持:

FL2440添加u盘的挂载比较简单,大部分的内容都是在内核里面做make menuconfig,配置内核

Device Drivers  --->

     Generic Driver Options  --->

                  (/sbin/hotplug) path to uevent helper                  //配置u盘的热插拔

      [*] Block devices  --->

                   <*>   Low Performance USB Block driver

     SCSI device support  ---> 

                  <*> SCSI device support 

                  <*> SCSI generic support

[*]legacy /proc/scsi/ support
<*>SCSI disk support
<*> SCSI CDROM support

                  [*] Probe all LUNs on each SCSI device 

  [*] HID Devices  ---> 

 <*>   USB Human Interface Device (full HID) support

 [*]   /dev/hiddev raw HID device support 

     [*] USB support  ---> 

                 <*>   Support for Host-side USB

                 [*]     USB device filesystem (DEPRECATED)

                 [*]     USB device class-devices (DEPRECATED)

                 <*>   USB Monitor

                 <*>   OHCI HCD support

                 <*>   USB Mass Storage support

File systems  --->                                              //配置u盘的文件系统

       DOS/FAT/NT Filesystems  --->

                  <*> MSDOS fs support

                  <*> VFAT (Windows-95) fs support

                   (936) Default codepage for FAT 

                   (cp936) Default iocharset for FAT 

      -*- Native language support  --->                                      //配置u盘的语言格式支持,不过感觉着个配置没什么用,中文也支持不了,也许是因为linux对中文的支持并不好吧

                    <*>   Simplified Chinese charset (CP936, GB2312)

                     <*>   ASCII (United States) 

                     <*>   NLS UTF-8

添加USB结构体变量,加厂商ID和设备ID

[Ciel@localhost linux-3.0]$ vim drivers/usb/serial/option.c 

2964 @@ -51,6 +51,13 @@
2965  static void option_instat_callback(struct urb *urb);
2966 
2967  /* Vendor and product IDs */
2968 +static int vendor = 0; /*   Add by guowenxue */
2969 +static int product = 0; /*   Add by guowenxue  */
2970 +
2971 +/*   Vendor and product IDs */
2972 +#define OPTION_VENDOR_RESERVED      0xFFFF /*   Add by guowenxue */
2973 +#define OPTION_RESERVED_DEVICE      0xFFFF /*   Add by guowenxue */ 
2974 +
2975  #define OPTION_VENDOR_ID           0x0AF0
2976  #define OPTION_PRODUCT_COLT            0x5000
2977  #define OPTION_PRODUCT_RICOLA          0x6000
2978 @@ -446,7 +453,8 @@
2979     .reason = OPTION_BLACKLIST_SENDSETUP
2980  };
2981 
2982 -static const struct usb_device_id option_ids[] = {
2983 +static struct usb_device_id option_ids[] = {
2984 +    { USB_DEVICE(OPTION_VENDOR_RESERVED, OPTION_RESERVED_DEVICE) }, /*   Add by guowenxue */
2985     { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
2986     { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
2987     { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_LIGHT) },
2988 @@ -1079,6 +1087,15 @@
2989  static int __init option_init(void)
2990  {
2991     int retval;
2992 +
2993 +    if ((vendor>0) && (product>0))
2994 +    {
2995 +        option_ids[0].match_flags = USB_DEVICE_ID_MATCH_DEVICE;
2996 +        option_ids[0].idVendor = vendor;
2997 +        option_ids[0].idProduct = product;
2998 +        printk("Register option drvier for modem vendor=0x%04x product=0x%04x\n", vendor, product);
2999 +    }
3000 +

[Ciel@localhost linux-3.0]$ vim arch/arm/mach-s3c2440/mach-smdk2440.c

  4 @@ -23,6 +23,13 @@
   5  #include <linux/platform_device.h>
   6  #include <linux/io.h>
   7 
   8 +/*  add by guowenxue for norflash  */
   9 +#include <linux/gpio_keys.h>
  10 +#include <linux/input.h>
  11 +#include <linux/mtd/physmap.h>
  12 +#include <linux/mtd/mtd.h>
  13 +#include <linux/mtd/partitions.h>
  14 +
  15  #include <asm/mach/arch.h>
  16  #include <asm/mach/map.h>
  17  #include <asm/mach/irq.h>
  18 @@ -44,6 +51,11 @@
  19  #include <plat/clock.h>
  20  #include <plat/devs.h>
  21  #include <plat/cpu.h>
  22 +#include <plat/ts.h>         /*Add by guowenxue to support Touch screen, 2011.09.06*/
  23 +#include <mach/regs-clock.h> /*Add by guowenxue 2012.07.15, for usb_s3c2440_init() */
  24 +#include <linux/i2c.h>       /*Add by guowenxue 2012.10.22, for AT24C512 driver */
  25 +#include <linux/i2c/at24.h>  /* Add by guowenxue 2012.10.22, for AT24C512 driver */
  26 +#include <linux/delay.h>
  27 
  28  #include <plat/common-smdk.h>
  29 
  30 @@ -102,6 +114,13 @@
  31     }


 224 +/* Add by guowenxue 2012.07.15, fix device descriptor read/64, error -62 bug, value refer to datasheet P255 */ 
 225 +int usb_s3c2440_init(void)
 226 +{
 227 +    /* Input Frequency is 12.0000MHz, and MDEV=0x38 PDIV=2 SDIV=2, so output frequency 48.00MHz */
 228 +    unsigned long upllvalue = (0x38<<12)|(0x02<<4)|(0x02); 
 229 +    while (upllvalue != __raw_readl(S3C2410_UPLLCON)) 
 230 +    { 
 231 +        __raw_writel(upllvalue, S3C2410_UPLLCON); 
 232 +        mdelay(1); 
 233 +    }
 234 +
 235 +    return 0;
 236 +}
 237 +
 238  static void __init smdk2440_map_io(void)
 239  {
 240     s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
 241 -   s3c24xx_init_clocks(16934400);
 242 +   s3c24xx_init_clocks(12000000); /*Modify by guowenxue, 2011.08.30*/
 243     s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
 244 +    usb_s3c2440_init(); /* Add by guowenxue, 2012.07.15 */
 245  }
 246 

重新编译下内核,加载到开发板,插入U盘

usb 1-1.2: New USB device found, idVendor=0930, idProduct=6544
usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3

usb 1-1.2: Product: TransMemory     
usb 1-1.2: Manufacturer: TOSHIBA 
usb 1-1.2: SerialNumber: FB2F75AFCE3ACE605AE04025
 sdb: sdb1

挂载命令

>: mount -t vfat /dev/sdb1 /mnt/usb/

U盘查看>: ls /mnt/usb/
0.jpg                          KOF97.zip
1.Altium Designer??b.avi       RStudio
2016???????????.doc            SOPC_Class.rar
??                             System Volume Information
???                            VMware-workstation-full-9.zip
????                           VSX4_Pro_TBYB.exe
?????                          lzj-???.doc
??Qt?????2.ppt                 lzj.mpg
??Qt???????.ppt                lzj??.doc
CentOS-6.3-i386-LiveCD.iso     mainwindow
GHO                            php


(其中你看的?或者乱码 是因为中文不支持)这样就可以使用了。

遇到的问题做了一个小小的说明:

>:usb 1-1.3: new full speed USB device number 3 using s3c2410-ohci
scsi0 : usb-storage 1-1.3:1.0
scsi 0:0:0:0 Direct-Access 5.00 PQ: 0 ANSI: 2
scsi 0:0:0:0 Attached scsi generic sg0 type 0

这是把U盘识别为光驱了 ,需要检查你的make menuconfig的配置选项有没有改错

遇到挂载不上去有可能是文件系统的问题需要检查你的根文件树或者是make menuconfig对应的根文件树的路径有误


还有一个关于自动挂载的问题,如果你的U盘在板子上显示是sd,也可能有的设备是ub ,这时候可以进入你的根文件树查看是否自动挂载

[Ciel@localhost etc]$ vim mdev.conf

 sd[a-z][0-9]      0:0 0777        @(mount /dev/$MDEV /mnt/usb)
sd[a-z]           0:0 0777        $(umount /mnt/usb)
ub[a-z][0-9]      0:0 0777        @(mount /dev/$MDEV /mnt/usb)
ub[a-z]           0:0 0777        $(umount /mnt/usb)
mmcblk[0-9]p[0-9] 0:0 0777        @(mount /dev/$MDEV /mnt/sdc)
mmcblk[0-9]       0:0 0777        $(umount /mnt/sdc)

sd的设备后置从 a-z 或者 0-9 都可以显示自动挂载

ub的设备后置从 a-z 可以显示自动挂载,如果你的ub设备显示数字,

可以在第三行改为ub[a-z][0-9]    0:0 0777    (mount /dev/$MDEV /mnt/usb)

mmcblk的设备也是如此。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在进行Linux开发板USB驱动演示时,我们首先需要确保开发板的硬件和软件环境已经配置完毕。 硬件方面,我们需要连接一个USB设备到开发板USB接口。这个USB设备可以是一个USB存储设备,例如U盘或移动硬盘,也可以是其他USB设备,例如USB摄像头或USB音频设备。 软件方面,我们需要确保开发板上已经安装了Linux操作系统,并且已经配置好USB主机控制器和USB驱动。一般来说,Linux内核已经默认集成了常见USB设备的驱动程序,因此我们只需要确认这些驱动程序已经正确加载。 接下来,我们可以进行USB驱动的演示。 首先,在开发板上打开一个终端窗口,使用dmesg命令查看系统的内核日志,确认USB设备已经被识别并分配了对应的设备节点。 然后,使用lsusb命令查看已连接的USB设备的信息,例如设备的厂商ID和产品ID。这将有助于我们在驱动程序中确定对应的USB设备。 接下来,我们可以使用udev规则来配置和实例化设备节点。我们可以在udev规则中指定使用哪个驱动程序来处理特定的USB设备。这样,当USB设备被插入开发板时,系统将自动加载对应的驱动程序并创建设备节点。 然后,我们可以编写一个简单的应用程序来测试USB驱动。这个应用程序可以通过读取或写入USB设备的数据来验证驱动程序的功能。我们可以使用系统的文件I/O接口(如read和write函数)来与USB设备进行数据交换。 最后,我们可以在终端窗口中运行这个应用程序,观察它与USB设备之间的通信是否正常。如果一切顺利,我们应该能够成功读取或写入USB设备的数据。 通过以上步骤,我们可以进行Linux开发板USB驱动的演示。这将帮助我们更好地理解和学习USB驱动的开发和调试过程。 ### 回答2: Linux开发板上的USB驱动演示是指在Linux系统上进行USB设备开发的示范。USB驱动是操作系统与USB设备之间的通信桥梁,它负责管理和控制USB设备的连接、数据传输和电源管理等功能。 在这个演示中,我们将使用一块Linux开发板和一款支持USB接口的设备。首先,我们需要安装合适的Linux发行版,以及开发板所需要的驱动和工具链等。 接下来,我们会创建一个简单的USB设备驱动程序,它将负责识别和管理连接到Linux开发板USB设备。我们会编写相应的代码,包括设备识别、配置和通信等功能,并将其编译成内核模块。 然后,我们会将该USB设备驱动程序加载到Linux内核中,并对USB设备进行测试。我们可以通过命令行工具或者编写测试程序的方式,来验证USB设备在Linux系统上的正常工作。 演示中,我们还可以尝试不同的USB设备,比如USB鼠标、键盘、摄像头等,并编写相应的驱动程序来支持这些设备的功能。 通过这个演示,我们可以了解到USB设备驱动Linux系统中的工作原理和开发流程。同时也可以了解到设备与系统之间的通信过程,以及如何利用Linux提供的API进行设备管理和数据传输。 总的来说,Linux开发板USB驱动演示是一个很好的学习和实践USB设备开发的机会,通过动手实践,可以更好地理解和掌握相关知识和技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值