Linux设备信息查询完全指南:/proc, /sys, /dev详解
一、Linux设备信息目录全景图
graph TD
A[Linux设备信息] --> B[/proc - 进程和内核信息]
A --> C[/sys - 设备驱动和硬件信息]
A --> D[/dev - 设备节点]
B --> B1[proc/bus/input/devices]
B --> B2[proc/interrupts]
B --> B3[proc/devices]
C --> C1[sys/class]
C --> C2[sys/bus]
C --> C3[sys/devices]
D --> D1[dev/input]
D --> D2[dev/fb*]
D --> D3[dev/tty*]
二、/proc目录:内核和进程信息
1. /proc/bus/input/devices - 输入设备信息
文件结构示例:
I: Bus=0018 Vendor=0000 Product=0000 Version=0000 N: Name="Goodix Capacitive TouchScreen" P: Phys= S: Sysfs=/devices/platform/soc/5000000.bus/5034000.i2c/i2c-3/3-005d/input/input0 U: Uniq= H: Handlers=event0 B: PROP=2 B: EV=1b B: KEY=400 0 0 0 0 0 B: ABS=260800000000003 B: MSC=20关键字段解析:
N: Name:设备名称(如触摸屏名称)H: Handlers:对应的设备节点(如event0)B: EV:支持的事件类型B: ABS:支持的绝对坐标属性
用途:识别触摸屏类型、查看输入设备信息
2. 其他重要/proc文件
| 文件路径 | 用途 | 示例输出 |
|---|---|---|
| /proc/interrupts | 查看中断分配 | 36: 1200000 gic 34 Edge gt911 |
| /proc/iomem | 查看物理内存映射 | 50000000-503fffff : /soc |
| /proc/devices | 已注册设备列表 | 188 ttyS |
| /proc/modules | 已加载内核模块 | sunxi_tcon 32768 0 - Live 0xbf0b7000 |
三、/sys目录:设备驱动和硬件信息
1. /sys/class - 设备分类视图
目录结构:
/sys/class/ ├── backlight/# 背光控制 ├── graphics/# 图形设备(如fb0) ├── input/# 输入设备 ├── leds/# LED指示灯 ├── net/# 网络设备 └── tty/# 串口设备(1) /sys/class/input
$ls/sys/class/input input0input1 $ls/sys/class/input/input0 capabilities/device/id/namepower/subsystem/uevent关键文件:
name:设备名称capabilities/*:设备能力(如支持的多点触控)
(2) /sys/class/graphics
$ls/sys/class/graphics/fb0 bl_curvemodesrotatestridevirtual_size blanknamerotate_allsubsystemvsize consolepanstateuevent modepower/subsystem@vertical_offset modelistrotate...关键文件:
name:帧缓冲设备名modes:支持的分辨率virtual_size:虚拟分辨率
2. /sys/bus - 总线设备信息
/sys/bus/ ├── i2c/ │└── devices/# I2C设备├── spi/ │└── devices/# SPI设备└── platform/ └── devices/# 平台设备查找I2C触摸屏:
$ls/sys/bus/i2c/devices/0-00380-005di2c-0i2c-1 $cat/sys/bus/i2c/devices/0-0038/name ft5x_ts3. /sys/devices - 物理设备树
设备物理路径:
/sys/devices/platform/soc/5000000.bus/5034000.i2c/i2c-3/3-005d查看设备属性:
$cat/sys/devices/platform/soc/5000000.bus/5034000.i2c/i2c-3/3-005d/irq36四、/dev目录:设备节点
1. 设备节点类型
| 设备类型 | 前缀 | 示例 | 用途 |
|---|---|---|---|
| 帧缓冲 | fb* | /dev/fb0 | LCD显示控制 |
| 输入设备 | event* | /dev/input/event0 | 触摸屏输入 |
| 串口 | ttyS* | /dev/ttyS0 | 串口通信 |
| I2C | i2c-* | /dev/i2c-0 | I2C总线控制 |
| SPI | spidev* | /dev/spidev0.0 | SPI设备 |
2. 设备节点查找方法
查找触摸屏节点:
# 方法1:通过/proc查找$grep-A5"TouchScreen"/proc/bus/input/devices H:Handlers=event0# 方法2:通过/sys查找$ls-l /sys/class/input/input0/device/driver.../input/input0 ->.../3-005d/input/input0# 方法3:直接测试设备节点$ evtest /dev/input/event0五、设备调试实战:以全志T113-I触摸屏为例
1. 触摸屏信息查询
# 1. 查看所有输入设备$cat/proc/bus/input/devices# 2. 定位触摸屏设备节点$ls-l /dev/input/by-path/ platform-5000000.bus-5034000.i2c-event ->event0# 3. 查看触摸屏参数$cat/sys/bus/i2c/devices/0-0038/name ft5x_ts# 4. 查看中断信息$cat/proc/interrupts|grepft5x36:1200000gic34Edge ft5x_ts# 5. 测试触摸事件$ evtest /dev/input/event0 Event:time1687923456.123456,type3(EV_ABS), code0(ABS_X), value320Event:time1687923456.123467,type3(EV_ABS), code1(ABS_Y), value4802. LCD信息查询
# 1. 查看帧缓冲设备$ls/sys/class/graphics/ fb0# 2. 获取显示参数$cat/sys/class/graphics/fb0/modes U:800x480p-60# 3. 查看背光控制$ls/sys/class/backlight/ backlight# 4. 调整背光亮度$echo50>/sys/class/backlight/backlight/brightness# 5. 截图操作$cat/dev/fb0>framebuffer.raw六、常用调试工具集
1. 基础工具
| 工具 | 用途 | 示例 |
|---|---|---|
| evtest | 输入设备测试 | evtest /dev/input/event0 |
| fbset | 帧缓冲设置 | fbset -xres 800 -yres 480 |
| udevadm | 设备信息查询 | udevadm info -a -p /sys/class/input/input0 |
| lsblk | 块设备查看 | lsblk |
| lspci/lsusb | PCI/USB设备 | lspci -v |
2. 高级调试工具
# 查看DMA内存分配$cat/proc/vmallocinfo# 跟踪系统调用$straceevtest /dev/input/event0# 内核日志查询$dmesg|grep-i"touch\|i2c\|drm"# 性能分析$ perftop-g七、设备树与驱动关联分析
1. 设备树节点到/sys路径映射
设备树: &i2c1 { touchscreen@38 { compatible = "focaltech,ft5x06"; }; }; /sys路径: /sys/bus/i2c/devices/0-0038/2. 驱动加载过程
八、跨平台设备信息查询技巧
- 通用路径记忆法:
- 输入设备:
/proc/bus/input/devices+/dev/input/event* - 显示设备:
/sys/class/graphics/fb*+/dev/fb* - 串口设备:
/sys/class/tty/ttyS*+/dev/ttyS*
- 设备特征过滤:
# 查找所有I2C设备find/sys -name"i2c-*"-type d# 查找所有输入设备grep-l"Name="/sys/class/input/input*/name- 动态设备监控:
# 监控设备插拔事件udevadm monitor --property# 监控输入事件evtest --grab /dev/input/event0- 自动化查询脚本:
#!/bin/bashecho"===== Input Devices ====="cat/proc/bus/input/devicesecho"===== Frame Buffers ====="ls/sys/class/graphics/fb*/name|xargs-I{}sh-c'echo -n "{}: "; cat {}'echo"===== I2C Devices ====="fori2cin$(find/sys/bus/i2c/devices/ -name"*-*");doecho-n"$i2c: ";cat$i2c/name2>/dev/null||echo"No name"done通过掌握这些目录结构和工具,您将能够快速定位和解决Linux系统中的设备相关问题,无论是开发驱动还是调试硬件都能得心应手。