zoukankan      html  css  js  c++  java
  • Linux上USB移植错误解决笔记

           在内核目录下先配置支持USB设备,无论你是什么设备,这一步都是必须的,USB驱动和其他的驱动不同,它分为USB设备驱动,另外还有USB-Host主机控制器的驱动,配置如下:

              Device Drivers  --->  

                           SCSI device support  ---> 

                                       <*> SCSI device support

                                       <*> SCSI disk support

    以上是为了支持U盘挂载,U盘在Linux中被识别为SCSI设备。

                  Device Drivers  ---> 

                                <*>     USB Monitor

                                <*>     OHCI HCD support

                                [*]     USB device filesystem (DEPRECATED)                              

                             [*]     USB device class-devices (DEPRECATED)                    

                             [*]     Dynamic USB minor allocation

    这就可以了,这几项是必须选的,因为这里面的OHCI HCD是主机控制器的驱动,不选的话,就算你USB设备驱动写出来了,也无法被主机识别。

    接下来再选一下HID设备:

                                [*] HID Devices  --->

    这个可以自主的选择,我关注的是主机控制器的驱动:

                  直接编译内核,烧写,启动,弹出错误,插入USB设备:

    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

    usb 1-1: new full speed USB device using s3c2410-ohci and address 4

    usb 1-1: device not accepting address 4, error -62

    usb 1-1: new full speed USB device using s3c2410-ohci and address 5

    usb 1-1: device not accepting address 5, error -62

    hub 1-0:1.0: unable to enumerate USB device on port 1

    最后一句的意思是,设备枚举失败,error -62的意思时超时错误。从这里可以看出,系统应该是识别到了USB设备,但是设备却无法工作,而且可以断定是USB主机控制器的错误。的确如此,百度一下,网上说这是时钟错误,也就是USB是时钟没有起来,对于2440,USB时钟需要工作在48M。修改内核源码:

           添加时钟初始化的代码,这个网上有很多版本,自己随意去找一个,无非就是给UPLLCON寄存器写个数值进去。这里我就不详细介绍了,但是我不知道为什么,我在内核中添加时钟初始化代码,就是写入UPLLCON寄存器,写入了0x00038022,这是配置USB时钟为48M的数值,但是很不幸,写入是成功的,我把这个寄存器的值重新读出来,printk了一下,也是对的。编译,下载,测试,照样出错。

           也就是说USB时钟还是不工作。遇到这种情况,看数据手册去,手册上说配置PLL的时候,有MPLLCON和UPLLCON两个寄存器,要先配置UPLLCON,再配置MPLLCON寄存器,而MPLLCON在哪配置的呢,原来是这样,也就是说我们配置顺序不对,所以在内核中配置UPLLCON会失败,那我们就去改改u-boot代码吧,在u-boot的start.S中添加UPLLCON的配置,也就三行代码:

           ldr r0,= 0x4c0000008;

           ldr r1,=0x000038022;

           str r1, [r0]

    这三句要加在MPLLCON之前,同时在两次配置之间至少要起个nop指令的间隔,这是数据手册要求的。

    重新烧写u-boot,启动内核,插入USB无线鼠标,奇迹出现了,

    usb 1-1: new low speed USB device using s3c2410-ohci and address 3

    usb 1-1: New USB device found, idVendor=1bcf, idProduct=05ca

    usb 1-1: New USB device strings: Mfr=0, Product=2, SerialNumber=0

    usb 1-1: Product: 2.4GHz 2way RF Receiver

    usb 1-1: configuration #1 chosen from 1 choice

    input: 2.4GHz 2way RF Receiver as /class/input/input1

    generic-usb 0003:1BCF:05CA.0001: input,hidraw0: USB HID v1.00 Keyboard [2.4GHz 2way RF Receiver] on usb-s3c24xx-1/input0

    input: 2.4GHz 2way RF Receiver as /class/input/input2

    generic-usb 0003:1BCF:05CA.0002: input,hiddev0,hidraw1: USB HID v1.00 Mouse [2.4GHz 2way RF Receiver] on usb-s3c24xx-1/input1

    识别出来了,OK,移植成功。之前在内核源码部分改了将近一天,但是还是不行。不知道有些人为什么改内核源码却成功了,唯一的解释就是内核的版本不同,可能会有一些差异,所以在这里我的建议是你先改内核源码,这个网上有很多介绍,如果改完了不行,就用我这里介绍的改u-boot的源码,你可以仔细阅读一些数据手册。

           我做这个移植,搞了将近两天,我从来没有想到问题是在bootloader上面,因为现在在准备考研阶段,也就是没事随便搞搞,今天上午,差点就放弃了,去看考研书去了。当初要是放弃了,真的,那么昨天的一天真就白花了,浪费了一天还啥都没搞明白,所以又坚持了一下,总算搞定了,所以凡事都要不要轻言放弃,想放弃的时候想想当初为何走到这一步……

           PS:我们的荣誉不是在于永远成功,而是在于失败和绝望时能找到重新站起来的希望,勇敢的面对困难战胜困难。

                                                                                                                   

                                                                                                             冰雪王爵.obj

                                                                                                             2014年6月10日

  • 相关阅读:
    「Kafka」Kafka中offset偏移量提交
    「Flink」Flink中的时间类型
    Hash存储模型、B-Tree存储模型、LSM存储模型介绍
    「Flink」RocksDB介绍以及Flink对RocksDB的支持
    「Flink」理解流式处理重要概念
    「Flink」Flink 1.9 WebUI运行作业界面分析
    「Spark」Spark SQL Thrift Server运行方式
    「Flink」配置使用Flink调试WebUI
    Django基础篇之简介和项目创建
    在python文件中操作django orm提示环境变量设置问题
  • 原文地址:https://www.cnblogs.com/crazywangzx/p/3780674.html
Copyright © 2011-2022 走看看