Linux下USB从设备使用gadget API
一、USB从设备驱动介绍
USB总线上主要有三类设备:主控制器(Host Controller, such as
EHCI、UHCI、OHCI)、集线器(hub)和设备(device)。Host controller(HC)负责总线的管理
,
是总线的指挥官,总线上一切传输都是由HC发起的,支持OTG的Device也能发起传输;Hub是总线的节点,用来扩展总线上可接入设备的数量,对于驱
动来说是透明的;Device就是各种各样的设备了,每个设备都有自己的功能,比如U盘、USB摄像头等等。
Linux下主机端USB设备的驱动(device driver)编写的资料有很多,LDD3中有相应的介绍。主要是通过内核中USB
core这个模块与设备交互。本文只介绍运行Linux的嵌入式USB设备驱动的编写。因为Host端已经
使
用了device driver一词,为了避免混淆,使用USB gadget driver一次表示从设备驱动。In USB protocol
interactions, the device driver is the master (or client driver) and the
gadget driver is the slave (or function driver).
Linux USB gadget driver API定义了一个通用的gadget driver的接口,gadget
driver通过API与底层USB controller driver通信。该API屏蔽了底层硬件的不同,使gadget
driver注重功能的实现,尽量与硬件无关。Slave端系统的架构如下图所示:
其中,gadgetfs提供给用户空间程序直接与USB device controller交互的能力。
二、相关资料
USB gadget API Layer的相关资料:
1. http://www.linux-usb.org/gadget/
2. 内核中/KernelDoc/gadget/目录下的文档
3.最重要的就是/include/linux/usb_gadget.h文件,该文件中有gadget
API接口数据结构和方法的详细定义及注释。
Gadget Driver的例子:
4. 内核/drivers/usb/gadget/目录下有一些gadget
driver的例子,zero.c为最简单的例子,file_storage.c是存储设备的gadget driver。
三、gadget API
要了解gadget API,只需要理解头文件(usb_gadget.h)中几个重要的数据结构就可以了。详细的字段介绍看h文件注释。
(1)
struct usb_gadget {
const struct usb_gadget_ops *ops;
struct usb_ep *ep0;
struct list_head ep_list;
enum usb_device_speed speed;
unsigned
相关文档:
详情请访问:http://deb.opera.com/
Opera
官方源:
最新的版本:
deb http://deb.opera.com/opera/ unstable non-free
或者选择稳定的版本:
deb http://deb.opera.com/opera/ stable non-free
(修改sources.list文件中源的列表,添加Opera 源)命令:
sudo gedit /etc/apt/sources.list
(备份当前的源列表) ......
系统
# uname -a # 查看
内核/操作系统/CPU信息
# head -n
1 /etc/issue # 查看
操作系统版本
# cat /proc/cpuinfo # 查看
CPU信息
#
hostname &nb ......
一早上都是弄在LINUX下挂载usb,很无语,几乎找遍了所有网上人家介绍的方法,可对于一个新手来说,他们大都讲的不清楚不楚,最后还是觉得这个比较方法比较成功,所以贴出来大家分享,说不定以后还能用得到
1.USB移动存储设备通常被识别为sda1,具体可以通过fdisk -l命令查询。一般外挂点的子目录都是建立在/mnt里面的 使用 ......
在32位平台上编译动态库没有啥问题,拿到x86_64位平台上编译时出现了问题。
relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
照着提示编译代码的时候加入 -fPIC选项就ok.
......
在fedora下解压.deb文件(没安装dpkg):
ar p filename.deb data.tar.gz | tar zxvf -
其它压缩文件的解压
#tar xv file.a
#uncompress file.Z
#gunzip file.gz
#bunzip2 file.bz2
#tar xvZf file.tar.Z
#compress -dc file.tar.Z | tar xvf -
#tar xvzf file.tar.gz
#gzip -dc file.tar.gz | tar ......