没有 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);
等等。
我是 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
.
有趣的是,一些 shells,当你 cd
一个符号 link 将解析到真实目录,但其他 shells 实际上会保留symlink 名称作为当前目录。
但是目录 symlinks 的问题对您来说应该不是问题。愿意管理 PWM 设备的 C 程序不应更改工作目录。而是打开具有完整路径的文件:
open("/sys/class/pwm/pwmchip0/npwm", O_RDONLY);
等等。