글
커널모듈 구조를 이용함으로서 디바이스 드라이버를 추가/삭제하는 작업이 쉬워졌다.
그러나 커널 모듈프로그램은 커널 레벨의 권한을 가지고 수행되므로 일반 응용프로그램 같은 운영체제의 보호를 받지 못한다.
(1) 커널 모듈과 관련한 유틸리티(명령어)
- insmod{module, ...} : 커널 모듈을 추가
- rmmod{module, ...} : 커널 모듈을 제거
- lsmod{module, ...} : 현재 적재된 모듈의 이름을 출력
- modproble{module, ...} : 모듈간의 의존성을 검사해서 필요한 커널 모듈을 적재한다.
- depmod : 모듈간의 의존성을 검사
(2) 커널 모듈 프로그래밍 시 필요한 매크로
- 응용프로그램에서 커널모듈(디바이스 드라이버)을 사용하고 있는데, 일방적으로 커널 모듈이 시스템에서 제거된다면,
응용프로그램은 비정상적인 종료를 하고, 이는 파일시스템의 손상으로 이어질 수 있다.
○ 사용하고 있는 프로그램의 갯수를 관리 할 필요가 있다.
- MOD_INC_USE_COUNT : 카운트 1증가 --> 커널 모듈 사용시 : open() 시스템 호출
- MOD_DEC_USE_COUNT : 카운트 1감소 --> 커널 모듈 사용 마칠때
- MOD_IN_USE : 현재 카운트가 0인지 아닌지 확인
- 커널모듈은 내부코드에 여러 심볼(함수명이나 변수명)들을 가지고 있는데, 이 심볼들은 커널모듈적재 시 자동으로 커널 심볼
테이블에 등록된다.
○ 이때 내부에서만 사용할 것을 굳이 커널 심볼테이블에 등록해서 다른 커널모듈에서 사용가능하게 할 필요가 없다.
그러면 오히려 심볼 관리가 힘들어 진다. 이를 매크로로 조절할 필요가 있다.
- EXPORT_NO_SYMBOLS : 커널모듈의 모든 심볼을 공개하지 않는다.
- EXPORT_SYMBOL(name) : name이라는 심볼만 공개
- EXPORT_SYMBOL_NOVERS(name) : name이라는 심볼을 버전정보를 제거하고 공개
- int main(int argc, char* argv[]) 처럼
○ 커널모듈에서도 메모리 적재시 MODULE_PARM(변수명, 타입) 매크로를 이용해서 인자를 넘겨줄수 있다.
○ 타입의 종류
- b : 1byte ( char, unsigned char, ...)
- h : 2byte ( short, unsigned short, ...)
- i : 4byte ( int, unsigned int, ...)
- l : 4byte ( long int, unsigned long int, ...)
- s : 문자열 (char 배열)
ex) MODULE_PARM(name, "s");
MODULE_PARM(count, "i");
※ 출처 : http://idkkangjs.blog.me/30091117058
'L inux > Device Driver' 카테고리의 다른 글
네트워크 디바이스 드라이버 - 리눅스 네트워크 (1) | 2012.04.12 |
---|---|
Invalid module format - insmod error (0) | 2012.03.15 |
디바이스 파일 생성 (0) | 2011.09.28 |
디바이스 파일과 드라이버 함수 연결 (0) | 2011.09.28 |
블록 디바이스 / 네트워크 디바이스 (0) | 2011.09.28 |
RECENT COMMENT