Linux下如何测试及使用USB转串口线

Linux下如何测试及使用USB转串口线,第1张

测试环境:redhat

linux

fedora

core

4

总结如下:

1.

检查是否存在设备/dev/ttyUSB0,如果没有就建立一个:

mknod

/dev/ttyUSB0

c

188

0

以下推理未测试:

如果有多个USB口,可以类推,建立/dev/ttyUSB[1-n],注意从设备号要累加,如:mknod

/dev/ttyUSB[1-n]

c

188

[1-n]

2.

启动minicom,

设置串口设备为

/dev/ttyUSB0,

再设置波特率/数据位/停止位,保存为缺省配置df1

3.

重启minicom,

复位目标板,看是否有打印信息?

如果没有请确认:a)USB/串口线没问题,b)确认你使用的USB口是第一个(一个个的试吧,一般电脑不会标示出来)

USB驱动程序基础在动手写USB驱动程序这前,让我们先看看写的USB驱动程序在内核中的结构,如下图: USB驱动程序存在于不同的内核子系统和USB硬件控制器之间,USB核心为USB驱动程序提供了一个用于访问和控制USB硬件的接口,而不必考虑系统当前存在的各种不同类型的USB硬件控制器。USB是一个非常复杂的设备,linux内核为我们提供了一个称为USB的核心的子系统来处理大部分的复杂性,USB设备包括配置(configuration)、接口(interface)和端点(endpoint),USB设备绑定到接口上,而不是整个USB设备。如下图所示: USB通信最基本的形式是通过端点(USB端点分中断、批量、等时、控制四种,每种用途不同),USB端点只能往一个方向传送数据,从主机到设备或者从设备到主机,端点可以看作是单向的管道(pipe)。所以我们可以这样认为:设备通常具有一个或者更多的配置,配置经常具有一个或者更多的接口,接口通常具有一个或者更多的设置,接口没有或具有一个以上的端点。驱动程序把驱动程序对象注册到USB子系统中,稍后再使用制造商和设备标识来判断是否已经安装了硬件。USB核心使用一个列表(是一个包含制造商ID和设备号ID的一个结构体)来判断对于一个设备该使用哪一个驱动程序,热插拨脚本使用它来确定当一个特定的设备插入到系统时该自动装载哪一个驱动程序。上面我们简要说明了驱动程序的基本理论,在写一个设备驱动程序之前,我们还要了解以下两个概念:模块和设备文件。模块:是在内核空间运行的程序,实际上是一种目标对象文件,没有链接,不能独立运行,但是可以装载到系统中作为内核的一部分运行,从而可以动态扩充内核的功能。模块最主要的用处就是用来实现设备驱动程序。Linux下对于一个硬件的驱动,可以有两种方式:直接加载到内核代码中,启动内核时就会驱动此硬件设备。另一种就是以模块方式,编译生成一个.ko文件(在2.4以下内核中是用.o作模块文件,我们以2.6的内核为准,以下同)。当应用程序需要时再加载到内核空间运行。所以我们所说的一个硬件的驱动程序,通常指的就是一个驱动模块。设备文件:对于一个设备,它可以在/dev下面存在一个对应的逻辑设备节点,这个节点以文件的形式存在,但它不是普通意义上的文件,它是设备文件,更确切的说,它是设备节点。这个节点是通过mknod命令建立的,其中指定了主设备号和次设备号。主设备号表明了某一类设备,一般对应着确定的驱动程序;次设备号一般是区分不同属性,例如不同的使用方法,不同的位置,不同的 *** 作。这个设备号是从/proc/devices文件中获得的,所以一般是先有驱动程序在内核中,才有设备节点在目录中。这个设备号(特指主设备号)的主要作用,就是声明设备所使用的驱动程序。驱动程序和设备号是一一对应的,当你打开一个设备文件时, *** 作系统就已经知道这个设备所对应的驱动程序。对于一个硬件,Linux是这样来进行驱动的:首先,我们必须提供一个.ko的驱动模块文件。我们要使用这个驱动程序,首先要加载它,我们可以用insmod xxx.ko,这样驱动就会根据自己的类型(字符设备类型或块设备类型,例如鼠标就是字符设备而硬盘就是块设备)向系统注册,注册成功系统会反馈一个主设备号,这个主设备号就是系统对它的唯一标识。驱动就是根据此主设备号来创建一个一般放置在/dev目录下的设备文件。在我们要访问此硬件时,就可以对设备文件通过open、read、write、close等命令进行。而驱动就会接收到相应的read、write *** 作而根据自己的模块中的相应函数进行 *** 作了。USB驱动程序实践了解了上述理论后,我们就可以动手写驱动程序,如果你基本功好,而且写过linux下的硬件驱动,USB的硬件驱动和pci_driver很类似,那么写USB的驱动就比较简单了,如果你只是大体了解了linux的硬件驱动,那也不要紧,因为在linux的内核源码中有一个框架程序可以拿来借用一下,这个框架程序在/usr/src/~(你的内核版本,以下同)/drivers/usb下,文件名为usb-skeleton.c。写一个USB的驱动程序最基本的要做四件事:驱动程序要支持的设备、注册USB驱动程序、探测和断开、提交和控制urb(USB请求块)(当然也可以不用urb来传输数据,下文我们会说到)。驱动程序支持的设备:有一个结构体struct usb_device_id,这个结构体提供了一列不同类型的该驱动程序支持的USB设备,对于一个只控制一个特定的USB设备的驱动程序来说,struct usb_device_id表被定义为:/* 驱动程序支持的设备列表 */static struct usb_device_id skel_table [] = {{ USB_DEVICE(USB_SKEL_VENDOR_ID, USB_SKEL_PRODUCT_ID) },{ }/* 终止入口 */}MODULE_DEVICE_TABLE (usb, skel_table)对于PC驱动程序,MODULE_DEVICE_TABLE是必需的,而且usb必需为该宏的第一个值,而USB_SKEL_VENDOR_ID和USB_SKEL_PRODUCT_ID就是这个特殊设备的制造商和产品的ID了,我们在程序中把定义的值改为我们这款USB的,如:/* 定义制造商和产品的ID号 */#define USB_SKEL_VENDOR_ID0x1234#define USB_SKEL_PRODUCT_ID0x2345这两个值可以通过命令lsusb,当然你得先把USB设备先插到主机上了。或者查看厂商的USB设备的手册也能得到,在我机器上运行lsusb是这样的结果:Bus 004 Device 001: ID 0000:0000 Bus 003 Device 002: ID 1234:2345 Abc Corp. Bus 002 Device 001: ID 0000:0000 Bus 001 Device 001: ID 0000:0000得到这两个值后把它定义到程序里就可以了。注册USB驱动程序:所有的USB驱动程序都必须创建的结构体是struct usb_driver。这个结构体必须由USB驱动程序来填写,包括许多回调函数和变量,它们向USB核心代码描述USB驱动程序。创建一个有效的struct usb_driver结构体,只须要初始化五个字段就可以了,在框架程序中是这样的:static struct usb_driver skel_driver = {.owner =THIS_MODULE,.name ="skeleton",.probe =skel_probe,.disconnect =skel_disconnect,.id_table =skel_table,}

