Linux-USB驱动(4)-LinuxUSB系统架构

时间:2024-05-31 08:37:16

Linux下的USB系统架构我们分3小节来学习:

1、软件系统架构

2、MassStorage驱动体验,mass storage 是USB协议中的一部分, 是大容量存储器或者海量存储器的意思。我们的U盘就是利用的这个协议开发和制作的。

3、RNDIS驱动体验,rndis既是RemoteNDIS,既是远程网络驱动接口规范。Remote Network Driver Interface Specification,既是RemoteNDIS,既是远程网络驱动接口规范。基于USB实现RNDIS实际上就是TCP/IP over USB,就是在USB设备上跑TCP/IP,让USB设备看上去像一块网卡。


软件系统架构

软件的系统架构分为2中,一种是主机架构,就是说运行Linux的设备是一个主机,可以插入U盘等设备

Linux-USB驱动(4)-LinuxUSB系统架构

最底部是一个USB主控制器,这是一个硬件,在芯片里面都会带有的。为了让这个主控制器工作起来,Linux需要有一个USB主控制器驱动。

为了方便用户设计USB设备驱动,Linux内核里面实现了一些USB核心,这里面主要是一些Linux协议之类的。

USB设备驱动就是针对插入到Linux主机上的设备来设计的。


另一种模型是设备端软件架构,这里运行Linux的设备变成了一个USB设备,它和PC机连接起来。

Linux-USB驱动(4)-LinuxUSB系统架构

同样它需要USB控制器硬件。同时需要一个UDC驱动来实现Linux设备作为USB设备。在Linux内核中提供了一些Gadget API来方便用户实现Gadget驱动。Gadget驱动是用来干嘛的呢?它是用来实现把Linux设备变成一个USB网卡、串口的。

Mass Storage驱动体验

首先选择主控制器驱动

Linux-USB驱动(4)-LinuxUSB系统架构


然后选择设备驱动,选择USB support里面的大容量块设备:

Linux-USB驱动(4)-LinuxUSB系统架构


需要支持热插拔:

Linux-USB驱动(4)-LinuxUSB系统架构


设备驱动类型:
Linux-USB驱动(4)-LinuxUSB系统架构



U盘还是一个FLASH设备,需要选择这些:
Linux-USB驱动(4)-LinuxUSB系统架构


选择支持的文件系统和语言:

Linux-USB驱动(4)-LinuxUSB系统架构



然后编译内核:

#make   uImage ARCH=arm CROSS_COMPILE=arm-linux-

将内核代码下载到开发板并运行后插入U盘,提示如下:

Linux-USB驱动(4)-LinuxUSB系统架构

提示生成了一个uba1的设备文件,这个就是U盘的设备文件了,把它挂在到mnt目录下:

#mount  /dev/uba1  /mnt/

查看U盘的内容:

Linux-USB驱动(4)-LinuxUSB系统架构


这个就是我的U盘里面的内容了,但是很奇怪为什么选择了utf-8,显示中文还是乱码。查了一些资料也没有解决,先放着吧。

rndis驱动体验

Linux-USB驱动(4)-LinuxUSB系统架构
选择这里的 Ethernet Gadget (S3C******)

然后选择:
Linux-USB驱动(4)-LinuxUSB系统架构
由于上上附图选择的是模块,我们需要把模块编译一下:
#make  ARCH=arm  CROSS_COMPILE=arm-linux-

把生成的代码拷贝到开发板中:
# cp   drivers/usb/gadget/g_ether.ko

然后安装这个模块:
#insmod g_ether.ko

然后设置USB的IP地址,执行:
#ifconfig   usb0  192.168.XX.XX

接入USB到PC机后设备管理器中会出多出来一个网卡。