ubuntu 查看串口有多少个,名称都是什么

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 转串口)。


    注意事项

    1. 权限问题
      如果设备文件权限不足,可使用 sudo 或将用户加入 dialout 组:
      sudo usermod -aG dialout $USER
    2. 动态设备
      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. 进一步操作建议
    1. 验证硬件连接:
      dmesg | grep ttyS6 # 查看内核日志中的设备初始化信息
    2. 测试串口通信:

      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输出,系统检测到多个串口设备但存在配置异常。以下是详细分析和解决方案:


    问题分析

    1. 端口地址异常
      • 所有设备的Port: 0x0000表示内核未正确识别硬件端口地址。
      • 正常情况应显示物理地址(如0x3F8对应COM1,0x2F8对应COM2等)。
    2. 可能原因
      • 硬件未正确连接或损坏(如多串口卡未插稳)。
      • 内核未正确加载串口驱动(如8250serial等模块)。
      • BIOS/UEFI中禁用了串口功能。
      • 内核启动参数限制了串口初始化(如console=参数冲突)。

    解决步骤

    1. 检查硬件连接
    • 如果是物理串口卡,尝试重新插拔或更换插槽。
    • 确认主板/串口卡上的串口跳线设置正确(部分硬件需手动启用)。
    2. 检查内核驱动
    • 查看已加载的串口驱动:
      lsmod | grep -E 'serial|8250'
      正常应包含8250serial_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 foundIRQ 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)。

    如果问题仍未解决,请提供以下信息进一步诊断:

    1. dmesg | grep -i serial 的完整输出。
    2. 服务器/主板型号及是否使用物理串口卡。
    3. 是否在虚拟机或云环境中运行。

    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网卡信息
    --cpuCPU信息
    --short简化输出(与其他参数配合使用)

    其他工具推荐:

    如果 hwinfo 无法满足需求,可以尝试以下命令:

    # 查看主板序列号
    dmidecode -s baseboard-serial-number
    
    
    # 查看硬盘序列号
    hdparm -I /dev/sda | grep Serial
    
    
    # 查看系统整体信息
    lshw -short

    请根据实际需求选择合适的命令和参数。

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值