2011-02-18 2 views
1

/proc을 통해 커널과 통신하는 사용자 수준 프로그램을 얻으려고합니다. 커널 코드의 다른 부분에서/proc fs 변수에 액세스

나는 tldp의 지시에 따라, 성공적으로 유저 랜드에서 proc 파일에 사용자 지정 proc 파일을 생성 insmod 명령에 동적으로로드 (에코) 읽기 (고양이) 쓸 수 있었다.

이제 내 질문은 커널의 다른 부분 (예 : 시스템 호출 인프라)에서/proc 변수 (바이트 버퍼)에 액세스하는 방법입니까? 사용자 정의 proc 파일은 동적으로로드되고 링크되므로 정적으로 컴파일 된 커널 코드에서 어떻게 참조 할 수 있습니까?

시스템 사양 : 우분투 10.10은 맥북 프로 13 "(2009 년)에 VM웨어 퓨전에서 실행

편집 :. 타당한 코드를 (요청에 의해) -

procfile.c

//This function is called when the module is loaded 
int init_module() 
{ 
    /* create the /proc file */ 

    EXPORT_SYMBOL(procfs_buffer); 
    EXPORT_SYMBOL(procfs_buffer_size); 
... 
... 
} 

get_procvariable.c (커널의 다른 부분에서)

나에게 알려주기 바란다. 자세한 내용이 필요하면 omments를 클릭하십시오. 미리 감사드립니다.

+0

아래에서 몇 가지 힌트를 얻은 자신의 질문에 대답했습니다 : – Warr1ck

답변

1

위의 답변에서 몇 가지 힌트를 복용, 내 자신의 질문에 대답 :

내가 (말 INT kernel_var = 0;) 변수를 선언해야한다는되었다 된 중요한 건 커널 자체 내에서 (그리고 procfs 오버 헤드 모듈 내에서, 내가 잘못했던 것처럼). 그런 다음 EXPORT_SYMBOL로이를 내 보낸다. EXPORT_SYMBOL은 글로벌 모듈 심볼 테이블에 그것을 추가하고 마지막으로 extern 변수로 오버 헤드 procfs 모듈에 포함시킨다.

본질적으로 오버 헤드 변수는 이미 커널 내에 존재하며 단순히 procfs 모듈을 사용하여 extern 변수로 참조하고 값을 수정합니다.

나는이 가설을 정리하고 매력처럼 작동했다.

0

EXPORT_SYMBOL을 사용하여 모듈에서 심볼을 내 보낸 다음 커널의 다른 부분에서 사용하십시오.

+0

좀 더 자세히 설명해 주시겠습니까? 커널의 다른 부분에서 extern으로 선언해야합니까? 나는 이것을 시도하고 '정의되지 않은 참조'오류가 발생했습니다. – Warr1ck

+0

관련 코드의 일부만 붙여 넣기하면 도움이됩니다. – Zimbabao

+0

코드의 관련 부분이 원래 게시물에 추가되었습니다. – Warr1ck

1

정적으로로드 된 코드 (예 : syscalls)에서 동적으로로드 된 코드 (예 : 모듈)를 참조하지 마십시오. 정적으로로드 된 코드를 커널에 두는 경우 정적으로로드 된 다른 코드에 의해 그 구성이 노출되어야합니다. 그러나 구현하고있는 기능이 무엇인지 알지 못하면 더 구체적인 조언을 제공하기가 어렵습니다.

관련 문제