Linux USB gadget设备驱动解析(2) 驱动调试
本文主要把在实现“linux模拟U盘功能”过程中的一些调试过程记录下来,并加以解析。
一、背景知识
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等驱
相关文档:
一、首先要准备必须的软件,我选用的版本如下:
apr-1.4.2,下载地址:http://archive.apache.org/dist/apr/
apr-util-1.3.9,下载地址:http://archive.apache.org/dist/apr/
apache(httpd-2.2.9),下载地址:http://archive.apache.org/dist/httpd/
SQLite-2.6.23.1,下载地址:http://www.sqlite.org/
neon- ......
which 语法 which command 说明 依序从path环境变量所列的目录中找出command的位置,并显示完整路径的名称。在找到第一个符合条件的程序文件时,就立刻停止搜索,省略其余未搜索目录。 范例,找出ls命令的程序文件的位置: which ls 系统输出: /usr/bin/ls whereis 语法 whereis [option] name 说明 找出特定 ......
今天的事太多,没有认真的完成任务,不过把服务器端的文件传输做好了!
明天把服务器端的代码集成起来测试一下,并把网络客户端程序做好!
把代码贴出来吧!便于保存!
头文件:server_udpsocket.h
#ifndef _SERVER_UDPSOCKET_H_
#define _SERVER_UDPSOCKET_H_
#include <stdio.h>
#include <stdlib.h>
......
网络设备结构体:
struct sk_bufff{}
它的定义在linux/skbuff.h中
sk_buff 中有三部分协议头分别命名为“h,nh,mac”
h:为传输层协议(ICMP,IGMP)。
nh:为网络层协议头。
mac:链路层协议头。 三个协议头是使用联合体的,原因是,协议本身是互斥的。 结构体的定义可以看头文件或是《内核 ......
在FC8中默认安装的有mysql,没有的话可以很方便的安装下。
默认的mysql的include文件目录在/usr/include/mysql
默认的mysql的lib文件夹在/usr/lib/mysql
这两个目录在我们编译时候需要到。
我的测试用的C代码为:
#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>
#define CONN_HOST ......