2017-09-11 11 views
0

저는 리눅스 커널에 익숙하지 않습니다. 저는 리눅스를 통해 PWM을 생성하려고합니다. API 사용자는 sysfs 인터페이스에 대해 이야기합니다. C에서 사용자 공간 프로그램을 구현하고 싶습니다.하지만 PWM을 사용하면 명령 줄을 사용하도록 강요합니다. 또한, CD를 사용하고있을 때와 마찬가지로 C를 사용하여 읽기, 쓰기를 사용하는 것이 문제가됩니다. 경로 디렉토리가 변경됩니다. 따라서 경로가 가변적입니다. sysfs를 사용하지 않고 pwm_config()에 값을 전달할 수있는 방법이 있습니까? 아마도 ioctl을 통해? 그렇다면 절차는 무엇입니까? 응용 프로그램의 C 코드 : 기간 및 듀티 사이클 등의 기타 파일 등sysfs가없는 PWM

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 
+0

경로를 바꾸면 경로가 자동으로/sys/class/pwm/pwmchip0에서 /sys/devices/soc0/amba/f8001000.timer/pwm/pwmchip0으로 바뀌는 것을 의미합니다. – gPats

+0

'cd '하면 현재 디렉토리가 바뀌므로 다른 디렉토리에 대한 심볼릭 링크이며 일부 쉘은이를 수행합니다. 그러나 C 프로그램을 사용한다면 절대 경로를 사용해야하므로'/ sys/class/pwm/pwmchip0'을 열면 제대로 작동합니다. – rodrigo

답변

0

내가 아는 한, sysfs은 PWM에 대한 유일한 표준 사용자 공간 인터페이스입니다. 명령 줄에서 할 수있는 일은 C로 할 수 있습니다 (쉘은 결국 C로 작성됩니다).

cd과 관련된 문제는 실제로 문제가되지 않습니다. 안에 sysfs/sys/class/pwd/*에있는 디렉토리는 실제로 적절한 장치에 대한 기호 링크입니다. 귀하의 경우 /sys/class/pwm/pwmchip0/sys/devices/soc0/amba/f8001000.timer/pwm/pwmchip0에 대한 심볼릭 링크입니다.

재미있는 점은 cd 심볼릭 링크가 실제 디렉토리로 해석되지만 다른 쉘은 실제로 심볼릭 링크 이름을 현재 디렉토리로 유지하는 일부 쉘입니다.

하지만 symlinks 디렉토리와 관련된 문제는 문제가되지 않습니다. PWM 디바이스를 관리하고자하는 C 프로그램은 작업 디렉토리를 변경해서는 안됩니다. 대신 전체 경로로 파일을 엽니 다.

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

등등.

+0

안녕하세요 rodrigo, 나는 C에서 사용자 공간 응용 프로그램을 작성하려했으나/sys/class/pwm/pwmchip0/export를 열려고 시도 할 때 그런 파일이나 디렉토리를 얻지 못했습니다. – gPats

+0

@gPats : ls -l/sys/class/pwm/pwmchip0 /'? – rodrigo

+0

'lrwxrwxrwx 1 루트 루트 0 1 월 1 일 00:00 장치 -> ../../../f8001000.timer --w ------- 1 루트 루트 4096 1 월 1 일 00:00 내보내기 -r - r - r-- 1 루트 루트 4096 1 월 1 일 00:00 npwm drwxr-xr-x 2 루트 루트 0 1 월 1 일 00:00 전원 lrwxrwxrwx 1 루트 루트 0 1 월 1 일 00:00 하위 시스템 - > ../../../../../../class/pwm -rw-r - r-- 1 루트 루트 4096 1 월 1 일 00:00 uevent --w ---- --- 1 root root 4096 Jan 1 00:00 unexport ' – gPats