我对linux内核还不太熟悉,我正在尝试通过linux生成脉宽调制。API人谈到sysfs接口。我想用C语言实现一个用户空间程序,但使用脉宽调制迫使我使用命令行此外,在C语言中使用read,write是一个问题,因为当我使用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/*
是指向/sys/class/pwm/pwmchip0
的符号链接。
有趣的是,当您/sys/devices/soc0/amba/f8001000.timer/pwm/pwmchip0
一个符号链接将解析到真正的目录时,一些shell会保留符号链接名称作为当前目录。
但是目录符号链接的问题不应该是你的问题。一个愿意管理PWM设备的C程序不应该改变工作目录。而是打开具有完整路径的文件:
open("/sys/class/pwm/pwmchip0/npwm", O_RDONLY);
等等。
关于linux - 不带sysfs的PWM,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46160349/