본문 바로가기
코스웨어/12년 내장형하드웨어

2012.10.15 리눅스 커널 수업 정리 자료입니다.(모듈)

by 알 수 없는 사용자 2012. 10. 15.
728x90
반응형

모듈과 일체형 커널

운영 체제의 커널은 크게 1. 마이크로 커널 2. 일체형 커널(Monolithic) 로 나뉜다.

  1. 일체형 커널의 장단점 : 모든 기능이 하나의 큰 프로그램(커널)로 구성된다.

각 자료 구조를 자유롭게 공유할 수 있지만, 상호 의존성이 높아져서 일부의 잘못으로

전체 커널이 중지 될수 있다.

단, 규모가 커질수록 개발과 디버깅이 어려워진다는 단점이 있다.

  1. 마이크로 커널(Micro Kernel) 장단점 : 중요한 부분만 핵심(core)로 남겨놓고,

    각 서브 시스템마다 프로세스가 할당되어 서비스를 제공하는 방식.

    각 서브시스템이 개별 프로세스로 수행되므로 서브 시스템에 문제가 발생한 경우

    해당 서브 시스템만 교체하면 되기 때문에 시스템 전체에 영향을 주지 않는다.

마이크로 커널과 일체형 커널을 합친 형태가 윈도우 NT의 마크 커널 기반에 서브 시스템

일부가 커널에 포함 되어 하이브리드 커널로 분류 된다.

리눅스도 일체형 커널로 되어 있지만 모듈을 도입함으로써 일부를 변경할수 있게 되었다.

초기 리눅스는 새로운 하드웨어를 추가하려면 다시 컴파일 해야 했지만,

현재의 리눅스는 동적으로 커널 안에 코드를 삽입하고 제거 할수 있는 방법이 개발 되었고,

오늘날의 커널 모듈이 되어 디바이스 드라이버로 쓰이게 되었다.

모듈 개발

<모듈개발과정>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

모듈은 원하는 프로그램을 작성, 컴파일만 하면 된다. 일반 C와 절차는 같지만 main함수가 없고,

표준 C라이브러리를 사용할수 없으며, 실수 연산을 할수 없다.

 

 

모듈 개발 절차와 구성

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

모듈에서는 커널과 관련된 자료 구조와 printk()함수 등이 정의된 kernel.h헤더파일과 모듈과 관련된

자료구조와 매크로가 정의된module.h 헤더파일을 사용한다.

자원의 초기화 작업은 init_module()에 작성

정리와 관련된 코드는 cleanup_module()에 작성

init_module()함수는 insmod명령을 실행할 때 수행된다. 반환값이 0이면 모듈이

커널 영역에 로드되지만, 다른 값이면 실패 한다.

cleanup_module()함수는 rmmod명령을 수행할 때 실행되며, 반환값이 없는 것이 특징

이들 함수는 __init과 __exit 가 있는데 이들은 매크로로 정의 되어 있고 사용해도 안해도 무방하다.

예제)

컴파일 링크시점에 함수 인자를 명확하게 체크 해야 한다.

아래 코드는 컴파일만 할 경우 에러가 없는 것을 확인 할 수 있다.

void를 적어주게 되면 인자가 없음을 확실하게 확인 할 수 있다. 적어주는게 좋다.

코드의 마지막에는 [MODULE_LICENSE("GPL")] 를 등록해줘야 한다.

예제) 모듈 등록 / 실행 / 삭제

2.4에서 컴파일

2.6에서 컴파일

2.4와 2.6은 모듈을 등록하는 방식에 차이가 있다.

.c소스 자체의 차이는 include <linux/init.h> 만 추가 해주면 2.4와 동일하다.

2.4에서의 gcc 명령을 2.6에서는 사용하지 않고 makefile을 만들어서 컴파일 해야한다.

2.4는 .o파일을 업하고 2.6은 .ko 파일을 업한다.

그렇다고 꼭 2.4 커널에서는 gcc 를 사용해야 하는건 아닙니다.

Makefile 만들어 쓰면 됩니다.

2.4커널 Makefile 코드 입니다.

 

오늘 수업은 요까지 입니다. by 감정현

 

728x90