1.概要
ls /dev/tty* | grep -E 'ttyS|ttyUSB|ttyACM|ttyAMA|ttyO'
dmesg | grep -i 'serial\|tty'
udevadm info -a -n /dev/ttyUSB0 # 替换为你的设备名
setserial -g /dev/ttyS*
hwinfo --serial
2.内热
在 Ubuntu 系统中,可以通过以下方法查看串口数量及名称:
方法 1:直接列出 /dev
下的串口设备
ls /dev/tty* | grep -E 'ttyS|ttyUSB|ttyACM|ttyAMA|ttyO'
查询结果
root@master:~# ls /dev/tty* | grep -E 'ttyS|ttyUSB|ttyACM|ttyAMA|ttyO'
/dev/ttyS11
/dev/ttyS2
/dev/ttyS3
/dev/ttyS4
/dev/ttyS5
/dev/ttyS6
/dev/ttyS8
- 说明:
该命令会列出所有以ttyS
(传统串口)、ttyUSB
(USB 转串口)、ttyACM
(USB 调制解调器)、ttyAMA
(树莓派等设备的串口)或ttyO
(某些嵌入式设备的串口)开头的设备文件。
方法 2:通过 dmesg
查看内核日志
dmesg | grep -i 'serial\|tty'
方法 3:使用 udevadm
查询设备信息
udevadm info -a -n /dev/ttyUSB0 # 替换为你的设备名
- 说明:
此命令可查看指定串口设备的详细属性(如厂商、产品 ID 等),需替换ttyUSB0
为实际设备名。
方法 4:使用 setserial
工具(需安装)
sudo apt install setserial
setserial -g /dev/ttyS*
- 说明:
该工具会显示传统串口(ttyS*
)的配置信息,适合查看物理串口。
方法 5:通过 hwinfo
工具(需安装)
sudo apt install hwinfo
hwinfo --serial
- 说明:
列出所有串口设备的详细信息,包括 USB 转串口适配器。
示例输出
$ ls /dev/tty* | grep -E 'ttyS|ttyUSB'
/dev/ttyS0 /dev/ttyUSB0
表示系统有 2 个串口:ttyS0
(物理串口)和 ttyUSB0
(USB 转串口)。
注意事项
- 权限问题:
如果设备文件权限不足,可使用sudo
或将用户加入dialout
组:sudo usermod -aG dialout $USER
- 动态设备:
USB 串口设备可能在插拔后名称变化(如ttyUSB0
变为ttyUSB1
)。
根据需求选择合适的方法即可快速定位串口设备!
3.关联链接
4.关联知识
1.使用 udevadm
查询设备信息
1.查询结果
root@master:~# udevadm info -a -n /dev/ttyS6 # 替换为你的设备名
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/platform/2ad90000.serial/tty/ttyS6':
KERNEL=="ttyS6"
SUBSYSTEM=="tty"
DRIVER==""
ATTR{close_delay}=="50"
ATTR{closing_wait}=="3000"
ATTR{console}=="N"
ATTR{custom_divisor}=="0"
ATTR{flags}=="0x39000000"
ATTR{io_type}=="3"
ATTR{iomem_base}=="0x2AD90000"
ATTR{iomem_reg_shift}=="2"
ATTR{irq}=="49"
ATTR{line}=="6"
ATTR{port}=="0x0"
ATTR{power/async}=="disabled"
ATTR{power/control}=="auto"
ATTR{power/runtime_active_kids}=="0"
ATTR{power/runtime_active_time}=="0"
ATTR{power/runtime_enabled}=="disabled"
ATTR{power/runtime_status}=="unsupported"
ATTR{power/runtime_suspended_time}=="0"
ATTR{power/runtime_usage}=="0"
ATTR{power/wakeup}=="disabled"
ATTR{power/wakeup_abort_count}==""
ATTR{power/wakeup_active}==""
ATTR{power/wakeup_active_count}==""
ATTR{power/wakeup_count}==""
ATTR{power/wakeup_expire_count}==""
ATTR{power/wakeup_last_time_ms}==""
ATTR{power/wakeup_max_time_ms}==""
ATTR{power/wakeup_total_time_ms}==""
ATTR{rx_trig_bytes}=="8"
ATTR{type}=="4"
ATTR{uartclk}=="24000000"
ATTR{xmit_fifo_size}=="64"
looking at parent device '/devices/platform/2ad90000.serial':
KERNELS=="2ad90000.serial"
SUBSYSTEMS=="platform"
DRIVERS=="dw-apb-uart"
ATTRS{driver_override}=="(null)"
ATTRS{power/async}=="disabled"
ATTRS{power/control}=="auto"
ATTRS{power/runtime_active_kids}=="0"
ATTRS{power/runtime_active_time}=="103485777"
ATTRS{power/runtime_enabled}=="enabled"
ATTRS{power/runtime_status}=="active"
ATTRS{power/runtime_suspended_time}=="11036801"
ATTRS{power/runtime_usage}=="1"
looking at parent device '/devices/platform':
KERNELS=="platform"
SUBSYSTEMS==""
DRIVERS==""
ATTRS{power/async}=="disabled"
ATTRS{power/control}=="auto"
ATTRS{power/runtime_active_kids}=="12"
ATTRS{power/runtime_active_time}=="0"
ATTRS{power/runtime_enabled}=="disabled"
ATTRS{power/runtime_status}=="unsupported"
ATTRS{power/runtime_suspended_time}=="0"
ATTRS{power/runtime_usage}=="3"
root@master:~#
2.查询结果分析
根据您提供的 udevadm info
输出,以下是关于 /dev/ttyS6
设备的详细分析:
1. 设备基本信息
- 设备路径:
/devices/platform/2ad90000.serial/tty/ttyS6
- 内核名称:
ttyS6
- 子系统:
tty
(串口设备) - 驱动: 未直接绑定驱动(
DRIVER==""
)
2. 关键属性解析
(1) 设备自身属性
- 硬件标识:
ATTR{iomem_base}=="0x2AD90000"
: 设备的物理内存基地址。ATTR{irq}=="49"
: 设备使用的中断号。ATTR{uartclk}=="24000000"
: UART 波特率时钟频率(24MHz)。
- 功能配置:
ATTR{flags}=="0x39000000"
: 设备标志位(需结合内核文档解析)。ATTR{type}=="4"
: 设备类型(可能对应特定 UART 类型)。
- 电源管理:
ATTR{power/control}=="auto"
: 电源管理策略为自动。ATTR{power/runtime_status}=="unsupported"
: 运行时电源管理未启用。
(2) 父设备属性
- 父设备路径:
/devices/platform/2ad90000.serial
- 子系统:
platform
(平台设备) - 驱动:
dw-apb-uart
(DesignWare APB UART 驱动) - 电源管理:
ATTRS{power/runtime_status}=="active"
: 父设备当前处于活动状态。ATTRS{power/runtime_enabled}=="enabled"
: 运行时电源管理已启用。
3. 典型使用场景
(1) 编写 udev 规则
若需为该设备创建自定义规则(如固定设备名、权限设置),可参考以下属性组合:
# 示例:基于 iomem_base 和驱动匹配
SUBSYSTEM=="tty", ATTRS{iomem_base}=="0x2AD90000", DRIVERS=="dw-apb-uart", SYMLINK+="my_custom_serial"
(2) 诊断设备问题
- 中断冲突: 检查
irq=49
是否与其他设备冲突(通过cat /proc/interrupts
)。 - 电源管理异常: 若设备异常,可尝试禁用电源管理:
echo "auto" > /sys/class/tty/ttyS6/device/power/control
4. 进一步操作建议
- 验证硬件连接:
dmesg | grep ttyS6 # 查看内核日志中的设备初始化信息
- 测试串口通信:
stty -F /dev/ttyS6 115200 # 设置波特率 cat /dev/ttyS6 & echo "test" > /dev/ttyS6 # 简单回环测试
如果需要更具体的操作(如调试驱动或编写完整 udev 规则),请补充说明需求!
- 说明:
内核日志会记录最近连接的串口设备信息,适合查看刚插入的串口设备。
2.使用 setserial
工具(需安装)
root@master:~# setserial -g /dev/ttyS*
/dev/ttyS11, UART: 16550A, Port: 0x0000, IRQ: 51
/dev/ttyS2, UART: 16550A, Port: 0x0000, IRQ: 45
/dev/ttyS3, UART: 16550A, Port: 0x0000, IRQ: 46
/dev/ttyS4, UART: 16550A, Port: 0x0000, IRQ: 47
/dev/ttyS5, UART: 16550A, Port: 0x0000, IRQ: 48
/dev/ttyS6, UART: 16550A, Port: 0x0000, IRQ: 49
/dev/ttyS8, UART: 16550A, Port: 0x0000, IRQ: 5
根据您提供的setserial
输出,系统检测到多个串口设备但存在配置异常。以下是详细分析和解决方案:
问题分析
- 端口地址异常:
- 所有设备的
Port: 0x0000
表示内核未正确识别硬件端口地址。 - 正常情况应显示物理地址(如
0x3F8
对应COM1,0x2F8
对应COM2等)。
- 所有设备的
- 可能原因:
- 硬件未正确连接或损坏(如多串口卡未插稳)。
- 内核未正确加载串口驱动(如
8250
、serial
等模块)。 - BIOS/UEFI中禁用了串口功能。
- 内核启动参数限制了串口初始化(如
console=
参数冲突)。
解决步骤
1. 检查硬件连接
- 如果是物理串口卡,尝试重新插拔或更换插槽。
- 确认主板/串口卡上的串口跳线设置正确(部分硬件需手动启用)。
2. 检查内核驱动
- 查看已加载的串口驱动:
正常应包含lsmod | grep -E 'serial|8250'
8250
、serial_core
等模块。若缺失,手动加载:sudo modprobe 8250 sudo modprobe serial_core
3. 检查内核启动参数
- 查看当前启动参数:
如果存在cat /proc/cmdline | grep console
console=ttySx
参数(如console=ttyS0,115200
),尝试移除或调整顺序。
4. 手动配置串口(临时)
- 为设备分配端口和IRQ(需实际硬件地址):
(示例值,需替换为实际硬件地址)sudo setserial /dev/ttyS2 port 0x2F8 irq 3
5. 永久生效配置
- 创建启动脚本(如
/etc/rc.local
):echo "setserial /dev/ttyS2 port 0x2F8 irq 3" >> /etc/rc.local chmod +x /etc/rc.local
6. 检查内核日志
- 查看串口初始化日志:
关注是否有dmesg | grep -i serial
No valid port found
或IRQ conflict
等错误。
7. 更新内核或固件
- 升级内核版本(旧内核可能不支持新型串口硬件):
sudo apt update && sudo apt upgrade linux-image-generic
- 更新主板/串口卡固件。
注意事项
- IRQ冲突:确保IRQ号未被其他设备占用(通过
cat /proc/interrupts
检查)。 - 虚拟化环境:若在虚拟机中运行,需在宿主机配置串口直通(如VMware的
add_ttyS
)。 - 硬件限制:部分主板仅支持有限数量的物理串口(如4个),超出部分需额外多串口卡。
验证配置
- 重启后再次运行:
正常输出应显示非零端口地址(如setserial -g /dev/ttyS*
Port: 0x03F8
)。
如果问题仍未解决,请提供以下信息进一步诊断:
dmesg | grep -i serial
的完整输出。- 服务器/主板型号及是否使用物理串口卡。
- 是否在虚拟机或云环境中运行。
3. 通过 hwinfo
工具(需安装)
root@master:~# hwinfo --serial
Usage: hwinfo [OPTIONS]
Probe for hardware.
Options:
--<HARDWARE_ITEM>
This option can be given more than once. Probe for a particular
HARDWARE_ITEM. Available hardware items are:
all, arch, bios, block, bluetooth, braille, bridge, camera,
cdrom, chipcard, cpu, disk, dsl, dvb, fingerprint, floppy,
framebuffer, gfxcard, hub, ide, isapnp, isdn, joystick, keyboard,
memory, mmc-ctrl, modem, monitor, mouse, netcard, network, partition,
pci, pcmcia, pcmcia-ctrl, pppoe, printer, redasd,
reallyall, scanner, scsi, smp, sound, storage-ctrl, sys, tape,
tv, uml, usb, usb-ctrl, vbe, wlan, xen, zip
--short
Show only a summary. Use this option in addition to a hardware
probing option.
--listmd
Normally hwinfo does not report RAID devices. Add this option to
see them.
--only DEVNAME
This option can be given more than once. If you add this option
only entries in the device list matching DEVNAME will be shown.
Note that you also have to specify --<HARDWARE_ITEM> to trigger
any device probing.
--save-config SPEC
Store config for a particular device below /var/lib/hardware.
SPEC can be a device name, an UDI, or 'all'. This option must be
given in addition to a hardware probing option.
--show-config UDI
Show saved config data for a particular device.
--map
If disk names have changed (e.g. after a kernel update) this
prints a list of disk name mappings. Note that you must have
used --save-config at some point before for this can work.
--debug N
Set debug level to N. The debug info is shown only in the log
file. If you specify a log file, the debug level is implicitly
set to a reasonable value (N is a bitmask of individual flags).
--verbose
Increase verbosity. Only together with --map.
--log FILE
Write log info to FILE.
Don't forget to also specify --<HARDWARE_ITEM> to trigger any
device probing.
--dump-db N
Dump hardware data base. N is either 0 for the external data
base in /var/lib/hardware, or 1 for the internal data base.
--version
Print libhd version.
--help
Print usage.
您在尝试使用 hwinfo
工具时参数使用有误。hwinfo
命令需要配合具体的硬件项参数(如 --bios
, --disk
等)才能获取信息,而 --serial
并不是有效参数。
正确用法示例:
1. 查看主板/BIOS序列号:
hwinfo --bios | grep -i serial
# 或直接查看完整信息
hwinfo --bios
2. 查看硬盘序列号:
hwinfo --disk | grep -i serial
# 或列出所有磁盘信息
hwinfo --disk
3. 查看内存条序列号:
hwinfo --memory | grep -i serial
4. 查看网卡MAC地址:
hwinfo --netcard | grep -i serial
常用参数说明:
参数 | 作用 |
---|---|
--bios | 主板/BIOS信息 |
--disk | 磁盘信息 |
--memory | 内存信息 |
--netcard | 网卡信息 |
--cpu | CPU信息 |
--short | 简化输出(与其他参数配合使用) |
其他工具推荐:
如果 hwinfo
无法满足需求,可以尝试以下命令:
# 查看主板序列号
dmidecode -s baseboard-serial-number
# 查看硬盘序列号
hdparm -I /dev/sda | grep Serial
# 查看系统整体信息
lshw -short
请根据实际需求选择合适的命令和参数。