커 널 프로 그래 밍 hello World(회전)
커 널 모듈 프로 그래 밍 을 배 웁 니 다.첫 번 째 작은 프로그램 은 당연히 hello,kernel 입 니 다!자,이것 은 관례 라 고 할 수 있 습 니 다.예전 에 대학 3 학년 때 실험 시간 에 모듈 프로 그래 밍 을 했 는데 그 때 는 허 사형 이 우 리 를 데 리 고 실험 한 것 을 기억 하 는데 지금 은 또 잊 어 버 렸 다.저녁 에 시험 해 보 았 더 니 곧 운행 에 성 공 했 지만 약간의 문제 가 생 겼 다.지금 나의 절 차 를 아래 와 같이 기록 하여 나 와 같은 초보 자 들 이 공부 하도록 제공 합 니 다.
1.먼저 hello.c 파일 을 작성 합 니 다.
01
#include <linux/init.h>
02
#include <linux/module.h>
03
#include <linux/kernel.h>
04
//
05
//
06
MODULE_LICENSE(
"Dual BSD/GPL"
);
07
//
08
static
int
hello_init(
void
)
09
{
10
printk(KERN_ALERT
"hello,I am edsionte/n"
);
11
return
0;
12
}
13
//
14
static
void
hello_exit(
void
)
15
{
16
printk(KERN_ALERT
"goodbye,kernel/n"
);
17
}
18
//
19
module_init(hello_init);
20
module_exit(hello_exit);
21
//
22
MODULE_AUTHOR(
"edsionte Wu"
);
23
MODULE_DESCRIPTION(
"This is a simple example!/n"
);
24
MODULE_ALIAS(
"A simplest example"
);
보통 모듈 프로그램의 경우 모듈 로드 함수,모듈 마 운 트 해제 함수 와 모듈 허가 성명 은 필수 적 이 며,모듈 파라미터,모듈 내 보 내기 기호 와 모듈 작성 자 정보 성명 등 은 모두 선택 할 수 있 습 니 다.
우 리 는 모듈 로 함 수 를 불 러 온 후에 module 를 사용 해 야 합 니 다.init(mode_name);이 함 수 를 등록 합 니 다.다음 에 inmod 로 모듈 을 불 러 올 때 커 널 은 커 널 로 딩 함 수 를 자동 으로 찾 아 실행 하여 초기 화 작업 을 완성 하기 때 문 입 니 다.유사 한 것 은 rmmod 명령 을 사용 할 때 커 널 은 커 널 마 운 트 해제 함 수 를 자동 으로 실행 합 니 다.
이 printk 함 수 를 주의 하 십시오.커 널 의 printf 함수 로 간단하게 이해 할 수 있 습 니 다.처음 사용 하면 printf 로 만 들 기 쉽 습 니 다.
2.Makefile 파일 작성
대학 3 학년 때 실험 시간 에 Makefile 을 만 났 는데 책 에 있 는 내용 대로 만 두 드 렸 던 기억 이 납 니 다.하지만 지난주 Makefile 관련 문법 에 대한 이해 가 생 겨 서 이 제 는 왜 이렇게 쓰 는 지 거의 알 것 같 습 니 다.그럼 다음은 Makefile 파일 을 보 겠 습 니 다.
view source print ?
01
obj-m += hello.o
02
#generate the path
03
CURRENT_PATH:=$(shell pwd)
04
#the current kernel version number
05
LINUX_KERNEL:=$(shell uname -r)
06
#the absolute path
07
LINUX_KERNEL_PATH:=/usr/src/linux-headers-$(LINUX_KERNEL)
08
#complie object
09
all:
10
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
11
#clean
12
clean:
13
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean
우선 첫 마디 로 컴 파일 할 파일 을 지정 합 니 다.사실 Makefile 에 이런 말 이 있 으 면 됩 니 다.하지만 이렇게 되면 make 할 때마다 다른 명령 을 추가 해 야 하기 때문에 Make 에 매번 실행 할 명령(스 크 립 트 언어의 기능 이 구현 되 었 습 니 다)을 추가 하 는 것 도 좋 습 니 다.매번 make 명령 만 입력 하면 됩 니 다.
우 리 는 먼저 현재 의 상대 경 로 를 얻 었 습 니 다.(터미널 에 pwd 를 입력 하여 이 명령 을 시험 해 볼 수 있 습 니 다)그리고 현재 커 널 의 버 전 번 호 를 얻 으 면 현재 커 널 의 절대 경 로 를 직접 얻 을 수 있 습 니 다.물론 현재 커 널 버 전 을 직접 입력 할 수 있 지만 이식 이 불편 합 니 다.현재 커 널 버 전 번호 가 이 파일 의 버 전 번호 와 같 지 않 으 면 수정 해 야 합 니 다.그래서 위의 방법 은 이식 성 이 좋 고 가 독성 도 강하 다.
$(variable name)와 같은 문자열 이 자주 나타 납 니 다.사실은 괄호 안의 변 수 를 참조 하 는 것 입 니 다.Makefile 과 관련 된 문법 규칙 을 참고 할 수 있 습 니 다.
3.make
상기 두 파일 을 완성 한 후 현재 디 렉 터 리 에서 make 명령 을 실행 하면 hello.ko 파일,즉 모듈 대상 파일 을 생 성 합 니 다.
4.insmod,rmmod 와 dmesg
inmod 명령 은 우리 가 쓴 이 모듈 을 커 널 에 추가 할 수 있 지만,일반적으로 우 리 는 sudo 를 추가 해 야 합 니 다.rmmod 는 당연히 이 모듈 을 마 운 트 해제 하 는 것 입 니 다.모듈 을 불 러 오 거나 마 운 트 해제 할 때 우리 printk 에 표 시 된 문 구 는 dmesg 명령 으로 볼 수 있 습 니 다.
ok,첫 번 째 모듈 프로 그래 밍 이 이렇게 간단 합 니 다.try 해 보 세 요!
Update 2011/04/03
본 고 에서 기술 한 프로그램 은 ubuntu 시스템 에서 테스트 에 성공 했다.다른 Linux 발행 판 은 소스 디 렉 터 리,즉 LINUX 를 적 절 히 수정 해 야 합 니 다.KERNEL_PATH。
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Linux Shell 프로 그래 밍 - 텍스트 처리 grep, sed사용자 가 지정 한 '모드' 에 따라 대상 텍스트 를 일치 하 게 검사 하고 일치 하 는 줄 을 인쇄 합 니 다. ##포함 되 지 않 음, 역방향 일치 \ ##키워드 앞 뒤 가 맞지 않 고 키워드 만 일치 합 니 다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.