驱动中/sys/class/pwm/ 节点如何生成
时间: 2023-07-19 07:47:14 浏览: 209
在驱动模块初始化函数中实现设备节点的自动创建
在 Linux 内核中,PWM 驱动程序通常会通过设备树(Device Tree)来描述硬件的信息,包括 PWM 控制器的地址、中断、时钟等。驱动程序会解析设备树,并根据设备树中描述的信息来初始化 PWM 控制器。在设备树中,PWM 控制器通常会被描述为一个 platform 设备,而 /sys/class/pwm/ 节点则是通过 platform 设备注册到系统中的。
当 PWM 控制器被成功初始化后,驱动程序会调用 sysfs 接口来注册 /sys/class/pwm/ 节点。具体来说,驱动程序会调用 pwmchip_add() 函数来注册 PWM 控制器,并在此过程中创建 /sys/class/pwm/ 节点。该函数会将 PWM 控制器作为一个 PWM chip 注册到内核 PWM 子系统中,并分配一个唯一的编号(PWM chip ID),该编号可以用于在 sysfs 中访问 PWM 控制器。例如,/sys/class/pwm/pwmchip0/ 目录下的文件就对应着 PWM chip ID 为 0 的 PWM 控制器。在 /sys/class/pwm/pwmchipX/ 目录下,还会有一个叫做 export 的文件,通过向该文件写入 PWM 通道号,可以将该 PWM 通道导出为一个独立的 PWM 设备,此时会在 /sys/class/pwm/pwmchipX/ 目录下创建一个名为 pwmY 的目录,表示导出的 PWM 设备。例如,向 /sys/class/pwm/pwmchip0/export 文件写入 0,就可以将 PWM chip ID 为 0 的 PWM 控制器的第一个 PWM 通道导出为一个独立的 PWM 设备,此时会在 /sys/class/pwm/pwmchip0/ 目录下创建一个名为 pwm0 的目录。在该目录下,可以通过 sysfs 接口来配置该 PWM 通道的参数,例如占空比、周期等。
阅读全文