折腾了好几天,终于把Linux Gadget设备驱动搞得有点入门了。
以前看的那个把mini2440当做鼠标的那个驱动程序http://www.arm9home.com/bbs/read.php?tid-2538.html
真的有点误导。他说一个晚上就搞定了,这是让我汗颜的水平。
里真正的一线开发工程师的差距还很大啊
终于有点明白 /driver/usb/Gadget 下的源码作用了,妈的,
以前还总是在内核已经有一个驱动占用了usb slave的时候还强行加载那个模拟鼠标的驱动,
看着insmod: cannot insert 'zebra_mouse.ko': Device or resource busy 很抓狂
其实只要把usb slave口的线拔下再插上,这才能触发USB设备识别
华清远见大牛老师刘洪涛写的
http://blog.csdn.net/hongtao_liu/archive/2009/09/15/4555645.aspx
不知道能不能轮到他给我们上课,看了第三期驱动课表,只有10多天,唉
那个fs2410开发板暂时拿不到手,那就在mini2440上玩玩吧
重新编译内核(2.6.29)
2.6.29内核
Device Drivers ---> USB support ---> USB Gadget Support --->
其中 USB Peripheral Controller 选 S3C2410 USB Device Controller
然后再选一个内核自带的Gadget驱动程序来做演示,这里就选 Ethernet Gadget (with CDC Ethernet support)
因为这个驱动不需要传入参数,所以给个Y而不是M,省事
make之后烧写zImage到mini1440
等到Linux完全启动之后,拔下usb slave口的接头再插上,就会弹出发现(RNDIS /Ethernet Gadget)设备的信息
只是这个RNDIS 驱动实在难搞,据说在 activesync 里有,但是我装了没有反应
只有自己下载了微软的RNDIS USB kit 2005,抽取出驱动并自己改了模板里的inf文件才算安装成功
我改好的RNDIS网卡驱动下载
http://download.csdn.net/source/1742242
inf文件里只改了vid和pid,这个可以从设备管理器里查到(即使还没有驱动程序)
这里vid是0525 pid a4a2
后来想想完全可以吧制造商什么的也改了,那应该很好玩
然后就多了一个网络连接,设置为ip 192.168.1.2 网关192.168.1.1 子网掩码255.255.255.0
此时这个网络连接还是断开状态
dnw连接开发板,ifconfig usb0 192.168.1.1 ,就会发现网络联通了
互ping可以,还可以http://192.168.1.1访问开发板里内置的web服务器
至于使用开发板让PC上网,这个应该是很多wm手机具备的功能,RNDIS我想就是为了这个目的设计的。
可以mini2440里没有iptable什么复杂的包转发程序,将usb0通过eth0实现转发,我还不能自己添加,只能到此为止了。