zero与usb-skeleton结合测试
来源:互联网 发布:三个月雅思6.5知乎 编辑:程序博客网 时间:2024/06/06 08:58
主机端的配置:我们在host端(可以是一个装了linux的pc,或其他嵌入式设备也可以,但需要有usb host controller),在host端安装驱动usb-skeleton,这个驱动是主机端的驱动。我们后面再分析这个驱动。首先,需要编译usb-skeleton,在编译之前需要把修改两个宏。
/* Define these values to match your devices */#define USB_SKEL_VENDOR_ID 0xfff0#define USB_SKEL_PRODUCT_ID 0xfff0</span>
将这两个宏修改成对应于zero.c中的数。其中,在zero.c中有如下的定义:
#define DRIVER_VENDOR_NUM0x0525/* NetChip */#define DRIVER_PRODUCT_NUM0xa4a0/* Linux-USB "Gadget Zero" */
因此,这两个数需要相同(在usb设备插入,枚举时候会根据vendor id 和 product id给device找相应的host端的驱动)因此,需要将将USB_SKEL_VENDOR_ID 改成 0x0525,USB_SKEL_PRODUCT_ID改成0xa4a0。
编译模块usb-skeleton之后,生成usb-skeleton.ko。在主机端加载这个模块。另外主机还需要加载usb-core.ko、usb-ohci.ko等。会生成文件/dev/skel0.这个文件就代表了mini2440 。我们可以通过读写/dev/skel0,从而通过usb给mini2440发送数据。
gadget端的配置:gadget就是我们的mini2440。我们在gadget端需要安装的驱动有s3c2410_udc.ko和g_zero.ko。当然也可以把他们编译到内核中,直接烧写内核。我们需要加载这两个驱动,首先加载s3c2410_udc.ko。然后insmod g_zero.ko。另外,我们想让gadget起到的作用是loopback的作用,因此,这个需要在加载驱动时进行配置。方式是这样的: insmod g_zero.ko loopdefault=1 ,
其中loopdefault这个参数是用来将loopback configuration 作为设备的默认配置的。这样加载之后,从设备端的配置也结束了。
在host端执行#echo helloworld > /dev/skel0,在zero.c的ep的回调函数中添加打印语句可以看到收到的数据。然后在host端执行 #cat /dev/skel0
helloworld
我们又读回了helloworld。
usb-skeleton通过构造read和write的方法,直接往设备节点写数据就可以通过构造urb将数据发送出去,与g_zero那边的loopback配合来完成数据回环显示。linux就是喜欢这种有echo的功能,在UNP中一个echo server的实现讲了整整一部书。
这样,我们的这个测试例就结束了。
另外,补充一个调试手段。和网络变成一样,usb通讯的一个有效调试手段也是抓包。在windows上面通过usb hound可以抓usb包。在linux上面我们通过usb mon来抓包。貌似wireshark也有抓usb包的功能,我没有用过。通过usb mon抓包,需要对内核进行相应的配置选项。然后,
#modprobe usbmon
再进入 /sys/kenel/debug/usb_mon 就可以看到各个usb host controller的对应项了。通过cat 1u 就可以看到第1个Host controller收发的包。
另外,lsusb -t也是很不错的工具,可以看到usb 设备的各种描述符。通过
转自:http://www.xuebuyuan.com/1494145.html
- zero与usb-skeleton结合测试
- zero与usb-skeleton结合测试
- mini2440 usb device controller 驱动的分析--gadget设备(五)--zero和usb-skeleton测试例
- usb-skeleton
- usb-skeleton.c简介
- LDD3之usb-skeleton
- usb-skeleton分析
- usb-skeleton相关分析
- LDD3之usb-skeleton
- usb-skeleton.c
- usb-skeleton.c
- USB Skeleton driver 分析记录
- usb设备驱动程序范例usb-skeleton.c
- Usb设备驱动4:usb-skeleton例程
- 分析usb驱动框架(usb-skeleton)
- usb-skeleton.c 之 08---skel_open
- usb-skeleton.c 之 09---skel_release
- usb-skeleton.c 之 10---skel_flush
- Python设置默认编码
- Java高新技术:泛型
- Big Number(1018)
- FFplay的原理(1)
- 封装的评分星星类
- zero与usb-skeleton结合测试
- 文件的上传
- iwconfig用法
- 和码5.0版的说明
- MapReduce(十五): 从HDFS读取文件的源码分析
- 面试常见题之sizeof与strlen的区别
- CGContext一些绘图属性
- python+Django+pycharm 开发环境搭建
- dnsmasq用法