现在的位置: 首页 > 综合 > 正文

uboot 中s3c2440 usb ohci 及u盘移植

2014年03月01日 ⁄ 综合 ⁄ 共 4038字 ⁄ 字号 评论关闭

因为boss的一个蛋疼项目,需要裸板运行。而且要求要有能够外接u盘的功能。最开始想自己写一个ohci 协议栈。看了两个月的usb协议的书,感觉看的懂,信心百赠。但是当实现起来时发现困难重重,个人认为无法实现。然后看各种代码,先看的是linux usb那些事,想从linux 内核里面扣一点代码出来加以利用,但是发现里面的水太深,看懂一份代码和实现一部分代码简直是两回事,并且linux里面盘根错节,依赖关系太多 ,根本不是裸板应付的了得。后来发现uboot 里有usb ohci的代码,感觉还不错,功能和依赖关系都不是强,扣代码应该是比较简单的,然后就着手看uboot的代码。
把uboot的代码理顺之后,我就开始犹豫是直接把文件移植过来还是只是参考,后来我选择了老实巴交的参考代码,打算自己实现一份ohci 协议。经历了差不多一个月,把uboot里ohci 及其相应的代码都读懂了,自己也实现了一个,但是当测试时发现驱动不了ohci,调试了很久也不行,当时十分的沮丧,觉得白忙活了一个月。程序员的悲剧啊

然后痛定思痛,打算直接吧uboot的代码移植过来,移植过程中也是错误百出,各种依赖各种编译不通过,折腾了很久把uboot的代码弄过来编译好了。结果发现还是无法运行,郁闷了很久,痛定思痛,认真分析原因。通过上网查找后发现时,uboot的usb必须在no mmu 的环境中运行。但是我的程序是直接下载到arm中运行的,无法禁止mmu。后来发现不是mmu的问题,而是mmu 中的 Dcache 的问题,禁止Dcache之后,usb 能够运行了。但是新问题又来了,只能识别出root hub,无法识别device。又是各种痛苦,各种调试(没有弄好jlink的调试,只有printf。。。),发现是自己的疏忽,我的代码默认是小端的,结果我移植过来的有一部分代码是默认大端的,我勒个去啊,太坑爹了。然后把修改成小端代码,ok
,能够识别设备了。 但是,但是,发现只能识别键盘和鼠标 无法识别u盘 。泥煤啊,我就是想用u盘啊,无法识别u盘我搞个毛????获得u盘的 descriptor时总是错误,错误码是0x5 ,设备无法响应,又是各种调试,各种跟踪代码,还是无果。最后我完全不修改uboot usb 部分的代码移植过来,当然有些lib函数和自己代码有出入,各种重定义各种修改,然后编译成功,但结局还是不行,然后调试了很久,突然注意到别人博客中说的一句 打印太多可能让程序错误,我一想ohci的协议里是需要注意时间的,然后我修改了 ochi里的hc_interrupt
中断处理中的延迟时间,当然还有其他一些,没想到这样就成功了。能够识别到u盘了!!!!!!!!!真是泪流满面啊。。。。。

后来移植u盘驱动  和part 及fat 相当的顺利,然后就测试成功。ok 终于可以向老师交差了 
回首历程,程序员是真心悲剧,花费了相当多的时间,还是各种悲剧。最后还是不是自己实现的代码,如果我最开始就移植uboot,我将节约多少时间啊

