728x90
중앙대학교 3-2 리눅스 응용 설계 (손용석 교수님) 과목 정리입니다.
What is Kernel modules in Linux
- module은 필요에 따라 kernel에 load되거나 unload 될 수 있는 code 조각
- system을 reboot할 필요 없이 kernel의 functionality를 확장시킬 수 있다.
- module의 하나인 device driver는 kernel이 system에 연결되어 있는 hardware에 접근할 수 있도록 한다.
- module 없으면, monolithic kernel을 구축하고 새로운 기능을 kernel image에 직접 추가해야 한다.
- 게다가 larger kernel을 갖고 있다면, 새로운 기능이 추가될 때마다 매번 kernel을 rebuild, reboot하는 것은 불편하다.
- Lodable kernel module (LKM)은 runtime에 Linux kernel에 code를 추가/삭제하는 mechanism
- module이 없으면, Linux kernel에 코드를 추가하기 위해서는 source code나 file을 kernel source tree에 추가하고 kernel을 recompile해야 한다.
- module이 있으면, 우리는 Linux kernel이 실행되고 있는 동안 code를 추가할 수 있다.
- 이런 방식으로 추가하는 chunk of code를 loadable kernel module이라고 한다.
- kernel이 hardware와 통신할 수 있도록 하는 device driver에 이상적이다.
- module은 /lib/module directory에 .ko (vmodule object) 확장자를 갖는 파일
Summary
- LKM이 없다면, 개발자들은 새로운 기능이 필요할 때마다 base kernel을 rebuild / reboot해야 한다 → compile time 최대화
- LKM이 있다면, 개발자들은 module rebuild만 하면 된다. → compile time 최소화
Major Module Commands
lsmod
- kernel에 현재 설치되어 있는 module의 list를 보여준다
insmod
- kernel에 module을 삽입할 때
rmmod
- running kernel의 loadable module을 unload
- 다른 module에 의해 참조되지 않고, module이 사용되지 않는 경우에만 module unload 가능
modinfo
- Linux kernel module에 대한 정보를 보여준다.
How to make and compile kernel module
- module의 source code는 kernel source tree 바깥에 위치할 수 있다.
- makefile은 module source directory 내부에 둔다.
- 컴파일 후에, 컴파일된 모듈은 .ko 확장자를 갖는다.
Module initialization and exit
- module_init(hello_module_init)
- entry point 초기화
- module insertion시에 실행될 함수 지정
- hello_module_init이 module loading 시에 호출된다.
- module_exit(hello_module_cleanup)
- exit entry point
- module 삭제시에 실행될 함수 지정
- hello_module_cleanup()이 module unloading 시에 호출된다.
- Kernel module은 적어도 함수 두 개는 필요하다. (init, exit 시 호출)
Launching a kernel module
- kernel code를 실행하기 위해 root privileges 필요
- inmod module_name.ko → module insert
- module is loaded and init function is executed
- rmmod module_name
- module exit function is called before unloading
728x90
'School Lecture Study > Linux System Application Design' 카테고리의 다른 글
6-1. Synchronization (1) (0) | 2022.12.20 |
---|---|
5. Process and Thread (0) | 2022.12.20 |
4-1. Design Principle of Linux Kernel (0) | 2022.12.19 |
3-2. System calls (0) | 2022.12.19 |
3-1. Linux Commands and Tools (0) | 2022.12.10 |