Linux USB gadget设备驱动解析(2)---驱动调试

关于Ubuntu的故事或对Ubuntu的感慨及心情
回复
lytxj
帖子: 7
注册时间: 2010-07-06 11:19

Linux USB gadget设备驱动解析(2)---驱动调试

#1

帖子 lytxj » 2010-07-06 11:28

一、背景知识
1、USB Mass Storage类规范概述
USB 组织在universal Serial Bus Mass Storage Class Spaceification 1.1版本中定义了海量存储设备类(Mass Storage Class)的规范,这个类规范包括四个
独立的子类规范,即:
1. USB Mass Storage Class Control/Bulk/Interrupt (CBI) Transport
2.USB Mass Storage Class Bulk-Only Transport
3.USB Mass Storage Class ATA Command Block
4.USB Mass Storage Class UFI Command Specification
前两个子规范定义了数据/命令/状态在USB 上的传输方法。Bulk- Only 传输规范仅仅使用Bulk 端点传送数据/命令/状态,CBI 传输规范则使用Control/Bulk/Interrupt 三种类型的端点进行数据/命令/状态传送。后两个子规范则定义了存储介质的操作命令。ATA 命令规范用于硬盘,UFI 命令规范是针对USB 移动存储。
Microsoft Windows 中提供对Mass Storage 协议的支持,因此USB 移动设备只需要遵循 Mass Storage 协议来组织数据和处理命令,即可实现与PC 机交换数据。而Flash 的存储单元组织形式采用FAT16 文件系统,这样,就可以直接在Windows的浏览器中通过可移动磁盘来交换数据了,Windows 负责对FAT16 文件系统的管理,USB 设备不需要干预FAT16 文件系统操作的具体细节。
USB(Host)唯一通过描述符了解设备的有关信息,根据这些信息,建立起通信,在这 些描述符中,规定了设备所使用的协议、端点情况等。因此,正确地提供描述符,是USB 设备正常工作的先决条件。
Linux-2.6.26内核中在利用USB gadget驱动实现模拟U盘时主要涉及到file_storage.c、s3c2410_udc.c等驱动文件(这些文件的具体结构,将在下一篇文章中描述)。此时我们想先从这些代码中找到USB描述描述符,从中确定使用的存储类规范,从而确定协议。确定通讯协议是我们调试的基础。
存储类规范是由接口描述符决定的。接口描述符各项的定义义如下:



其中,bInterfaceClass、bInterfaceSubClass、bInterfaceProtocol可以判断出设备是否是存储类,以及属于哪种存储子类和存储介质的操作命令。
在file_storage.c文件中,

/* USB protocol value = the transport method */
#define USB_PR_CBI 0x00 // Control/Bulk/Interrupt
#define USB_PR_CB 0x01 // Control/Bulk w/o interrupt
#define USB_PR_BULK 0x50 // Bulk-only

/* USB subclass value = the protocol encapsulation */
#define USB_SC_RBC 0x01 // Reduced Block Commands (flash)
#define USB_SC_8020 0x02 // SFF-8020i, MMC-2, ATAPI (CD-ROM)
#define USB_SC_QIC 0x03 // QIC-157 (tape)
#define USB_SC_UFI 0x04 // UFI (floppy)
#define USB_SC_8070 0x05 // SFF-8070i (removable)
#define USB_SC_SCSI 0x06 // Transparent SCSI

......

http://www.hzlitai.com.cn/article/ARM11 ... /1746.html
lytxj
帖子: 7
注册时间: 2010-07-06 11:19

Re: Linux USB gadget设备驱动解析(2)---驱动调试

#2

帖子 lytxj » 2010-07-12 10:05

Linux2.6.28标准版介绍:

图片

ARMSYS6410_Linux2.6.28标准版详细配置

引导装载

(u-boot1.1.6) Bootloader
初始化并装载启动linux内核
支持与DNW软件配合USB下载
支持设置内核启动参数
支持映像文件的固化
Nand Boot,SD Boot
提供从Nandflash启动和SD卡启动两个版本

