麒麟系统中确认硬件io端口需读取/proc/ioports(须sudo),筛选可用grep;pci设备i/o地址查lspci -vv中的“i/o ports at”;isa设备固定端口如0x3f8可通过dmesg或awk在/proc/ioports中定位。

如果您需要在麒麟操作系统中确认当前系统所有正在使用的硬件IO端口(如串口、并口、PCI设备I/O地址、USB控制器端口映射等),以便排查驱动冲突、设备识别异常或进行底层调试,则必须直接读取内核暴露的I/O端口资源视图,而非依赖用户态服务或图形界面。
查看内核分配的所有I/O端口范围
内核将物理I/O端口空间划分为多个已分配区间,记录在/proc/ioports中,该文件由内核实时维护,权威且无需额外工具。
执行命令:sudo cat /proc/ioports
输出为层级缩进格式,每行包含起始地址、结束地址、设备名称(如0000-0cf7 : pci-bus 0000:00)及子分配项。注意:非root权限无法读取该文件,【必须加sudo,否则返回空或Permission denied】。
若需筛选含特定关键词的端口(如串口、USB),可追加管道:sudo cat /proc/ioports | grep -i "serial\|usb\|pci"。
定位PCI设备对应的I/O端口基址
PCI设备(如网卡、显卡、声卡)在配置空间中声明其I/O BAR(Base Address Register),这些值反映实际映射的端口地址,比/proc/ioports更精确对应硬件。
第一步:列出全部PCI设备及其资源分配:sudo lspci -vv
第二步:在输出中查找关键字I/O ports at,例如I/O ports at d000 [size=32],该行即表示该设备占用从d000开始、长度为32字节的I/O端口空间。
第三步:若仅关注某类设备(如所有USB控制器),先用lspci | grep -i usb获取设备ID,再对每个ID执行sudo lspci -vv -s 00:14.0(将00:14.0替换为实际Bus:Device.Function)。
注意:lspci -vv输出极长,建议配合less分页查看,避免信息刷屏丢失关键行。
检查传统ISA设备(如LPT、COM)的固定I/O端口
老式ISA总线设备使用硬编码I/O地址,常见端口有:COM1(0x3f8)、COM2(0x2f8)、LPT1(0x378)。这些地址通常被内核保留,但未必有设备实际占用。
方法一:查看内核启动日志中是否报告了这些端口的探测结果:dmesg | grep -i "0x3f8\|0x2f8\|0x378"
方法二:直接读取/proc/ioports并精确定位:sudo awk '/^ *0x3f8/ || /^ *0x2f8/ || /^ *0x378/' /proc/ioports
若某端口行末显示unused,说明该地址未被任何驱动申请;若显示serial或parport,则已被对应子系统接管。











