没有 sysfs 的 PWM

PWM without sysfs

我是 linux 的新手 kernel.I 我正在尝试通过 linux 生成 PWM。 API 人谈论 sysfs 接口。我想在 C 中实现一个用户空间程序。但是使用 PWM 迫使我使用命令行。此外,使用读、写在 C 中是一个问题,因为当我使用 cd 时,它正在更改路径目录。 因此路径是可变的。有什么方法可以在不使用 sysfs 的情况下将值传递给 pwm_config() 吗?也许通过ioctl?如果是,那么程序是什么? 应用程序 C 代码:

void main(){

    int export = open("/sys/class/pwm/pmwchip0/export",O_WRONLY);
    int period,duty_cycle,enable;

    if(export == -1)
    {
        perror("Export:");
    }

等等其他文件,如周期和占空比。

当我尝试 运行 我的应用程序时,出现以下错误。

Export:: No such file or directory
Export_write: Bad file descriptor
Period_write:: Bad file descriptor
Duty_cycle_write:: Bad file descriptor
Enable_write:: Bad file descriptor

据我所知,sysfs 是 PWM 的唯一标准用户空间接口。但是您可以从命令行执行的任何操作都可以在 C 中完成(shell 毕竟是用 C 编写的)。

您遇到的 cd 问题实际上不是问题。在 sysfs 中,/sys/class/pwd/* 中的目录实际上是正确设备的符号 link。在你的情况下 /sys/class/pwm/pwmchip0/sys/devices/soc0/amba/f8001000.timer/pwm/pwmchip0.

的符号link

有趣的是,一些 shells,当你 cd 一个符号 link 将解析到真实目录,但其他 shells 实际上会保留symlink 名称作为当前目录。

但是目录 symlinks 的问题对您来说应该不是问题。愿意管理 PWM 设备的 C 程序不应更改工作目录。而是打开具有完整路径的文件:

open("/sys/class/pwm/pwmchip0/npwm", O_RDONLY);

等等。