欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

USB驱动程序设计之二(Linux USB架构及相关的USB协议)

程序员文章站 2022-07-14 10:54:12
...

Linux USB架构

USB驱动程序设计之二(Linux USB架构及相关的USB协议)

Mass Storage

开发板作为Host 主机时,在开发板中插入U盘进行试验。

一、Mass storage 介绍
​mass storage 是USB协议中的一部分, 是大容量存储器或者海量存储器的意思。我们的U盘就是利用的这个协议开发和制作的。
遵从这个协议,可以让我们的USB从设备连接到USB Host设备上,并能够执行文件的传输(存储和读写等)。一般的操作系统都集成了这个协议的驱动,所以我们的U盘等存储设备插入到PC上时,才不用安装驱动。

二、配置支持mass storage的linux内核
在linux内核目录中执行:

	 make menuconfig ARCH=arm 

进入General Setup—>[*]configure standard kernel features
配置如下:

  1. 配置支持热插拔
    USB驱动程序设计之二(Linux USB架构及相关的USB协议)

  2. 配置SCSI
    USB驱动程序设计之二(Linux USB架构及相关的USB协议)
    进行如下配置:
    USB驱动程序设计之二(Linux USB架构及相关的USB协议)

  3. 配置USB支持
    USB驱动程序设计之二(Linux USB架构及相关的USB协议)
    配置如下:
    USB驱动程序设计之二(Linux USB架构及相关的USB协议)

  4. 配置文件系统
    (1)DOS配置如下
    USB驱动程序设计之二(Linux USB架构及相关的USB协议)
    (2)Partition Type(分区表)配置如下:
    USB驱动程序设计之二(Linux USB架构及相关的USB协议)
    (3)Native Language(语言支持)配置如下
    USB驱动程序设计之二(Linux USB架构及相关的USB协议)

进行内核配置完成后,重新编译内核

		make uImage ARCH=arm CROSS_COMPILE=arm-linux-

会在目录 arch/arm/boot/ 下生成uImage文件,之后把文件拷贝到tftpboot(tftp服务器共享目录)目录下,在uboot下执行

      	tftp  c0008000 uImage
      	bootm c0008000

进行内核下载和运行。插入u盘进行挂载和查看盘内容试验。

		aaa@qq.com#: mount /dev/...   /mnt/
		 aaa@qq.com#: cd /mnt
		 aaa@qq.com#:ls

USB HID(Human Interface Device)

一、USB HID介绍
USB HID:是Human Interface Device的缩写,由其名称可以了解HID设备是直接与人交互的设备,例如键盘、鼠标与游戏杆等。不过HID设备并不一定要有人机接口,只要符合HID类别规范的设备都是HID设备。

二、配置linux内核支持USB HID

在linux内核目录中执行:

	 make menuconfig ARCH=arm 

进行如下配置
USB驱动程序设计之二(Linux USB架构及相关的USB协议)
USB驱动程序设计之二(Linux USB架构及相关的USB协议)
进行内核配置完成后,重新编译内核

		make uImage ARCH=arm CROSS_COMPILE=arm-linux-

会在目录 arch/arm/boot/ 下生成uImage文件,之后把文件拷贝到tftpboot(tftp服务器共享目录)目录下,在uboot下执行

      	tftp  c0008000 uImage
      	bootm c0008000

进行内核下载和运行。插入鼠标会在 /dev/ 目录下有 mouse0 设备

RNDIS

一、RNDIS介绍

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

二、配置linux内核支持RNDIS
(开发板作为运行linux的设备)

可以把开发作为一块网卡开始用
具体内核配置如下:

在linux内核目录中执行:

	 make menuconfig ARCH=arm 

进行如下配置
USB驱动程序设计之二(Linux USB架构及相关的USB协议)
USB驱动程序设计之二(Linux USB架构及相关的USB协议)
配置完成后就可以编译内核和内核模块:

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

拷贝uImage到 /home/xxx/tftpboot下

		cp arch/arm/boot/uImage /home/xxx/tftpboot/

拷贝g_ether.ko到根文件系统目录下

		cp  drivers/usb/gadget/g_ether.ko /home/xxx/miniTest/rootfs/  

之后在uboot下执行 来下载uImage和运行内核

      	tftp  c0008000 uImage
      	bootm c0008000

插入miniUSB线xia 到 PC 机,为USB安装通过相应的驱动(此时,会发现mini6410开发板USB设备是作为一块网卡来进行使用),在linux下也会发现多了一块网卡,执行

			ifconfig usb0 192.168.10.222

进行IP地址上配置,再在PC机上进行网卡IP配置(同一网段),然后就可以通过 ping 命令来进行PC 和 mini6410开发板通信了。

USB CDC/ACM

介绍
USB的CDC类是USB通信设备类 (Communication Device Class)的简称。CDC类是USB组织定义的一类专门给各种通信设备(电信通信设备和中速网络通信设备)使用的USB子类。
ACM(Abstract Control Model)
CDC/ACM其实是一种协议,通过这种协议,把USB模拟成一个串口。

配置linux内核支持CDC ACM

在linux内核目录下执行

		make menuconfig ARCH=arm

USB驱动程序设计之二(Linux USB架构及相关的USB协议)
再选中USB Gadget Support
USB驱动程序设计之二(Linux USB架构及相关的USB协议)
USB驱动程序设计之二(Linux USB架构及相关的USB协议)

之后重新编译内核和内核模块

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

之后拷贝内核和内核模块到 开发板的根目录下:

内核在 arch/arm/boot/ 目录下,内核模块为 drivers/usb/gadget/g_serial.ko

最后在开发板中安装内核模块

insmod g_serial.ko

会在 /dev/ 下多出来一个设备文件 ttyGS0
通过 ls -l /dev/ttyGS0 命令查看,如下图
USB驱动程序设计之二(Linux USB架构及相关的USB协议)

最后把开发板的 miniUSB 口的线与PC机进行连接,在SecureCRT 中打开一个串口终端进行测试,测试步骤如下 gif 所示
USB驱动程序设计之二(Linux USB架构及相关的USB协议)