본문 바로가기

linux 커널

리눅스 커널 모듈

안녕하세요 

오늘은 kernel 드라이버에 대해 포스팅했습니다.

 

앞으로도 kerenl 드라이버에 대해 계속 포스팅 할 예정입니다.

 

최종적으로 목표는 linux kernel 모듈을 이용한 IPS를 제작해보는게 최종목표입니다.

 

오늘은 간단하게 리눅스 커널 모듈을 어떻게 로드하고 간단하게 printk로 dmesg를 출력해볼 예정입니다.

 

디렉터리 구조


kernel_module/
├── hello.c
└── Makefile

 

Makefile

obj-m += hello.o
all:
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

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

 

 

hello.c

#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("hello");
static int __init hello_init (void)
{
    printk(KERN_INFO "Hello, Kernel Module!\n");
    return 0;
}
static void __exit hello_exit (void)
{
    printk(KERN_INFO "Goodbye, Kernel Module!\n");
}
module_init(hello_init);
module_exit(hello_exit);

커널모듈은 일반적인 유저영역의 프로그램과 다르게 main함수를 사용하지 않고 module_init함수를 통해 함수를 실행시킵니다.

위 파일들을 작성 후

make

make 명령을 통해 빌드해줍니다.

 

빌드된 hello.ko 모듈을 현재 커널에 load해줍니다.

 

insmod

커널에 load하기 위한 명령어 입니다.

insmod hello.ko 

 

lsmod

lsmod는 현재 load되어있는 모듈을 확인 할 수 있습니다.

lsmod를 통해 hello 모듈이 있는지 확인해줍니다.

 

rmmod

load되어있는 모듈을 제거하는 명령어입니다.

lsmod로 확인한 hello모듈을 제거할 수 있습니다.

 

dmesg

hello모듈이 잘 실행됐는지 확인하지 위해 해당 명령어를 통해 확인해줍니다.

printk함수에 들어간 

Hello, Kernel Module! 
Goodbye, Kernel Module!

이 입력되어 있다면 성공적으로 load와 unload된것입니다.

 

감사합니다.

'linux 커널' 카테고리의 다른 글