2010-12-09 5 views
0

을 구축하는 방법 나는 다음과 같은 단계를 따랐다커널 모듈

here을 통해 주어진 안녕하세요 세계 모듈을 컴파일하려합니다.

  1. 다운로드 한 리눅스 커널 2.6.35-RC5
  2. 디렉토리/일반/소스/전체 커널을 수락 한 리눅스
  3. 로 추출 하였다.
  4. 은 linux 폴더에서 dir 테스트를 만들었습니다.
  5. 거기에 언급 된대로 안녕하세요 세계 모듈을 만들고 준수했습니다. 나는 insmod 명령의 명령을 실행할 때

, 나는이 오류를 얻을

insmod: error inserting 'hello.ko': -1 Invalid module format 

어떻게 밖으로 정렬이 오류는 무엇입니까?

감사합니다.

답변

1

여러분이 실수하고있는 것은 커널 버전입니다.

먼저

uname -r 

당신은 커널 버전을 얻을 것이라고 봅니다. 다운로드 한 버전은 대부분 시스템의 커널 버전이 아닙니다. 그래서 탭이 위의 스크립트에서 언급 된 순서에 있는지 확인

ifeq ($(KERNELRELEASE),) 

KERNELDIR ?= /lib/modules/$(shell uname -r)/build 
PWD := $(shell pwd) 

.PHONY: build clean 

build: 
     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules 

clean: 
     rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c 
else 

$(info Building with KERNELRELEASE = ${KERNELRELEASE}) 
obj-m := hello.o 

endif 

에 메이크업 파일을 변경합니다.

0

커널 모듈이 실행 커널과 일치해야합니다. 예를 들어이 특정 모듈을 설치하려면 빌드 한 커널도 설치해야합니다.

일반적으로 커널을 직접 빌드하지 않고 배포 커널과 일치하는 미리 빌드 된 버전을 사용합니다. 배포판 저장소에서 kernel-headers 패키지를 찾으십시오.

+0

'kernel * devel *'어떤 경우에는'headers '가있는 것이'/ usr/include/linux'이기 때문에 사용자 공간을 위해 예약되어 있습니다. – user502515

+0

Ok ... 이제 어떻게 해결할 수 있습니까? 초보자를위한 단계별 가이드 – chai

+0

사용자 정의 커널 대신 커널 헤더가 설치된 곳으로 Makefile에'KERNELDIR'을 설정하면됩니다. 우분투의 경우 [이 가이드] (http://www.cyberciti.biz/tips/build-linux-kernel-module-against-installed-kernel-source-tree.html)를 사용해보십시오. – kichik

관련 문제