2012-07-30 3 views
1

커널 모듈에서 커널 링 버퍼를 읽으려고합니다./proc/kmsg 및 dmesg 출력이라고도합니다.커널 모듈에서 dmesg 읽기

주위를 둘러 보니이 호출이 sys_syslog()입니다. 내가 읽은 것에서 dmesg는 printk.c에있는 do_syslog()를 사용하는 syslog()를 사용합니다.

내가 grep하고 do_syslog()가 linux/syslog.h에 정의되어 있다는 것을 알기 때문에이 파일을 포함시킵니다. 테스트 모듈

실제 통화하는 do_syslog()는 다음과 같다 : temp_buffer 단지 숯 temp_buffer [1,024]이며

read_bytes = do_syslog(2, temp_buffer, 1024, 0); 

테스트 목적을위한 것. 'testing.ko를'삽입 오류 :

insmod 명령 :

이 프로그램은 내가 실패 모듈을로드하려고하지만 때, 컴파일 -1 내가 볼 dmesg 명령에서

모듈에서 알 수없는 기호 : "알 수없는 기호 do_syslog (오류 0) "

왜 알 수없는 기호입니까? 무언가와 연결해야합니까?

obj-m += testing.o 

all: 
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules 

답변

1

당신은 수출이 기호가있는 커널을 다시 컴파일 할 필요가 다음과 같이

메이크입니다.

EXPORT_SYMBOL (do_syslog); 
+0

고마워요! 커널을 다시 컴파일 할 필요없이 이것을 할 수 있습니까? 확실히 모든 정상적인 커널에 존재하는 표준 기능이 있어야합니다. 덧붙여서, 나는 sys_read()와 sys_open()에 대해서도 알려지지 않은 심볼을 얻는다. – csstudent2233

+0

@ csstudent2233 : 기호를 내 보내지 않으면 불가능합니다 ('/ dev/kmem'을 부주의로 계산하지 않는 경우). sys_read와 sys_open은 이미 export되어 있어야한다. – InternetSeriousBusiness

관련 문제