ARM보드 - 커널 모듈적재
프로그래밍/Embedded System 2009. 3. 20. 16:13 |
커널 모듈(Kernel Module) 이란?
시스템 부팅 후에 동적으로 loading 할 수 있는 커널 구성요소. 커널을 다시 컴파일 하거나 시스템 리부팅 할 필요 없이 커널의 일부분을 교체하는 것이 가능하며, 디바이스 드라이버, 파일 시스템, 네트워크 프로토콜 등이 모듈로 제공된다.
컴파일한 커널 버전 정보가 들어가야 하고, 현재 실행되고 있는 커널 버전과 일치해야 한다. <linux/module.h>에 정의되어 있으며, 모듈 정보는 전체 모듈에서 하나만 존재해야 한다. #include <linux/module.h> /* 모든 모듈에 필요 */ int hello_init(void) { // 모듈이 로딩될 때 호출 void hello_exit(void) { // 제거 될 때 호출 module_init(hello_init); MODULE_LICENSE(“GPL”);
일반 응용 프로그램과의 차이점
main() 함수가 없으며 커널에 로딩 및 제거 될 때 불러지는 함수가 존재 한다.
Loading 시 - int init_module(void) 함수 호출
Unloading 시 - void cleanup_module() 함수 호출
커널에 적재할 파일작성
hello.c 작성 br>
/* hello.c */
#include <linux/kernel.h> /* printk() 등에 필요 */
printk (“Hello world\n”);
return 0;
}
printk (“Goodbye world”);
}
module_exit(hello_exit);
Makefile 작성 br>
obj-m := hello.o |
커널에 모듈 적재 및 확인(insmod, lsmod, rmmod)
생성된 모듈을 로딩
# rx hello.ko |
시리얼 통신(x모뎀)을 통해 타겟으로 컴파일한 ko 파일 전송을 하도록 한다.
# insmod hello.ko |
커널에 적재된 모듈 목록 보기
# lsmod |
모듈 제거
# rmmod hello |
모듈 적재와 제거 시에 원래 의도했던 메시지들이 출력되는 지 확인
참조 PPT(국민대학교 임베디드 랩, KESL)