간단 한 실례 설명 linux 모듈 컴 파일 절차
#include <linux/module.h> /* */
#include <linux/init.h> /* module_init() module_exit() */
#include <linux/moduleparam.h>/* module_param() */
MODULE_AUTHOR("Yu Qiang");
MODULE_LICENSE("GPL");
static int nbr = 10;
module_param(nbr, int, S_IRUGO);
static int __init yuer_init(void)
{
int i;
for(i=0; i<nbr; i++)
{
printk(KERN_ALERT "Hello, How are you. %d
", i);
}
return 0;
}
static void __exit yuer_exit(void)
{
printk(KERN_ALERT"I come from yuer's module, I have been unlad.
");
}
module_init(yuer_init);
module_exit(yuer_exit);
우리 의 원본 파일 은 준비 한 것 이 많 지 않 습 니 다. 이것 이 바로 Liux 아래 모듈 의 기본 구조 입 니 다.9 줄 은 우리 의 기호 변 수 를 내 보 내 는 nbr 입 니 다.이렇게 하면 이 모듈 을 불 러 올 때 이 변수의 값 을 동적 으로 수정 할 수 있 습 니 다.잠시 후 시연 하 겠 습 니 다.yuer_init () 함 수 는 모듈 을 불 러 올 때 실 행 됩 니 다. 출력 결 과 를 통 해 우리 모듈 이 불 러 올 수 있 는 지 여 부 를 볼 수 있 습 니 다.
두 번 째 단계: Makefile 파일 작성
우선 우리 Makefile 의 원본 파일 을 보고 설명 하 겠 습 니 다.
Makefile
obj-m := modules.o
\# 생 성 할 모듈 이름
modules-objs:=
mymod
.o
\# 이 모듈 이름 을 만 드 는 데 필요 한 대상 파일
KDIR :=/lib/modules/`uname -r`/build
PWD := $(shell pwd)
default:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -rf *.o .* .cmd *.ko *.mod.c .tmp_versions
지금 제 가 이 Makefile 을 설명해 드릴 게 요.소문 자 Makefile 이 아 닌 대문자 Makefile 임 을 기억 하 세 요.
obj - m: 이 변 수 는 어떤 모듈 모듈 의 형식 을 obj - m: = < 모듈 명 >. o 라 고 주장 할 지 지정 합 니 다.
modules - objs: 이 변 수 는 모듈 modules 에 필요 한 대상 파일 형식 요 구 를 설명 합 니 다. <모듈 명 > - objs: = < 대상 파일 >
메모: 모듈 의 이름 은 대상 파일 과 같은 이름 을 가 져 올 수 없습니다.여기 서 모듈 이름 을 my mod 로 만 들 수 없다 면;
KDIR :이것 은 우리 가 실행 하고 있 는 운영 체제 커 널 컴 파일 디 렉 터 리 입 니 다.컴 파일 모듈 에 필요 한 환경
M= :원본 파일 의 위 치 를 지정 합 니 다.
PWD :이것 은 현재 작업 경로 $(셸) )make 의 내 장 된 함수 입 니 다. 셸 명령 을 수행 하 는 데 사 용 됩 니 다.
STEP 3: 컴 파일 모듈
현재 우 리 는 우리 가 필요 로 하 는 원본 파일 과 해당 하 는 Makefile 을 준 비 했 습 니 다. 우 리 는 이제 컴 파일 할 수 있 습 니 다. 터미널 에서 원본 파일 디 렉 터 리 에 들 어가 make 를 입력 하 십시오.
실행 결과:
make[1]: Entering directory `/usr/src/linux-headers-2.6.24-24-generic'
CC [M] /home/yuqiang/ /mymodule/mymodules.o
LD [M] /home/yuqiang/ /mymodule/modules.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/yuqiang/ /mymodule/modules.mod.o
LD [M] /home/yuqiang/ /mymodule/modules.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.24-24-generic'
STEP 4: 모듈 불 러 오기/마 운 트 해제
위의 컴 파일 에서 볼 수 있 습 니 다. modules. ko 가 생 성 되 었 습 니 다. 이것 이 바로 우리 의 모듈 입 니 다. 이제 우 리 는 불 러 올 수 있 습 니 다.
먼저 터미널 에 입력:
sudo insmod modules.ko
이제 우리 모듈 로드 에 성 공 했 는 지 볼 까요?
터미널 에 입력:
dmesg | tail -12
이것 은 커 널 출력 정 보 를 보 는 뜻 입 니 다. tail - 12 는 마지막 12 개 를 표시 합 니 다.
결 과 는 다음 과 같 습 니 다.
[17945.024417] sd 9:0:0:0: Attached scsi generic sg2 type 0
[18046.790019] usb 5-8: USB disconnect, address 9
[19934.224812] Hello, How are you. 0
[19934.224817] Hello, How are you. 1
[19934.224818] Hello, How are you. 2
[19934.224820] Hello, How are you. 3
[19934.224821] Hello, How are you. 4
[19934.224822] Hello, How are you. 5
[19934.224824] Hello, How are you. 6
[19934.224825] Hello, How are you. 7
[19934.224826] Hello, How are you. 8
[19934.224828] Hello, How are you. 9
보 셨 죠? 우리 모듈 의 초기 화 함수 yuer init () 가 성공 적 으로 실행 되 었 습 니 다. 우리 모듈 이 불 러 온 것 을 설명 합 니 다.
이제 모듈 을 다시 마 운 트 해제 해 봅 시다.
터미널 에 입력:
sudo rmmod modules
터미널 에 입력:
dmesg | tail -3
[19934.224826] Hello, How are you. 8
[19934.224828] Hello, How are you. 9
[20412.046932] I come from yuer's module, I have been unlad.
인쇄 된 정보 에서 볼 수 있 듯 이 모듈 의 종료 함수 가 실행 되 었 습 니 다. 모듈 이 성공 적 으로 마 운 트 해제 되 었 음 을 설명 합 니 다. 현재 위치 에 서 는 모듈 의 컴 파일 에서 컴 파일 실행 까지 전체적으로 인식 한 셈 입 니 다. 앞으로 깊이 있 는 학습 에 도움 이 될 것 입 니 다. 모듈 과 관련 된 것 을 살 펴 보 겠 습 니 다.간단 한 조작 들
다섯 번 째 단계: 모듈 을 불 러 올 때 매개 변 수 를 전달 합 니 다.
터미널 에 입력:
sudo insmod module_name.ko nbr=4
터미널 에 입력:
dmesg | tail -6
결 과 는 다음 과 같 습 니 다.
[20800.655694] Hello, How are you. 9
[21318.675593] I come from onefile module, I have been unlad.
[21334.425373] Hello, How are you. 0
[21334.425378] Hello, How are you. 1
[21334.425380] Hello, How are you. 2
[21334.425381] Hello, How are you. 3
이렇게 하면 모듈 을 불 러 올 때 동적 으로 변 수 를 설정 하 는 것 을 볼 수 있 습 니 다. 함수 의 순환 을 4 번 만 초기 화 했 습 니 다.
모듈 이 그 변 수 를 설정 할 수 있 는 지 어떻게 아 느 냐 고 물 을 수 있 습 니 다. 물론 변 수 를 설정 하지 않 고 한 번 불 러 올 수 있 습 니 다. 그리고 터미널 에 ls/sys/module/< modules name >/parameters/를 입력 하여 볼 수 있 습 니 다. 여기 서 우 리 는 이렇게 입력 했 습 니 다.
터미널 에 입력:
ls/sys/moedle/modules/parameters/
결과 보이 기:
nbr
만약 우리 의 모듈 로드 가 성공 한다 면, 마지막 으로 우 리 는 modinfo 를 통 해 우리 의 모듈 정 보 를 볼 수 있 습 니 다. 다음 과 같 습 니 다.
터미널 에 입력:
sudo modinfo modules.ko
결과 보이 기:
filename: modules.ko
license: GPL
author: Yu Qiang
srcversion: 20E9C3C4E02D130E6E92533
depends:
vermagic: 2.6.24-24-generic SMP mod_unload 586
parm: nbr:int
본문 요약:
이 글 은 모듈 작성 과 관련 된 과정 을 하나의 선형 방식 으로 설명 하기 때문에 이 과정 에서 발산 할 수 있 는 부분 이 많 습 니 다. 예 를 들 어:
MODULE AUTHOR ("Yu Qiang") 라 고 썼 을 때 또 있다 고 생각 했 을 거 예요.
MODULE DESCRIPTION (모듈 용도 에 대한 간단 한 설명);
MODULE VERSION (모듈 의 버 전 문자열);
MODULE ALIAS (모듈 의 별명);
...
module param (nbr, int, S IRUGO) 에 썼 을 때 또 있다 고 생각해 야 합 니 다.
EXPORT SYMBOL (name); 모듈 의 함 수 를 내 보 낼 수 있 습 니 다. 이것 도 모듈 이 작성 한 최종 목적 입 니 다.
...
insmod 와 modinfo 를 사용 할 때.
depmod 로 딩 가능 모듈 의 의존성 을 분석 하고 modules. dep 파일 과 맵 파일 을 생 성 합 니 다.
modprobe
Linux 커 널 추가 삭제 모듈
...
만약 에 전문 적 인 Liux 모듈 개발 자가 되 려 면 많은 길 을 가 야 합 니 다. 여러분 의 것 에 달 려 있 습 니 다. 여러분 의 학습 이 순 조 롭 기 를 바 랍 니 다.
저 는 Liux 관련 전문가 가 아 닙 니 다. 저 는 그냥 Liux 관련 개발 자 입 니 다. (읽 고 있 습 니 다)저의 목적 도 간단 합 니 다. 여러분 께 방법 을 소개 해 드 리 고 싶 습 니 다. 여러분 들 이 공부 할 때 많은 시행 착 오 를 겪 지 않 기 를 바 랍 니 다. 개인 능력 에 한계 가 있 기 때문에 오류 와 단점 이 있 을 수 있 으 니 개의 치 마 세 요. 발견 되 시 면 제 가 바로 수정 하 겠 습 니 다. 여러분 들 의 학습 에 편리 하도록 하 겠 습 니 다.
본문 출처: "물 있 는 곳 에 여유 가 있다"
글 은 20065562 's Blog 에서 전재 되 었 습 니 다. 여 기 를 클릭 하여 원문 을 보십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.