본문 바로가기
코스웨어/10년 스마트폰BSP

[BSP]업무일지-서동준-20100908

by 알 수 없는 사용자 2010. 9. 8.
728x90
반응형
모듈 프로그래밍

1. 절차
모듈 소스 프로그램 작성
소스 컴파일
모듈 적재
모듈 동작 확인
결과 확인

모듈 소스 프로그램 작성
hellomodule.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#define MODULE
#include <linux/module.h>
#include <linux/kernel.h>

int init_module()
{
	printk("Module init\n");
	printk("Hello Linux Module!\n");

	return 0;
}

void cleanup_module()
{
	printk("Module Cleaned up\n");
}

MODULE_LICENSE("GPL");

makefile 작성
makefile
1
2
3
4
5
6
7
KERNELDIR=/lib/modules/$(shell uname -r)/build
CFLAGS=-D__KERNEL__ -DMODULE -I$(KERNELDIR)/include -O

all: hellomodule.o

clean:
	rm -rf *.o

hellomodule.c에서 이미 #define MODULE이 정의되어 있으므로 -DMODULE이 옵션으로 추가되어 있으면 중복정의되었다고 경고메시지를 출력한다. 따라서 둘 중 하나를 지운 후 make를 실행해야 한다.

실무에서는 다루어야 할 파일이 많기 때문에 각각의 파일마다 #define MODULE을 적어주는 것보다 옵션으로 추가해 주는 것이 좋다.

모듈 컴파일
# make


makefile 분석
makefile
1
2
3
4
5
6
7
KERNELDIR=/lib/modules/$(shell uname -r)/build
CFLAGS=-D__KERNEL__ -DMODULE -I$(KERNELDIR)/include -O

all: hellomodule.o

clean:
	rm -rf *.o

매크로 기본적인 정의 및 사용법
정의 : 매크로명=치환될 문자열
사용 : $(매크로명)
매크로가 사용된 부분이 정의된 문자열로 치환된다.

변수는 사용하기 전 정의되어 있어야 한다.

$(...) : 안에 적혀 있는 변수를 값으로 치환해 준다.

shell : 현재 vi가 실해중인 shell에서 또 다른 shell을 연다. 그리고 뒤에 나오는 명령어(uname -r)를 수행한다.

__KERNEL__ :

-D : 매크로를 정의한다.
#define 
#define AAA 3
-DAAA=3

-I : #include <...> 안의 파일을 찾는 경로를 지정한다.
지정하지 않을 경우 디폴트로 지정된 경로에서 찾는다.(/usr/include)
지정할 경우 지정된 경로를 먼저 찾고 없으면 다시 디폴트 경로에서 찾는다.

build -> ../../../usr/src/linux-2.4.18-4 : 커널 소스 경로. '->'는 소프트 링크임

기타 내용
하드 링크 : 원본을 그대로 복사해 놓은 링크. 용량은 2배. 동기화되어 한 쪽의 파일을 지우면 다른 쪽도 같이 지워짐
소프트 링크 : 원본의 경로만 연결해 놓은 링크
ls -al 하면 링크는 l로 적혀 있음.
pwd 치면 경로명은 다르게 나오지만 ls하면 동일한 파일이 나옴

# : 주석. 행의 첫 문자일 경우만 가능??
cc 는 gcc를 심볼릭 링크함
gz : gnuzip
bz : bzip

1행 : 매크로 KERNELDIR를 정의한다.

2행 : 매크로 CFLAGS를 정의한다.

4행 : # make all을 치면 hellomodule.o가 있는지 확인한 후, 없으면 hellomodule.o를 만든다.

6행 : # make clean을 치면 7행의 명령을 실행한다.

7행 : 현재 경로에서 확장자가 .o인 모든 파일 및 디렉토리를 삭제한다. -rf가 붙어 있으면 디렉토리의 경우 하위 디렉토리까지 삭제한다.

Makefile
Target : Dependency
(TAB)  Command

JAVA 프로그래밍
프로젝트 (채팅 프로그램 ) 수행

-end-

728x90