Linux串口相关的 *** 作及绑定

Linux串口相关的 *** 作及绑定,第1张

@ toc

可在控制台输入

也可以用stty设置串口参数

使用后相当于串口回传,发什么回什么

发送数据

可以对串口发送数据比如对com1口

一般情况下串口的名称全部在dev下面,如果你没有外插串口卡的话默认是dev下的ttyS* ,一般ttyS0对应com1,ttyS1对应com2,当然也不一定是必然的;

如果有ttyS设备,再看/dev/有没有ttyS*,如没有就建立一个:

如果板子的设备中没有标准串口设备ttyS0,也没有ttySAC0。/dev下应该有一个USB串口:/dev/ttyUSB0.

当一个串行卡或数据卡被侦测到时,它会被指定成为第一个可用的串行设备。通常是/dev/ttyS1(cua1)或/dev/ttyS2(cua2),这完成看原已内建的串口数目。ttyS*设备会被报告在/var/run/stab内。

PC上的串口一般是ttyS,板子上Linux的串口一般叫做ttySAC

可能是linux下的串口设备没有打开,需要改变串口设备

的权限,或者根据文章头添加用户到组处理

可以通过以下命令 查看 板子上的硬件端口的内核设备名

该条命令会将 ttyUSB0所对应的硬件端口的kernel设备名 显现出来, 得到KERNEL== '1-5.5.4', 而不是之前的ttyUSB0

cmd.sh如下:

./getUSB.py 调用当前路径下的getUSB.py这个Python语言,明确此次是哪个,ttyUSB0,或者ttyUSB1挂载在端口3-1.1上

getUSB.py:

完成之后 ,设置开机启动cmd.sh(在/etc/rc.local中设置)则每次开机之后,会从/dev/ttydata获取到固定端口的数据

方式一

写入内容如下:

方式二

我的硬件序列号:ATTRS{serial}=="FTSYWCXZ"这个号是唯一的

可以通过/dev/usb_0打开串口设备

常用的匹配类型:

Linux下USB设备节点名不固定问题经常会遇到,下面就是解决的方法:

以USB转串口为例,通常设备节点名为ttyUSBx(x为0~n),Linux内核会根据插入设备的先后顺序进行编号的分配,比如第一个插入的设备编号为0,然后依此加1。

如果仅仅以设备节点ttyUSBn来区别具体是哪个设备,因为末位的编号是随时会变的,所以就会造成混乱。无法保证A设备就是0,B设备就是1。其实这个问题在LDD3上已经提到过,目前的内核早已经解决类似的问题,将所以有USB设备都导致到sys文件系统中,其实每个USB端口都有唯一的端口号,相当于每个门店的门牌号。只要我们依据端口号来进行设备的区分,那么问题就迎刃而解了。

比如当前设备插入两个USB转串口设备后,查看ttyUSBn所在端口的端口号:

root@android:/ $ ls -l /sys/class/tty/

...

lrwxrwxrwx root root 2011-01-01 13:40 ttyUSB0 ->../../devices/ff540000.usb/usb3/3-1/3-1.1/3-1.1:1.0/ttyUSB0/tty/ttyUSB0

lrwxrwxrwx root root 2011-01-01 13:43 ttyUSB1 ->../../devices/ff540000.usb/usb3/3-1/3-1.2/3-1.2:1.0/ttyUSB1/tty/ttyUSB1

root@android:/ $ 12345

其中ttyUSB0所在的端口号为3-1.1,而ttyUSB1所在的端口号为3-1.2。

其它类型USB设备同理,以上思路清理完毕。

查看系统当前usb设备,下面是对第二列排序的结果。

$ lsusb

Bus 001 Device 001: ID xxx:xxx Linux Foundation 2.0 root hub

Bus 001 Device 002: ID xxx:xxx Intel Corp. Integrated Rate Matching Hub

Bus 001 Device 003: ID xxx:xxx Genesys Logic, Inc. GL827L SD/MMC/MS Flash Card Reader

Bus 001 Device 005: ID xxx:xxx Philips (or NXP)

Bus 002 Device 001: ID xxx:xxx Linux Foundation 2.0 root hub

Bus 002 Device 002: ID xxx:xxx Intel Corp. Integrated Rate Matching Hub

Bus 002 Device 003: ID xxx:xxx Intel Corp.

Bus 003 Device 001: ID xxx:xxx Linux Foundation 2.0 root hub

Bus 004 Device 001: ID xxx:xxx Linux Foundation 3.0 root hub

第二列是usb设备的hub编号。pc中usb设备都是接在hub上的,即使你的主板提供好多usb口,他们实际都是接在hub上的。

第四列是usb设备编号,设备在本机的编号。

所以,上面信息显示一共有4个usb hub(3个usb2.0,一个usb3.0)。如果

黑体字部分是我机器上的三个设备,001.003 是机箱自带读卡器,001.005是无线键盘,002.003是intel无线网卡蓝牙模块(具体怎么知道的往下看)。

usb设备也可以用在内核文件中找到/sys/bus/usb/devices。linux将所有设备驱动映射到了/sys下。

ls -1 /sys/bus/usb/devices/

1-0:1.0

1-1

1-1:1.0

1-1.2

1-1.2:1.0

1-1.4

1-1.4.1

1-1.4:1.0

1-1.4.1:1.0

1-1.4.1:1.1

1-1.4.1:1.2

1-1.5

1-1.5:1.0

1-1.5:1.1

1-1.5:1.2

2-0:1.0

2-1

2-1:1.0

2-1.5

2-1.5:1.0

2-1.5:1.1

3-0:1.0

4-0:1.0

usb1

usb2

usb3

usb4

都是符号连接。也可以用ls -l /sys/bus/usb/devices/ 看具体位置

输出看起来比较乱。用 udevadm工具能比较清楚列出设备信息。命令看起来是这样的:

udevadm info -p /sys/bus/usb/devices/usb1 -q property

那怎么找出是那个usb设备呢?

Bus 002 Device 003: ID xxx:xxx Intel Corp.

第二列,002 就要在所有2开头的文件去找,下面的符合第一规则。

2-0:1.0

2-1

2-1:1.0

2-1.5

2-1.5:1.0

2-1.5:1.1

通常系统的usb hub占据了`-`减号后第一位0。第一个 2-0:1.0,就是usb hub。

2-1.5*文件就是上面的设备。

$ udevadm info -p /sys/bus/usb/devices/2-1.5 -q property

BUSNUM=002

DEVNAME=/dev/bus/usb/002/003

DEVNUM=003

............

ID_MODEL_ID=xxx

............

ID_VENDOR=xxx

............

ID_VENDOR_FROM_DATABASE=Intel Corp.

............

002和003 就是lsusb 的第2/4列. 第6列,来自modelID和vender。

lsusb中的的东东就是这么来的。

那问题是怎么知道是蓝牙呢? 答案是继续用udevadm查:

$ udevadm info -p /sys/bus/usb/devices/2-1.5:1.0 -q property

ID_USB_CLASS_FROM_DATABASE=Wireless

ID_USB_PROTOCOL_FROM_DATABASE=Bluetooth

ID_USB_SUBCLASS_FROM_DATABASE=Radio Frequency

ID_VENDOR_FROM_DATABASE=Intel Corp.


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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存