附录自己测试成功的代码,泪流满面啊
USB: scanning bus for devices... 2 USB Device(s) found
my_debug: usb_storage.c 211 usb_stor_scan
scanning bus for storage devices... my_debug: usb_storage.c 1073 usb_storage_probe
my_debug: usb_storage.c 1073 usb_storage_probe
my_debug: usb_storage.c 1213 usb_stor_get_info
my_debug: usb_storage.c 379 usb_stor_BBB_reset
my_debug: usb_storage.c 875 usb_inquiry
my_debug: usb_storage.c 465 usb_stor_BBB_comdat
my_debug: usb_storage.c 917 usb_test_unit_ready
my_debug: usb_storage.c 465 usb_stor_BBB_comdat
my_debug: usb_storage.c 465 usb_stor_BBB_comdat
my_debug: usb_storage.c 996 usb_stor_read
my_debug: usb_storage.c 917 usb_test_unit_ready
my_debug: usb_storage.c 465 usb_stor_BBB_comdat
my_debug: usb_storage.c 953 usb_read_10
my_debug: usb_storage.c 465 usb_stor_BBB_comdat
1 Storage Device(s) found

:>read
my_debug: usb_storage.c 996 usb_stor_read
my_debug: usb_storage.c 917 usb_test_unit_ready
my_debug: usb_storage.c 465 usb_stor_BBB_comdat
my_debug: usb_storage.c 953 usb_read_10
my_debug: usb_storage.c 465 usb_stor_BBB_comdat
my_debug: usb_storage.c 996 usb_stor_read
my_debug: usb_storage.c 917 usb_test_unit_ready
my_debug: usb_storage.c 465 usb_stor_BBB_comdat
my_debug: usb_storage.c 953 usb_read_10
my_debug: usb_storage.c 465 usb_stor_BBB_comdat
reading 1.txt
my_debug: usb_storage.c 996 usb_stor_read
my_debug: usb_storage.c 917 usb_test_unit_ready
my_debug: usb_storage.c 465 usb_stor_BBB_comdat
my_debug: usb_storage.c 953 usb_read_10
my_debug: usb_storage.c 465 usb_stor_BBB_comdat
my_debug: usb_storage.c 996 usb_stor_read
my_debug: usb_storage.c 917 usb_test_unit_ready
my_debug: usb_storage.c 465 usb_stor_BBB_comdat
my_debug: usb_storage.c 953 usb_read_10
my_debug: usb_storage.c 465 usb_stor_BBB_comdat
my_debug: usb_storage.c 996 usb_stor_read
my_debug: usb_storage.c 996 usb_stor_read
my_debug: usb_storage.c 996 usb_stor_read
my_debug: usb_storage.c 917 usb_test_unit_ready
my_debug: usb_storage.c 465 usb_stor_BBB_comdat
my_debug: usb_storage.c 953 usb_read_10
my_debug: usb_storage.c 465 usb_stor_BBB_comdat

11 bytes read
file content is: hello world   打印出文件里的内容 。hello world ,~~~~(>_<)~~~~ ,屌丝程序员啊
:>fat
my_debug: usb_storage.c 996 usb_stor_read
my_debug: usb_storage.c 917 usb_test_unit_ready
my_debug: usb_storage.c 465 usb_stor_BBB_comdat
my_debug: usb_storage.c 953 usb_read_10
my_debug: usb_storage.c 465 usb_stor_BBB_comdat
my_debug: usb_storage.c 996 usb_stor_read
my_debug: usb_storage.c 917 usb_test_unit_ready
my_debug: usb_storage.c 465 usb_stor_BBB_comdat
my_debug: usb_storage.c 953 usb_read_10
my_debug: usb_storage.c 465 usb_stor_BBB_comdat
my_debug: usb_storage.c 996 usb_stor_read
my_debug: usb_storage.c 917 usb_test_unit_ready
my_debug: usb_storage.c 465 usb_stor_BBB_comdat
my_debug: usb_storage.c 953 usb_read_10
my_debug: usb_storage.c 465 usb_stor_BBB_comdat
my_debug: usb_storage.c 996 usb_stor_read
my_debug: usb_storage.c 917 usb_test_unit_ready
my_debug: usb_storage.c 465 usb_stor_BBB_comdat
my_debug: usb_storage.c 953 usb_read_10
my_debug: usb_storage.c 465 usb_stor_BBB_comdat
11 1.txt
11 2.txt
11 3.txt

3 file(s), 0 dir(s)

抱歉!评论已关闭.