linux kernel Module programming #1 (리눅스 커널 모듈 프로그래밍)

커널은 기본적으로 두가지로 나누어집니다.
첫번째로는 Monolithic-Kernel(일체형)이 있고 Micro Kernel이 있습니다.

  • Monolithic-Kernel 
    • 리눅스나 윈도우등에서 사용되는 Monolithic-Kernel은 일체형 커널로써 프로세스관리나 메모리관리 파일시스템등이 커널에 포함되어 있습니다. 그래서 운영체제의 기능을 불러오기 위해선 시스템 콜을 이용합니다.
  • Micro-Kernel 
    • 커널을 필요한 만큼만 남겨서 소영화 한 것으로 주로 임베디드 시스템에 사용됩니다. 주로 처리제어나 장치 구동 등 하드웨어에 의존하는 기능, 실시간 처리에 필요한 기능만 갖춥니다.

기본적으로 일체형 커널을 사용하게 되면 커널의 일부를 수정했을때 다시 커널 컴파일을 해야한다는 단점이 있습니다.

그 단점을 해소하기 위해 커널에 동적으로 코드를 로드, 언로드하는 것이 모듈 프로그래밍 입니다.

1. 먼저 module-init-tools 패키지를 설치해줍니다.



2. hello.c 파일을 작성줍니다.



init_hello 함수는 모듈이 시스템에 로드될때 동작합니다.
exit_hello 함수는 모듈이 시스템에서 제거될때 동작합니다.

3. Makefile 파일을 작성해줍니다.



4. 작성이 끝났으면 make 명령어를 실행해줍니다.



5. 파일이 생성된 것을 확인 할 수 있습니다.



6. insmod를 이용하여 모듈을 커널에 올리고 lsmod를 이용하여 확인해줍니다.



7. rmmod를 이용하여 모듈을 커널에서 내려주고 lsmod를 이용하여 확인해줍니다.



8. dmesg를 이용하여 동작을 확인합니다.