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

Linux 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. 配置支持热插拔
    在这里插入图片描述

  2. 配置SCSI
    在这里插入图片描述
    进行如下配置:
    在这里插入图片描述

  3. 配置USB支持
    在这里插入图片描述
    配置如下:
    在这里插入图片描述

  4. 配置文件系统
    (1)DOS配置如下
    在这里插入图片描述
    (2)Partition Type(分区表)配置如下:
    在这里插入图片描述
    (3)Native Language(语言支持)配置如下
    在这里插入图片描述

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

		make uImage ARCH=arm CROSS_COMPILE=arm-linux-

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

      	tftp  c0008000 uImage
      	bootm c0008000

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

		root@Friend-Arm#: mount /dev/...   /mnt/
		 root@Friend-Arm#: cd /mnt
		 root@Friend-Arm#: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 

进行如下配置
在这里插入图片描述
在这里插入图片描述
进行内核配置完成后,重新编译内核

		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 

进行如下配置
在这里插入图片描述
在这里插入图片描述
配置完成后就可以编译内核和内核模块:

		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 Gadget Support
在这里插入图片描述
在这里插入图片描述

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

		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 命令查看,如下图
在这里插入图片描述

最后把开发板的 miniUSB 口的线与PC机进行连接,在SecureCRT 中打开一个串口终端进行测试,测试步骤如下 gif 所示
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41782149/article/details/89288915
usb