안녕하세요
오늘은 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 커널' 카테고리의 다른 글
| netfilter hook을 이용한 fw 만들기 - 2 (5) | 2023.12.30 |
|---|---|
| netfilter hook을 이용한 fw 만들기 (7) | 2023.12.18 |
| ubuntu 22.04 커널 빌드 (7) | 2023.12.03 |