Chinaunix首页 | 论坛 | 博客
  • 博客访问: 73065
  • 博文数量: 31
  • 博客积分: 1290
  • 博客等级: 中尉
  • 技术积分: 305
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-25 15:49
文章分类
文章存档

2007年(31)

我的朋友
最近访客

分类: LINUX

2007-11-13 22:10:32

========================================================================
!!  任务一:                                                                                                                                                   !!
!!  任务描述:完成在linux2.6.22下的usb驱动的移植,实现usb主设备驱动,并写出总结文档        !!
========================================================================

2007.11.16
1.在kernel启动是出现如下问题:
mount: mounting tmpfs on /dev failed
解决方案如下,
 File systems  --->
     Pseudo filesystems  --->
        [*] Virtual memory file system support (former shm fs)

2.另附上vivi启动参数,最近一直用nfs,转换着麻烦,先记下来cp
设置从flash 启动:
param set linux_cmd_line "noinitrd init=/linuxrc console=ttySAC0 root=/dev/mtdblock3"
设置从nfs启动:
param set linux_cmd_line "noinitrd init=/linuxrc console=ttySAC0 root=/dev/nfs nfsroot=192.192.192.xx:/srv/nfs/rootfs ip=192.192.192.200:192.192.192.xx:192.192.192.xx:255.255.255.0::eth0:off"
设置从ramdisk启动:
param set linux_cmd_line "console=ttySAC0 initrd=0x30800000,0x400000 root=/dev/ram"。

3.测试通过了usb device的测试,可以进行从设备操作,对usb device进行模块加载操作,方法如下:(两个.ko文件为usb驱动的模块文件,需要加载后使用)
$ insmod s3c2410_udc.ko
$ insmod g_file_storage.ko file=/dev/mtdblock5 stall=0 removable=1

4、usb从部分添加内容:
4.1.usb初始化为从设备时配置:
+++ linux-2.6.22/arch/arm/mach-s3c2410/mach-f2410.c    2007-11-15
     &s3c_device_i2c,
     &s3c_device_iis,
     &s3c_device_nand,
+/* add by feng */
+    &s3c_device_usbgadget,
 };
 /* USB */
     s3c_device_usb.dev.platform_data = &usb_s3c2410_info;
     s3c2410_modify_misccr(S3C2410_MISCCR_USBSUSPND0 |
-                  S3C2410_MISCCR_USBSUSPND1, 0x8);
+                  S3C2410_MISCCR_USBSUSPND1 |
+                  S3C2410_MISCCR_USBHOST, 0x0);

4.2.添加udc驱动:
+++ linux-2.6.22/drivers/usb/gadget/s3c2410-udc.c    2007-11-15 17:38:17.000000000 +0800
+++ linux-2.6.22/drivers/usb/gadget/s3c2410-udc.h    2007-11-15 17:38:31.000000000 +0800
+++ linux-2.6.22/include/asm/arch-s3c2410/regs-udc.h    2007-11-16 01:22:25.000000000 +0800

4.3.在kconfig中添加udc选项支持:
+++ linux-2.6.22/drivers/usb/gadget/Kconfig    2007-11-15 
Select this only if your OMAP board has a Mini-AB connector.
+# add by feng
+config USB_GADGET_S3C2410
+        boolean "S3C2410"
+        depends on ARCH_S3C2410
+        help
+          Samsung's S3C2410 is an ARM-4 processor with an integrated
+          full speed USB 1.1 device controller.
+          It has 4 configurable endpoints, as well as endpoint
+          zero (for control transfers).
+
+config USB_S3C2410
+        tristate
+        depends on USB_GADGET_S3C2410
+        default USB_GADGET
+        select USB_GADGET_SELECTED
+
+config USB_S3C2410_DEBUG
+        boolean "S3C2410 udc debug messages"
+        depends on USB_GADGET_S3C2410
+#end add
+
 config USB_GADGET_AT91
     boolean "AT91 USB Device Port"
4.4.在makefile中添加udc选项支持:
+++ linux-2.6.22/drivers/usb/gadget/Makefile    2007-11-15 17:01:04.000000000 +0800
 obj-$(CONFIG_USB_FSL_USB2)    += fsl_usb2_udc.o
+#add by feng
+obj-$(CONFIG_USB_S3C2410)       += s3c2410-udc.o


2007.11.15

一、学习ctags查找源码的用法,超级方便
步骤:
1,现在源码目录中运行指令
    $ ctags –R *      ($ 为Linux系统Shell提示符)
2,用vi进入编辑环境,
    Ctrl + ]查找查询
    Ctrl + T返回上一步
    :ta XX    查找文件XX
二、usb从部分(以后添加)
1,添加udc驱动:

在kconfig中添加udc支持:

在makefile中添加udc支持:

2.配置
Device Drivers  --->
    USB Gadget Support  --->
          Support for USB Gadgets
         USB Peripheral Controller (S3C2410)  --->
            (X) S3C2410
            File-backed Storage Gadget

2007.11.14

参考luofuchong的帖子,修改文件,并修改mach-f2410.c文件,使其支持usb的初始化
在mach-f2410.c添加如下:

#include
#include
#include
#include
#include

/* USB */
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 f2410_init_machine(void)
{
    s3c_device_nand.dev.platform_data = &sbc2410x_nand_info;
    platform_add_devices(f2410_devices, ARRAY_SIZE(f2410_devices));
    s3c2410_init_usb();
}

下面为配置:

下面为拷贝luofuchong的 linux-2.6.14下USB驱动移植心得,主要根据2.6.22的核改了一下,使其可以支持u盘。
/*****************************************from luofuchong**********************************/
1、让内核支持热插拔
 │         General setup  --->
    [*] Configure standard kernel features (for small systems)  --->
      [*]   Support for hot-pluggable devices (NEW)
2.USB驱动设置
Device Drivers  --->
    Generic Driver Options  --->                                      
        <*> Userspace firmware loading support
Block devices  --->
        <*> Low Performance USB Block driver
    SCSI device support  --->
        <*> SCSI generic 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
 3、加入了MSDOS fs和VFAT fs的支持。

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
   
4.  加入中文字体库(可惜在我的板上还是没能正常显示中文~_~,知道的朋友麻烦告诉我一声,大家一起探讨)
 Native Language Support  --->   
    <*>   Simplified Chinese charset (CP936, GB2312) 
    <*>   NLS UTF8

5、另外,如果想让内核把它当成SCSI设备来处理的话,只要把上面:
Device Drivers  --->   
     Block devices  ---> 
        <*> Low Performance USB Block driver
的 Low Performance USB Block driver这个选项去掉,然后把:
 Device Drivers  --->
    SCSI device support  ---> 
        <*>SCSI disk support
的SCSI disk support这个选项选上,重新编译内核就行。
/***************************************end from*********************************************/
2007.11.13

查找资料:
linux-2.6.14下USB驱动移植心得

     


                                        
阅读(1127) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~