컴퓨터공부/Linux & Unix

모듈에서 사용할 수 있는 함수

achivenKakao 2006. 8. 21. 02:53

모듈에서 사용할 수 있는 함수
Writer: 이호 (flyduck@linuxkernel.net) Date & Time: 2003-03-26 14:57:22

Q: 모듈에서는 어떤 함수를 사용할 수 있나요?

A: 모듈은 커널모드에서 수행되는 프로그램으로 커널에 전적으로 의존하며, 커널에서 제공하는 함수와 변수들만 사용할 수 있습니다. 그것도 커널에서 정의된 모든 함수와 변수가 아니라, 커널에서 모듈이 사용할 수 있도록 export 해 준 것들만 사용할 수 있습니다. ksyms -a 명령이나 cat /proc/ksyms 명령을 통해서 현재 사용할 수 있는 심볼들의 목록을 알 수 있습니다. 이들 심볼들은 커널 그 자체와 로드된 모듈이 제공하는 것입니다. 커널 그 자체에서 제공하는 심볼은 커널 소스의 kernel/ksyms.c에 정의되어 있습니다. 그리고 모듈을 로드할 때 모듈에서 export하는 심볼들이 심볼 테이블에 등록됩니다.

커널에서 정의되어 있지만 심볼 테이블에 등록안된 심볼들을 참조하고 싶다면, kernel/ksyms.c에 EXPORT_SYMBOL() 매크로를 이용하여 등록한 후에 커널을 다시 컴파일하여 부팅하면 됩니다. 이를 참조하는 모듈은 당연히 다른 시스템에서는 작동하지 않지만 커널 내부를 들여다보기 위해서 필요한 경우가 있습니다.

모듈에서는 일반적인 C 라이브러리를 사용할 수 없습니다. 모들은 링크를 하지 않은 object 파일 형태로, 링크를 해야 하는 C 라이브러리를 사용할 수 없습니다. 커널도 C 라이브러리를 사용할 수 없으며, 필요한 함수는 커널에 직접 구현을 해야 합니다.

사용할 수 있는 심볼로 등록되지 않았지만 사용할 수 있는 함수들이 있는데, strcpy()같은 string 처리 함수가 대표적인 예입니다.이들은 헤더파일에서 매크로로 정의가 되어 있어 함수로 참조하지 않기 때문에 사용이 가능합니다.

by flyduck 2000/11/06, 2000/05/26

Add a comment


Last Updated : 2003/03/26
First Written : 2003/03/07