游乐游手机版
首页/AI热点日报/热点详情

RK3399内核入门:通过sysfs清楚了解设备系统状况

类型:热点整理2026-07-14
sysfs是Linux内核虚拟文件系统,以目录和文件形式暴露设备、驱动、总线信息。在RK3399平台开发中,可通过 sys目录下的bus、devices、class等子目录查看CPU频率、GPIO状态、I2C SPI设备及驱动绑定情况,辅助诊断硬件问题与配置参数。
# RK3399平台开发系列讲解(内核入门篇) ## 1.1 通过sysfs清楚了解设备的系统状况 sysfs 是 Linux 内核提供的一个虚拟文件系统,它将内核中的设备、驱动、总线等信息以文件和目录的形式暴露给用户空间。对于 RK3399 平台的嵌入式开发来说,熟练运用 sysfs 可以快速诊断硬件状态、配置驱动参数、调试设备问题。本教程将带你一步步掌握 sysfs 的基本用法,并通过实际截图理解设备在系统中的真实表现。 --- ## 一、sysfs 的基本结构 sysfs 通常挂载在 `/sys` 目录下,其核心目录包括: - `/sys/bus` – 按总线类型组织设备(如 platform、spi、i2c 等) - `/sys/devices` – 按设备树或硬件拓扑组织所有设备 - `/sys/class` – 按设备功能分类(如 input、net、gpio 等) - `/sys/block` – 块设备信息 - `/sys/firmware` – 固件信息 ### 示例目录结构 ![sysfs目录结构](http://img.318050.com/uploads/20260529/17800097556a18cb1bc45ef384655196.webp) 从图中可以看到,`/sys` 下包含了 `bus`、`class`、`devices` 等顶层目录。每个目录下的文件和子目录都对应内核中一个具体的 **kobject** 对象。 > **小提示:** 使用 `ls -l` 查看时,许多文件是符号链接,指向 `/sys/devices` 下的真实设备路径。 --- ## 二、通过 sysfs 查看设备详细信息 ### 2.1 查看 CPU 信息 RK3399 是双核 Cortex-A72 + 四核 Cortex-A53 的 big.LITTLE 架构。在 sysfs 中可以通过以下路径查看每个 CPU 核心的状态: ```bash ls /sys/devices/system/cpu/ ``` 每个核心对应 `cpu0`、`cpu1` 等子目录。进入某个核心目录,例如: ```bash cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq ``` 该文件输出当前 CPU 的运行频率(单位 kHz)。如果你看到类似 `1416000` 的数字,表示工作在 1.416GHz。 ![CPU频率信息](http://img.318050.com/uploads/20260529/17800097566a18cb1c0fa8a228718665.webp) > **常见问题:** > Q: 查看 `scaling_cur_freq` 时提示“No such file or directory”怎么办? > A: 通常是因为 CPU 调频驱动未加载或 cpufreq 子系统未启用。检查内核配置 `CONFIG_CPU_FREQ` 是否开启。 ### 2.2 查看内存和 DMA 信息 内存信息可以通过 `/sys/devices/system/memory/` 查看,但更常用的是 `/proc/meminfo`。不过 sysfs 中 `/sys/devices/system/edac/mc/` 提供内存错误记录(如果硬件支持)。对于 RK3399,常用的 DMA 设备信息在: ```bash ls /sys/class/dma/ ``` 每个 DMA 通道对应一个目录,其中 `device` 链接指向具体的 DMA 控制器。 ![DMA设备列表](http://img.318050.com/uploads/20260529/17800097566a18cb1c6b5e9548959213.webp) > **小提示:** 如果遇到 DMA 传输卡顿,可以检查 `/sys/class/dma/dma0chan*/bytes` 等文件获取传输统计。 ### 2.3 查看 GPIO 及其复用状态 RK3399 的 GPIO 管理非常关键。通过 sysfs 可以快速查看某个 GPIO 的输入/输出状态、复用功能等: ```bash ls /sys/class/gpio/ ``` 但要查看具体的 GPIO 控制器和引脚复用,通常需要访问 `/sys/kernel/debug/gpio`(需要挂载 debugfs)或者 `/sys/devices/platform/` 下对应的 pinctrl 节点。 ![GPIO sysfs节点](http://img.318050.com/uploads/20260529/17800097566a18cb1ca86a8112360562.webp) 图中展示了 `/sys/class/gpio/export` 和 `unexport` 文件,用于将内核空间的 GPIO 导出到用户空间进行控制。 > **常见问题:** > Q: 为什么我 `echo 100 > /sys/class/gpio/export` 后报错“Invalid argument”? > A: GPIO 编号必须是该 GPIO 控制器的有效编号,且该引脚未被其他驱动占用。先通过 `cat /sys/kernel/debug/gpio` 查看已使用的 GPIO。 ### 2.4 查看 I2C / SPI 总线设备 RK3399 有多个 I2C 和 SPI 控制器。通过 sysfs 可以枚举总线上挂载的设备: ```bash ls /sys/bus/i2c/devices/ ``` 每个条目如 `0-0048` 表示 I2C-0 总线上的设备,地址为 0x48。进入目录后可以查看 `name`、`driver` 等信息。 ![I2C设备信息](http://img.318050.com/uploads/20260529/17800097566a18cb1cec4ee059412862.webp) > **小提示:** 如果设备未正确注册,`name` 文件可能为空。此时检查设备树中对应的节点是否使能、电源是否正常。 --- ## 三、如何利用 sysfs 快速定位问题 ### 3.1 检查设备是否枚举成功 当一个硬件模块(如摄像头、WiFi 模块)不工作时,第一步是确认它在 sysfs 中是否存在: ```bash find /sys -name "*模块名*" 2>/dev/null ``` 或者根据设备树中的节点名称搜索: ```bash ls /sys/firmware/devicetree/base/ ``` ### 3.2 查看驱动绑定状态 每个设备都有一个 `driver` 符号链接,指向当前绑定的驱动。如果 `driver` 不存在,说明没有驱动匹配该设备。 ```bash ls -l /sys/devices/platform/fe310000.serial/driver ``` 输出类似 `.../fe310000.serial/driver -> ../../../bus/platform/drivers/serial-tegra` 表示绑定成功。 ### 3.3 动态配置参数 sysfs 还提供了许多可写属性,用于动态修改驱动行为。例如调整 GPIO 输出电平: ```bash echo 1 > /sys/class/gpio/gpio17/value # 将GPIO17输出高电平 ``` > **警告:** 动态修改可能导致系统不稳定,请确认你了解该属性的用途。 --- ## 四、常见问题与解答 ### Q1: 为什么 `ls /sys` 下有些目录是空的? **A:** 空目录通常表示对应子系统尚未被内核初始化或没有硬件设备。例如 `/sys/class/leds` 为空说明没有注册任何 LED 设备。检查内核模块是否加载:`lsmod | grep leds`。 ### Q2: 如何查看某个硬件的中断号? **A:** 使用命令 `cat /sys/kernel/irq/*/chip_name`,或者查看设备目录下的 `irq` 文件:`cat /sys/devices/platform/*/irq`。对于 RK3399,也可以用 `cat /proc/interrupts` 获取全局中断统计。 ### Q3: sysfs 中的文件权限是怎样的?为什么有些文件只读? **A:** 大多数 sysfs 属性是只读的,表示内核状态。可写属性通常用于配置,如 `brightness`、`power/control` 等。普通用户可能无法写入,需使用 `sudo` 或设置 udev 规则。 ### Q4: 如何在 sysfs 中找到某个设备的注册地址? **A:** 进入设备目录后,查看 `reg` 文件(设备树中定义的寄存器基址)或 `of_node` 符号链接。例如:`cat /sys/devices/platform/ff110000.i2c/of_node/reg` 可读取该 I2C 控制器的地址。 --- ## 总结 sysfs 是 RK3399 平台开发中最常用的调试工具之一。通过它你可以: - 查看 CPU、内存、DMA 等核心组件的实时状态 - 枚举总线设备并验证驱动绑定 - 动态控制 GPIO、电源管理等外设 - 快速定位硬件未注册、驱动不匹配等问题 建议开发者在日常工作中养成随时查看 sysfs 的习惯,结合 `dmesg` 和设备树,可以大幅提升调试效率。
来源:https://m.elecfans.com/article/2122275.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。