2014-11-07 19 views
15

create_proc_entry() 함수를 사용하여/proc 디렉토리를 만들려고합니다. 코드를 컴파일하려고하면 다음 오류가 발생합니다. 'create_proc_entry'함수의 암시 적 선언.'create_proc_entry'함수의 암시 적 선언

#include <linux/module.h> 
#include <linux/kernel.h> 
#include <linux/proc_fs.h> 
#include <linux/string.h> 
#include <linux/vmalloc.h> 
#include <linux/uaccess.h> 

I가 컴파일하기 위해 노력하고있어 시스템의 커널 버전은 다음과 같습니다 :

이 내가 내 .c 파일에 포함 된 한 헤더는 3.10.33-g7954807-더러운

이 메서드를 호출하는 데 필요한 헤더가 누락 되었습니까? 아니면 내 버젼의 커널에서이 메소드가 더 이상 사용되지 않을까?

답변

20

/proc 파일 시스템이 3.10에서 리팩토링되었으므로 찾고자하는 기능이 제거되었으므로 완전한 기능을 갖춘 proc_create 기능 군을 사용해야합니다. 서명은 다릅니다.

3.10 버전 : http://lxr.free-electrons.com/source/include/linux/proc_fs.h?v=3.10

3.9 버전 : 당신은 책을 리눅스 디바이스 드라이버 4 완전한 기능을 갖춘/proc 디렉토리 기능을 사용하여 더 많은 설명을 찾을 수 있습니다

, 또는 당신이 짧은 솔루션을 원하는 경우, 이 링크 (https://github.com/jesstess/ldd4/blob/master/scull/main.c)를 확인하면 struct file_operations이 어떻게 사용되었는지 확인할 수 있습니다. 구조체의 모든 필드를 설정할 필요가 없습니다.

+0

proc_create를 사용하려면 file_operations 구조체를 만들어야합니다. .write 멤버에 대한 콜백을 생성하는 명명법은 무엇입니까? – theNoobProgrammer

+0

@theNoobProgrammer 나는 대답을 편집 했으므로 도움이 되길 바랍니다. –

+0

이 링크의 메서드는 내 목적에 과도한 것 같습니다. 필자는 본질적으로 이것을 시도하고있다 : http://www.ibm.com/developerworks/linux/library/l-proc/index.html. 나는 이것을 나의 주인에게서 돌릴 수 있었다. 한번 마운트 된 생성 된 디렉토리 (/ proc/fortune)는 쓰고 읽을 수 있습니다. 그러나 내가 개발중인 장치에는 create_proc_entry()가 없지만 proc_create()가 있습니다. 나는 단순히 읽기/쓰기 콜백을 file_operation 구조체를 사용하기 위해 링크에서 변경하려고 시도하고있다. 필자는 순차적 인 파일 읽기로 전체 작업을 수행 할 필요가 없다고 생각합니다. – theNoobProgrammer

관련 문제