Linux-USB驱动(4)-LinuxUSB系统架构
2017-08-12 20:21
330 查看
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设备看上去像一块网卡。
最底部是一个USB主控制器,这是一个硬件,在芯片里面都会带有的。为了让这个主控制器工作起来,Linux需要有一个USB主控制器驱动。
为了方便用户设计USB设备驱动,Linux内核里面实现了一些USB核心,这里面主要是一些Linux协议之类的。
USB设备驱动就是针对插入到Linux主机上的设备来设计的。
另一种模型是设备端软件架构,这里运行Linux的设备变成了一个USB设备,它和PC机连接起来。
同样它需要USB控制器硬件。同时需要一个UDC驱动来实现Linux设备作为USB设备。在Linux内核中提供了一些Gadget API来方便用户实现Gadget驱动。Gadget驱动是用来干嘛的呢?它是用来实现把Linux设备变成一个USB网卡、串口的。
然后选择设备驱动,选择USB support里面的大容量块设备:
需要支持热插拔:
设备驱动类型:
U盘还是一个FLASH设备,需要选择这些:
选择支持的文件系统和语言:
然后编译内核:
#make uImage ARCH=arm CROSS_COMPILE=arm-linux-
将内核代码下载到开发板并运行后插入U盘,提示如下:
提示生成了一个uba1的设备文件,这个就是U盘的设备文件了,把它挂在到mnt目录下:
#mount /dev/uba1 /mnt/
查看U盘的内容:
这个就是我的U盘里面的内容了,但是很奇怪为什么选择了utf-8,显示中文还是乱码。查了一些资料也没有解决,先放着吧。
选择这里的 Ethernet Gadget (S3C******)
然后选择:
由于上上附图选择的是模块,我们需要把模块编译一下:
#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机后设备管理器中会出多出来一个网卡。
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,显示中文还是乱码。查了一些资料也没有解决,先放着吧。
rndis驱动体验
选择这里的 Ethernet Gadget (S3C******)
然后选择:
由于上上附图选择的是模块,我们需要把模块编译一下:
#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机后设备管理器中会出多出来一个网卡。
相关文章推荐
- 一个直观感性的方法认识linux的系统驱动架构
- Linux 2.6.32系统中基于dm6467平台ASOC架构的音频驱动
- Linux SPI总线和设备驱动架构之一:系统概述
- Linux SPI总线和设备驱动架构之一:系统概述
- linux-usb软件系统架构
- Linux ALSA声卡驱动之一:ALSA系统架构
- 和菜鸟一起学linux总线驱动之初识USB系统结构
- Linux的USB-Serial驱动(从系统初始化到生成tty设备的全过程)
- 和菜鸟一起学linux总线驱动之初识USB系统结构
- Linux SPI总线和设备驱动架构之一:系统概述
- Linux 2.6.32系统中基于dm6467平台ASOC架构的音频驱动
- Linux系统下USB摄像头驱动开发
- Linux 2.6.32系统中基于dm6467平台ASOC架构的音频驱动
- 内核驱动进阶班-2-1(嵌入式linux系统架构)
- Linux系统LCD驱动架构分析
- Linux SPI总线和设备驱动架构之一:系统概述
- 部门、测试-一个直观感性的方法认识linux的系统驱动架构-by小雨
- Linux的USB-Serial驱动(从系统初始化到生成tty设备的全过程)
- Linux SPI总线和设备驱动架构之一:系统概述
- Linux 2.6.32系统中基于dm6467平台ASOC架构的音频驱动