School Lecture Study/Linux System Application Design

4-2. Kernel module

vㅔ로 2022. 12. 19. 23:59
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