先决条件
小工具串行驱动程序的多个版本适用于 2.4 Linux 内核,但本文档假定您在 2.6 Linux 内核中使用 2.3 或更高版本的小工具串行驱动程序。
本文档假设您熟悉 Linux 和 Windows,并知道如何配置和构建 Linux 内核、运行标准实用程序、使用 minicom 和 HyperTerminal 以及如何使用 USB 和串行设备。还假设您将 Linux 小工具和 USB 驱动程序配置为模块。
使用 2.3 版驱动程序,主要和次要设备节点不再是静态定义的。基于 Linux 的系统应在 /sys 中安装 sysfs,并使用“mdev”(在 Busybox 中)或“udev”使 /dev 节点与 sysfs /sys/class/tty 文件匹配。
概述
小工具串行驱动程序是 Linux USB 小工具驱动程序,即 USB 设备端驱动程序。它运行在具有 USB 设备端硬件的 Linux 系统上;例如,PDA、嵌入式 Linux 系统或带有 USB 开发卡的 PC。
小工具串行驱动程序通过 USB 与主机 PC 上运行的 CDC ACM 驱动程序或通用 USB 串行驱动程序进行通信:
Host
--------------------------------------
| Host-Side CDC ACM USB Host |
| Operating | or | Controller | USB
| System | Generic USB | Driver |--------
| (Linux or | Serial | and | |
| Windows) Driver USB Stack | |
-------------------------------------- |
|
|
|
Gadget |
-------------------------------------- |
| Gadget USB Periph. | |
| Device-Side | Gadget | Controller | |
| Linux | Serial | Driver |--------
| Operating | Driver | and |
| System USB Stack |
--------------------------------------
在设备端Linux系统上,小工具串行驱动看起来就像一个串行设备。
在主机端系统上,小工具串行设备看起来像一个符合 CDC ACM 的类设备或一个具有批量输入和批量输出端点的简单的供应商特定设备,并且它与其他串行设备的处理方式类似。
主机端驱动程序可能是任何符合 ACM 标准的驱动程序,也可能是任何能够与具有简单批量输入/输出接口的设备通信的驱动程序。Gadget serial 已使用 Linux ACM 驱动程序、Windows usbser.sys ACM 驱动程序和 Linux USB 通用串行驱动程序进行了测试。
在小工具串行驱动程序和主机端 ACM 或通用串行驱动程序运行的情况下,您应该能够在主机和小工具端系统之间进行通信,就像它们通过串行电缆连接一样。
小工具串行驱动程序仅提供简单的不可靠数据通信。它还不能处理流量控制或普通串行设备的许多其他功能。
安装小工具串行驱动程序
要使用小工具串行驱动程序,您必须将 Linux 小工具端内核配置为“支持 USB 小工具”、“USB 外设控制器”(例如 net2280)和“串行小工具”驱动程序。配置内核时,所有这些都列在“USB 小工具支持”下。然后重建并安装内核或模块。
然后,您必须加载小工具串行驱动程序。要将其作为 ACM 设备加载(建议用于互操作性),请执行以下操作:
modprobe g_serial
要将其加载为特定于供应商的批量输入/输出设备,请执行以下操作:
modprobe g_serial use_acm=0
这还将自动加载底层小工具外围设备控制器驱动程序。每次重新启动小工具端 Linux 系统时都必须执行此操作。如果需要,您可以将其添加到启动脚本中。
您的系统应使用 mdev(来自 busybox)或 udev 来创建设备节点。设置完此小工具驱动程序后,您应该会看到 /dev/ttyGS0 节点:
# ls -l /dev/ttyGS0 | cat
crw-rw---- 1 root root 253, 0 May 8 14:10 /dev/ttyGS0
#
请注意,主编号(上面的 253)是系统特定的。如果您需要手动创建 /dev 节点,则要使用的正确编号位于 /sys/class/tty/ttyGS0/dev 文件中。
当您早期链接此小工具驱动程序时(甚至可能是静态链接),您可能希望设置一个 /etc/inittab 条目以在其上运行“getty”。/dev/ttyGS0 线路应像大多数其他串行端口一样工作。
如果将 gadget serial 加载为 ACM 设备,则需要在主机端使用 Windows 或 Linux ACM 驱动程序。如果将 gadget serial 加载为批量输入/输出设备,则需要在主机端使用 Linux 通用串行驱动程序。按照以下相应说明安装主机端驱动程序。
安装 Windows Host ACM 驱动程序
要使用 Windows ACM 驱动程序,您必须拥有支持所有最新版本 Windows 的“linux-cdc-acm.inf”文件(随本文档提供)。
当小工具串行驱动程序已加载,并且 USB 设备通过 USB 电缆连接到 Windows 主机时,Windows 应该会识别小工具串行设备并要求驱动程序。告诉 Windows 在包含“linux-cdc-acm.inf”文件的文件夹中查找驱动程序。
例如,在 Windows XP 上,当首次插入 Gadget 串行设备时,“发现新硬件向导”会启动。选择“从列表或指定位置安装(高级)”,然后在下一个屏幕上选择“将此位置包含在搜索中”并输入路径或浏览到包含“linux-cdc-acm.inf”文件的文件夹。Windows 会抱怨 Gadget Serial 驱动程序未通过 Windows Logo 测试,但选择“仍然继续”并完成驱动程序安装。
在 Windows XP 中,在“设备管理器”(在“控制面板”、“系统”、“硬件”下)中展开“端口(COM 和 LPT)”条目,您应该会看到“Gadget Serial”列为其中一个 COM 端口的驱动程序。
要卸载“Gadget Serial”的 Windows XP 驱动程序,请右键单击“设备管理器”中的“Gadget Serial”条目,然后选择“卸载”。
安装Linux主机ACM驱动程序
要使用 Linux ACM 驱动程序,您必须将 Linux 主机端内核配置为“支持主机端 USB”和“USB 调制解调器(CDC ACM)支持”。
一旦加载了小工具串行驱动程序,并且使用 USB 电缆将 USB 设备连接到 Linux 主机,主机系统就应该能够识别小工具串行设备。例如,命令:
cat /sys/kernel/debug/usb/devices
应该显示类似这样的内容:
T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#= 5 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=02(comm.) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0525 ProdID=a4a7 Rev= 2.01
S: Manufacturer=Linux 2.6.8.1 with net2280
S: Product=Gadget Serial
S: SerialNumber=0
C:* #Ifs= 2 Cfg#= 2 Atr=c0 MxPwr= 2mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=01 Driver=acm
E: Ad=83(I) Atr=03(Int.) MxPS= 8 Ivl=32ms
I: If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=acm
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
如果主机端 Linux 系统配置正确,ACM 驱动程序应该会自动加载。命令“lsmod”应该显示“acm”模块已加载。
安装 Linux 主机通用 USB 串行驱动程序
要使用 Linux 通用 USB 串行驱动程序,您必须将 Linux 主机端内核配置为“支持主机端 USB”、“USB 串行转换器支持”和“USB 通用串行驱动程序”。
一旦加载了小工具串行驱动程序,并且使用 USB 电缆将 USB 设备连接到 Linux 主机,主机系统就应该能够识别小工具串行设备。例如,命令:
cat /sys/kernel/debug/usb/devices
应该显示类似这样的内容:
T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#= 6 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=ff(vend.) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0525 ProdID=a4a6 Rev= 2.01
S: Manufacturer=Linux 2.6.8.1 with net2280
S: Product=Gadget Serial
S: SerialNumber=0
C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr= 2mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=serial
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
您必须加载 usbserial 驱动程序并明确设置其参数以配置它来识别小工具串行设备,如下所示:
echo 0x0525 0xA4A6 >/sys/bus/usb-serial/drivers/generic/new_id
传统方法是使用模块参数:
modprobe usbserial vendor=0x0525 product=0xA4A6
如果一切正常,usbserial 将在系统日志中打印一条消息,内容类似“Gadget Serial converter now equipped with ttyUSB0”。
使用 Minicom 或HyperTerminal 进行测试
一旦小工具串行驱动程序和主机驱动程序都安装完毕,并且 USB 电缆将小工具设备连接到主机,您就应该能够通过 USB 在小工具和主机系统之间进行通信。您可以使用 minicom 或 HyperTerminal 进行尝试。
在小工具端运行“minicom -s”以配置新的 minicom 会话。在“串行端口设置”下,将“/dev/ttygserial”设置为“串行设备”。将波特率、数据位、奇偶校验和停止位设置为 9600、8、无和 1——这些设置大多无关紧要。在“调制解调器和拨号”下,删除所有调制解调器和拨号字符串。
在运行 ACM 驱动程序的 Linux 主机上,以类似方式配置 minicom,但使用“/dev/ttyACM0”作为“串行设备”。(如果连接了其他 ACM 设备,请适当更改设备名称。)
在运行 USB 通用串行驱动程序的 Linux 主机上,以类似的方式配置 minicom,但使用“/dev/ttyUSB0”作为“串行设备”。 (如果连接了其他 USB 串行设备,请适当更改设备名称。)
在 Windows 主机上配置新的 HyperTerminal 会话以使用分配给 Gadget Serial 的 COM 端口。当 HyperTerminal 连接到 Gadget 串行设备时,“端口设置”将自动设置,因此您可以将它们保留为默认值——这些设置大多无关紧要。
在小工具端配置并运行 minicom,在主机端配置并运行 minicom 或 HyperTerminal 后,您应能够在小工具端和主机端系统之间来回发送数据。您在小工具端的终端窗口中输入的任何内容都应显示在主机端的终端窗口中,反之亦然。