2016-08-19 4 views
0

비디오 모듈이 있고 arm-eabi-gcc 크로스 컴파일러로 컴파일 중입니다. 다음 명령을 사용하여 컴파일했습니다. $ arm-eabi-gcc -O2 -DMODULE -D__KERNEL__ -W -Wall -isystem /lib/modules/ uname -r /build/include panel-xxxxxxx.c. arm-eabi-gcc가 포함 된 크로스 컴파일 모듈

나는 다음과 같은 오류

In file included from /lib/modules/3.13.0-32-generic/build/include/linux/types.h:5:0, 
      from /lib/modules/3.13.0-32-generic/build/include/linux/list.h:4, 
      from /lib/modules/3.13.0-32-generic/build/include/linux/module.h:9, 
      from panel-gis317.c:17: 
/lib/modules/3.13.0-32-generic/build/include/uapi/linux/types.h:4:23: fatal error: asm/types.h: No such file or directory 
compilation terminated. 

을 가지고 그리고 구글에서 검색 한 후, 나는 하드웨어 아키텍처를 지정해야하지만 명령 행에 gccarch를 사용할 수있는 권리 사용을 찾을 수 없습니다 것을 발견했다. 나는에 .ko 모듈의 insmod을 위해이 일을하고있다 :

사람이 내가하는 데 사용할 수있는 어떤 플래그 나 제안하시기 바랍니다 수있는이 Makefile

주를 사용하지 않고 명령 행에서 .c 파일 (모듈)을 얻었다 크로스를 컴파일 테스트 용 하드웨어. BTW .o 파일의 도움으로

, 우리는 특정 포함 리눅스 커널 아키텍처와 .c file

+1

'-02'는'-O2'이어야합니다. –

+0

컴파일러 명령 행에서'uname -r' 부분과 혼동합니다. 그것은 호스트의 커널 릴리즈가 아니라 타겟에 대한 것입니다. - 저에게 잘못되었습니다. 호스트의 대상 커널 포함 파일이 필요합니다. – tofro

답변

2

을 컴파일하는 데 사용 포함 // 아치에되는 cross-compiler 알 수 있습니다. 비록 올바른 컴파일을 보장하지 못할지라도 ...

include 경로에/lib/modules/$ (uname -r)/build/arch/arm/include를 추가하십시오. http://lostindetails.com/blog/post/Compiling-a-kernel-module-for-the-raspberry-pi-2

그들은 메이크 접근 방식을 사용

여기 당신의 PC에 PI2에 대한 자신의 커널과 모듈을 구축하기위한 간단한 가이드입니다.

0

다음 링크는이 또한 메이크업 파일 접근 방식의 예를 가지고 당신 Cross-compiling of kernel module for ARM architecture

에게 도움이 될 것입니다. 리눅스에서 "asm/types.h"의 중요성에 대한 아이디어를 원한다면 여기에서 모든 기능이 이것을 사용하는 것을 볼 수 있습니다. 당신의 출력 (.o 인) 파일 사용에 대한 명령 "파일"제대로 파일을 컴파일 교차하는 경우

는 "outputfilename.o 파일"당신이 호스트로 64 비트 시스템을 사용하는 더 많은 알고에 대한 http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html

목표가 32 비트라면 여기에서 확인할 수 있습니다. 귀하의 컴파일 된 출력은 적절한 작업 케이스에서 32 비트 것입니다.

0

외부 커널 모듈을 작성하는 방법을 변경해야 할 몇 가지 사항이 있습니다.

먼저 컴파일러를 직접 호출하지 말고 커널 Makefile을 사용하여 필요한 모든 CFLAGS를 얻습니다.

두 번째로 빌드에 다른 binutils가 필요하므로 CROSS_COMPILE = arm-eabi-를 지정하십시오.

모듈 소스 코드와 Makefile을 포함하는 디렉토리에서 다음 명령을 실행

$ make CROSS_COMPILE=arm-eabi- -C <path_to_kernel_src> M=$PWD 

다음 줄을 포함 할 하나의 소스 파일로 구성된 모듈의 메이크 :

obj-m := panel-xxxxxxx.o 

을 커널 kbuild Makefile 규칙은 modinfo 소스 파일을 생성하고이를 컴파일하여 .ko 모듈 바이너리로 링크합니다.

자세한 내용은 을 참조하십시오.