이 예제는 ubuntu 18.10에서 진행된다.
여기서 다운받아서 vmware로 가상머신 하나 만들어줬다.
https://old-releases.ubuntu.com/releases/18.10/
gcc가 설치되어 있어야 한다.
lazenca0x0@ubuntu:~$ uname -a
Linux ubuntu 4.18.0-11-generic #12-Ubuntu SMP Tue Oct 23 19:22:37 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
lazenca0x0@ubuntu:~$ gcc --version
gcc (Ubuntu 8.2.0-7ubuntu1) 8.2.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
lazenca0x0@ubuntu:~$
이후 커널 모듈 빌드를 위해 다음과 같 패키지를 설치한다.
sudo apt-get install build-essential make
패키지 설치에 약간의 이슈가 있어서 아래 글들을 참조했다.
https://superuser.com/questions/1527250/apt-update-error-with-ubuntu-18-10-cosmic-version
https://kkn1220.tistory.com/123
라젠카에서 제일 간단한 Kernel Module 코드(simple.c)를 제공한다.
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
int init_module(void) {
printk(KERN_INFO "Hello world - Lazenca0x0.\n");
return 0;
}
void cleanup_module(void) {
printk(KERN_INFO "Goodbye world - Lazenca0x0.\n");
}
make 명령을 위한 Makefile를 작성한다.
obj-m += sample.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
주의할 점은 all:, clean: 다음 줄에 오는 것은 space가 아닌 tab으로 들여쓰기를 해줘야 한다.
이제 다음과 같이 make를 실행하면 Kernel module인 ".ko" 확장자를 가지는 파일이 생성된다.
modinfo 명령어를 이용하여 생성된 Kernel module의 정보를 확인 할 수 있다.
insmod 명령어를 이용하여 Linux Kernel에 Module을 등록할 수 있다.
이후 lsmod 명령어를 이용하여 Linux Kernel에 등록된 Module들을 확인 할 수 있다.
dmesg 명령어를 이용하여 Module에서 출력하는 메시지를 확인 할 수 있다.
("sample.ko" Module이 Kenel에 삽입된 후 "Hello world - Lazenca0x0." 메시지가 출력됨)
rmmod 명령어를 이용하여 Linux Kernel에 등록된 Module을 제거 할 수 있습니다.
("sample.ko" Module이 Kenel에 제거된 후 "Goodbye world - Lazenca0x0." 메시지가 출력됨)
https://www.lazenca.net/pages/viewpage.action?pageId=23789735
'background > linux kernel' 카테고리의 다른 글
[Lazenca][Development of Kernel Module] 03.ioctl(Input/Output control) (0) | 2024.03.28 |
---|---|
[Lazenca][Development of Kernel Module] 02.Character Device Drivers (0) | 2024.03.28 |
[Linux Kernel] Device Driver (0) | 2024.03.28 |
fork-exec (1) | 2022.10.11 |
시스템 호출(system call) (0) | 2022.09.06 |