安装完成后,请不要着急打开软件。需先进行配置。具体步骤如下:

查看串口设备及文件权限

linux下的所有 *** 作面向用户的都是文件 *** 作,在对串口 *** 作之前,我们应该先确认自己对该文件有没有读写权限。

linux下的usb串口命名为ttyUSB*,运行上面命令,可以看到有几个设备挂载。

我们这里是:

只有ttuUSB0.再用lsusb查看:

usb 004正是我们挂上去的usb转串口线缆,使用的芯片是PL2303。

但是正如上面显示,ttyUSB0这个设备是root所有的,所以,我们以普通用户身份打开minicom是没法访问该文件的。

运行sudo minicom -s便进入了minicom的配置界面,使用上下键选择Serial port setup,回车。此时光标在“change which setting”后面停留,它的上面有如下菜单:

我们只需输入上面对应的字母,就可以进如相应的菜单进行设置。设置完成,回车,光标会回到“change which setting”后面,如此重复。完成按回车返回主菜单即可。

返回主菜单后,选择“Save setup as df1”,将其保存为默认设置,然后选择 Exit退出。需退出后重新打开minicom,软件才会使用上述参数进行初始化。

注意:如果没有使用USB转串口,而是直接使用串口,那么Serial Device要配置为/dev/ttyS0。

如果上面设置顺利,打开minicom

重新给设备上电后,此时,窗口里就有信息打印出来了。

1)需使用Ctrl+a 进入设置状态

2)按z进入设置菜单

(1)O键:打开配置选项;

(2)W键:自动卷屏。当显示的内容超过一行之後,自动将後面的内容换行。这个功能在查看内核的启动信息时很有用。

(3)C键:清除屏幕的显示内容;

(4)B键:浏览minicom的历史显示;

(5)X键:退出minicom,会提示确认退出。

Ctrl + A -->O

选择"Filenames and paths"

更多的参数,参见"man minicom"的输出。

如果不加这个项,那么在minicom和pc交互的时候中键入命令超过一行时候会被截断,(这时候可以通过 <C-a>w 来开和关切换截断行功能).

这样,启动之后我们会发现显示的内容不是黑白的了。

这样,启动之后,所在minicom的输出都会在<filename>中保留一份,如果原来文件存在,则追加,不存在则创建一个。

这样,我们可以取代用 <C-a>* 发送命令的方式,将 <C-a>替换成 [Alt] 或者 [ESC] .

这里,<filename>是你的脚本文件的名字,应该指定绝对路径,否则就会在你启动minicom的路径下寻找。

Minicom是基于窗口的。要d出所需功能的窗口,可按下 Ctrl-A (以下使用C-A来表示Ctrl-A),然后再按各功能键(a-z或A-Z)。先按C-A,再按'z',将出现一个帮助窗口,提供了所有命令的简述。配置 minicom(-s 选项,或者C-A、O)时,可以改变这个转义键,不过现在我们还是用Ctrl-A吧。

这里,只给出很少的命令,更多的交互命令参见"<C-a>z"的帮助输出。

minicom -s 或启动minicom之后运行 <C-a>o 来进行配置。

C:脚本文件的存放位置: <C-a>g 运行脚本时的路径 。

D:选择脚本程序: 默认 runscript ,也可以选择 bash 脚本格式。

可以参考man手册 man runscript .交互命令中可以运行" <C-a>G "来运行脚本。

参考资料


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7375074.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-04
下一篇2023-04-04

发表评论

登录后才能评论

评论列表(0条)

    保存