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盘等设备
最底部是一个USB主控制器,这是一个硬件,在芯片里面都会带有的。为了让这个主控制器工作起来,Linux需要有一个USB主控制器驱动。
为了方便用户设计USB设备驱动,Linux内核里面实现了一些USB核心,这里面主要是一些Linux协议之类的。
USB设备驱动就是针对插入到Linux主机上的设备来设计的。
另一种模型是设备端软件架构,这里运行Linux的设备变成了一个USB设备,它和PC机连接起来。
同样它需要USB控制器硬件。同时需要一个UDC驱动来实现Linux设备作为USB设备。在Linux内核中提供了一些Gadget API来方便用户实现Gadget驱动。Gadget驱动是用来干嘛的呢?它是用来实现把Linux设备变成一个USB网卡、串口的。
Mass Storage驱动体验
首先选择主控制器驱动
然后选择设备驱动,选择USB support里面的大容量块设备:
需要支持热插拔:
设备驱动类型:
U盘还是一个FLASH设备,需要选择这些:
选择支持的文件系统和语言:
然后编译内核:
#make uImage ARCH=arm CROSS_COMPILE=arm-linux-
将内核代码下载到开发板并运行后插入U盘,提示如下:
提示生成了一个uba1的设备文件,这个就是U盘的设备文件了,把它挂在到mnt目录下:
#mount /dev/uba1 /mnt/
查看U盘的内容:
这个就是我的U盘里面的内容了,但是很奇怪为什么选择了utf-8,显示中文还是乱码。查了一些资料也没有解决,先放着吧。