운영체제의 커널구성은 크게 두 가지로 나뉜다.
-일체형 커널( Monlithic Kernel )
-마이크로 커널( Micro Kernel )
리눅스는 일체형 커널을 사용했지만, 모듈을 도입함으로써 커널의 일부를 동적으로 커널안에 코드를 삽입하고 제거 할 수 있는 방법을 사용할 수 있게 되었다.
-모듈 프로그램의 구성-
모듈이 커널에 올라가기 앞서 모듈을 로드할떄 수행되는 초기화 루틴(init_module) 이있고
모듈을 제거할떄 수행되는 초기화 루틴(cleanup_module) 가 있다.
-모듈작성 기본 소스구성
#include<linux/kernel.h> // 커널과 관련된 자료구조와 printf()함수등이 정의되어있다.
#include<linux/module.h>//모듈과 관련된 자료구조와 매크로가 정의되어있다.
int __init init_module(void) //로드할떄 수행되는 초기화 루틴(init_module) insmod 명령어수행시 실행
{
.....
return 0;
}
void __exit cleanup_module(void) //제거할떄 수행되는 초기화 루틴(cleanup_module) rmmod 명령어 수행시 실행
{
.....
}
MODULE_LICENSE("GPL"); //라이센스
-모듈 컴파일
리눅스 2.6 커널은 kbuild 시스템을 사용하기 떄문에 컴파일시 gcc를 사용할수없고 Makefile을 정의하고 kbuild시스템으로 모듈빌드 가능
실제 예제 코드작성과 Makefile 내용은 책에 잘 나와있다.
예)
cc -D__KERNEL__ -DMODULE -wall -O2 -i/usr/src/linux~~/include -c 파일명.c
-D :define
-W :warning를 출력
all : 모든것을
-O2 : 최적화
-i : include
-c :complie만 하자(모듈컴파일 할떄는 링킹을 하면 안되니깐 -c를 붙여준다)
-모듈에 대해 알아야 할 것들-
-모듈과 커널버젼
/usr/src/linux~~~/include/linux/version.h
해당하는 커널버젼을 정수값으로 미리 #define 해놓은것을 확인할수 있다.
커널에 올라간 모듈 확인 lsmod
올라간 모듈중에 해당되는 문자가 들어있는 모듈찾기 lsmod | grep 찾을문자열
루트경로부터 하부디렉토리까지 한페이지씩보기
(space 한페이지씩 보기, enter 한줄씩 보기, q 당장 빠져나오기)
ls -aiR | more
'코스웨어 > 12년 내장형하드웨어' 카테고리의 다른 글
[2012내장형]포인터 변수의 오류들 첫번째... (1) | 2012.10.24 |
---|---|
[WINAPI] 10월 23일 수업소스+결과(BIPMAP 영상처리(?)) - by.LDH (0) | 2012.10.23 |
[WinApi]2012/10/18 작업일지(BMP 파일 구조) - by. 이창현 (0) | 2012.10.22 |
[리눅스 커널]2012/10/22 작업일지(데비안6 커널 2.4 Module Wrapping) - by. 이창현 (0) | 2012.10.22 |
[API] bmp 가로 4의배수로 출력하는 코드 (0) | 2012.10.19 |
[Win API] 10.16 업무일지 - 정철 (비트맵 파일구조) (10) | 2012.10.18 |
[PDF]BMP 파일 다루기 (1) | 2012.10.18 |
[유틸]portable hex editor (0) | 2012.10.17 |