2013-04-22 4 views
2

저는 리눅스 커널 모듈을 만들고 있는데, proc 파일을 동적으로 생성하고 합리적인 방법으로 사용하는 방법이 있는지 궁금합니다.proc 파일을 동적으로 생성 하시겠습니까?

list_head으로 구조체를 생성하는 데 아무런 문제가 없지만 여기서 궁극적 인 문제는 동일한 변수가 다른 동일한 변수로 실행되도록하려는 것입니다. 즉, 각 파일에 대해 커널 메모리의 다른 버퍼에 쓰기를 끝내는 write_proc을 갖고 싶습니다 (그리고 그 파일에서 읽는 read_proc).

나는이 어려움에 봉착하는 이유는 PROC 파일에서 쓰기 읽기 기능 protoypes가 /이 동작을 허용하지 않는 것이다 : 나는 정적의 무리를 만들 수 있습니다, 지금

int read_proc(char *buf, char **start, off_t offset, int count, 
       int *eof, void *data) { 

int write_proc(struct file *file, const char *buf, 
       unsigned long count, void *data) { 

을 함수를 사용하고 충분하게 할당했는지 확인하십시오. 그러나 더 세련된 솔루션이 있는지 궁금합니다.

$ echo "file1" > /proc/mydir/create 
$ echo "file2" > /proc/mydir/create 
$ ls /proc/mydir 
    create file1 file2 
$ echo "1" > /proc/mydir/file1 
$ echo "5" > /proc/mydir/file2 
$ cat /proc/mydir/file* 
    1 
    5 

가 난 그냥 떨어져 간 적이 : 여기

(나는 심지어 시작 아무 생각이 없기 때문에 내가 코드 MWE이없는) 나는 그것이 유저 랜드에서보고 싶은 방법의 예 깊은 끝? 내가 아주 일반적인 호환성 (2.6.33+)을 찾고 있어요

답변

1

궁극적 인 문제는 동일한 변수가 다른 변수와 똑같은 기능을 수행하게하려는 것입니다.

이미/proc 파일을 만들 수 있다고 가정합니다. Ilya이 말하기를, create_proc_entry은 작업을 수행합니다 (더 나은 대안이 있음에도 불구하고).

나는이 어려움에 봉착하는 이유는 PROC 파일에서 쓰기 읽기 기능 protoypes이/

그럼 실제로이하는이 동작을 허용하지 않는 것이다. 당신도 함수의 프로토 타입을 보면 :

int read_proc(char *buf, char **start, off_t offset, int count, 
       int *eof, void *data); 
         ^^^^^^^^^^ 

int write_proc(struct file *file, const char *buf, 
       unsigned long count, void *data); 
            ^^^^^^^^^^ 

당신은 일반적인 void *입니다 data라는 매개 변수를 볼 수 있습니다. 이 매개 변수를 사용하면 같은 함수를 다른 변수와 함께 사용할 수 있습니다.

이제 create_proc_entry은이 기능에 가장 적합하지 않습니다. 사실 대신/proc 함수의 더 나은 명명 체계와 일치합니다. the source code itself을 보면 create_proc_data의 서명과 작동 방식을 볼 수 있습니다. 이 함수를 사용하여/proc 파일의 작업 영역에 대한 포인터를 제공 할 수 있습니다. 이 포인터는 읽기 및 쓰기 기능으로 전달됩니다.

이것은 예를 들어 pthread이 작동하는 방식과 기능 포인터를 콜백으로 사용하는 많은 라이브러리와 매우 유사합니다.


1 내가 잘못 본게 아니라면 는 create_proc_entry이되지 않습니다.

+0

내가 제공 한 링크를 통해/proc 구현을 살펴 보는 것이 좋습니다. 매우 간단하고 유익합니다. 실제로 불완전한 문서 나 오래된 블로그 게시물에서 정보를 찾으려고 시도하는 것보다이를 읽고 읽는 것이 더 쉽습니다. – Shahbaz

+0

답변을 수락하기가 너무 늦어서 죄송합니다. 최근에이 문제를 해결할 시간이별로 없었습니다. 웬일인지, 그것이 나를 얼굴에 응시하고 있었지만 'data'물건은 완전히 나의 마음을 미끄러 뜨렸다! 모든 세부 사항 및 링크에 다시 한번 감사드립니다! – zje

0

당신이 create_proc_entry 기능을 찾고있는 것 같다. 런타임에 proc 항목을 작성할 수 있습니다. 예를 들어 details을 참조하십시오.

관련 문제