内核及设备驱动

1,采用2.6.28.6版本内核
2,系统主频:533MHz
3,4路串口驱动(ttySAC0~3)
4,256M NandFlash驱动
5,1路10/100M以太网控制器驱动(DM9000)
6,2 ×5用户按键驱动
7,RTC实时时钟驱动
8,1路USB Host驱动(USB1.1)支持优盘、鼠标等
9,2路SD/MMC卡座驱动,支持热插拔
10,音频设备(WM9714),支持耳机和扬声器放音,音量可调
11,液晶(支持立宇泰电子TFT型液晶屏系列)驱动
12,支持4线触摸屏
13,支持H.263/264,MPEG4,VC-1编码和解码
14,支持JPEG图片的编解码
15,支持Post Processor
16,支持TV OUT
17,支持2D/3D
18,支持Camera(OV9650)
19,支持视频和JPEG编码
20,支持Watchdog

文件系统
支持/CRAMFS/EXT2/FAT/NFS/InitRAMFS /JFFS2/YAFFS2等文件系统
根文件系统采用NFS、YAFFS2、CRAMFS

NFS Client
NFS网络文件系统客户端

编译器
cross-4.2.2-eabi.tar.bz2

网络服务 TCP/IP
完整的TCP/IP协议
Telnet服务器
FTP客户端服务
Telnet远程登录
提供ifconfig,inetd等网络配置和服务程序
使用ping检查系统

基本命令
Busybox
Linux常用命令

触摸屏校准工具
TslibV1.4
触摸屏校准工具

图形界面
Qtpia2.2.0
图形界面系统。Trolltech 开发的用于嵌入式 Linux 的图形用户界面PDA版系统,支持浏览器,Medialplay播放器,文件管理器等等。

测试程序
1,视频硬件解码测试(H.263/H.264,MPEG4,VC-1格式)
2,多种视频格式同时解码(4窗口)测试
3,JPEG图像解码测试
4,摄像头预览和H.264编码测试
5,摄像头预览和JPEG编码测试
6,摄像头预览和MFC解码
7,视频解码TVOUT输出测试
8,摄像头预览和TVOUT输出测试
9,触摸屏设备驱动测试与TSLIB校准
10,AC97音频设备驱动测试
11,键盘驱动测试
12,以太网口驱动测试(PING)
13,ttySAC0~3串口驱动测试
14,两路SD/MMC卡驱动测试
15,主USB接口设备驱动测试
lytxj
帖子: 7
注册时间: 2010-07-06 11:19

Re: Linux USB gadget设备驱动解析(2)---驱动调试

#3

帖子 lytxj » 2010-07-19 10:48

Ubuntu版本:

图片

ARMSYS6410_ubuntu 9.04相关资源

引导装载
(u-boot1.1.6)
Bootloader
初始化并装载启动linux内核
支持设置内核启动参数
提供从SD卡启动的版本

内核及设备驱动
采用2.6.29.1版本内核
系统主频:533MHz
4路串口驱动(ttySAC0~3)
256M NandFlash驱动
2×5用户按键驱动
1路SD/MMC卡座驱动
液晶(支持立宇泰电子TFT型液晶屏系列)驱动
支持4线触摸屏

文件系统
支持EXT3根文件系统

编译器
Arm-none-linux-gnueabi

图形界面
Lxde-ubuntu
lytxj
帖子: 7
注册时间: 2010-07-06 11:19

Re: Linux USB gadget设备驱动解析(2)---驱动调试

#4

帖子 lytxj » 2010-08-16 14:35

图片

系统丰富
dulv
帖子: 2
注册时间: 2011-10-27 9:02

Re: Linux USB gadget设备驱动解析(2)---驱动调试

#5

帖子 dulv » 2011-10-27 9:18

给力的技术文章,顶起来!
回复