'RX'에 해당되는 글 1건

  1. 2009.03.20 ARM보드 - 커널 모듈적재


커널 모듈(Kernel Module) 이란?

시스템 부팅 후에 동적으로 loading 할 수 있는 커널 구성요소. 커널을 다시 컴파일 하거나 시스템 리부팅 할 필요 없이 커널의 일부분을 교체하는 것이 가능하며, 디바이스 드라이버, 파일 시스템, 네트워크 프로토콜 등이 모듈로 제공된다.

컴파일한 커널 버전 정보가 들어가야 하고, 현재 실행되고 있는 커널 버전과 일치해야 한다. <linux/module.h>에 정의되어 있으며, 모듈 정보는 전체 모듈에서 하나만 존재해야 한다.


일반 응용 프로그램과의 차이점

main() 함수가 없으며 커널에 로딩 및 제거 될 때 불러지는 함수가 존재 한다.
Loading 시 - int init_module(void) 함수 호출
Unloading 시 - void cleanup_module() 함수 호출


커널에 적재할 파일작성

hello.c 작성


/* hello.c */

#include <linux/module.h> /* 모든 모듈에 필요 */
#include <linux/kernel.h>   /* printk() 등에 필요 */

int hello_init(void) { // 모듈이 로딩될 때 호출
 printk (“Hello world\n”);
 return 0;
}

void hello_exit(void) { // 제거 될 때 호출
 printk (“Goodbye world”);
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE(“GPL”);

Makefile 작성


#Makefile

obj-m   := hello.o
 
KDIR    :=$(커널 소스가 설치된 절대 경로)
PWD     :=$(shell pwd)
 
all:
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
       
clean:
        rm -rf *.ko
        rm -rf *.mod.*
        rm -rf .*.cmd
        rm -rf *.o



커널에 모듈 적재 및 확인(insmod, lsmod, rmmod)

생성된 모듈을 로딩

# rx hello.ko


시리얼 통신(x모뎀)을 통해 타겟으로 컴파일한 ko 파일 전송을 하도록 한다.


# insmod hello.ko


커널에 적재된 모듈 목록 보기

# lsmod


모듈 제거

# rmmod hello 


모듈 적재와 제거 시에 원래 의도했던 메시지들이 출력되는 지 확인


참조 PPT(국민대학교 임베디드 랩, KESL)



Posted by 리트모스
: