我对linux内核非常陌生,我正试图通过linux来生成PWM。API man讨论了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发布于 2017-09-11 18:21:13
据我所知,sysfs是唯一的标准用户空间接口。但是从命令行可以做的任何事情都可以用C来完成(毕竟shell是用C编写的)。
cd存在的问题实际上并不是一个问题。在sysfs中,/sys/class/pwd/*中的目录实际上是指向适当设备的符号链接。在您的例子中,/sys/class/pwm/pwmchip0是指向/sys/devices/soc0/amba/f8001000.timer/pwm/pwmchip0的符号链接。
有趣的是,有些shell,当您的cd符号链接将解析到真正的目录,但其他shell实际上将保持符号链接名称为当前目录。
但是,目录符号链接的问题对您来说不应该是一个问题。愿意管理PWM设备的C程序不应更改工作目录。相反,使用完整路径打开文件:
open("/sys/class/pwm/pwmchip0/npwm", O_RDONLY);诸若此类。
https://stackoverflow.com/questions/46160349
复制相似问题