크로스 컴파일 리눅스 커널 모듈

크로스 컴파일 리눅스 커널 모듈

저는 ARM Linux용 커널 모듈 크로스 컴파일 작업을 하고 있습니다.
내 호스트의 커널 버전은 3.13.0-24generic이고 대상의 커널 버전은 3.10.17-r0입니다.

이제 실제로 다운로드하고 설치해야 하는 커널 소스 또는 헤더는 무엇이며 어디에 있습니까? kernel.org에서 linux-3.10.17tar.bz2를 다운로드하고 압축을 풀었습니다. 드라이버에 Makefile이 있고 이 사이트에 따르면 여기에 다음 줄을 추가한 다음 make를 실행해야 합니다.

ARCH=arm
CROSS_COMPILE=arm-poky-linux-gnueabi-gcc
KDIR := /lib/modules/'uname -r'/build

obj-m +=test5.o
all : 
    make -C ${KDIR}/build M=$(PWD) modules 

clean   : 
    make -C ${KDIR}/build M=$(PWD) clean 

그런데 무엇으로 바꿔야 할까요 uname -r? 이는 호스트 시스템의 커널 버전을 제공하기 때문입니다. 하지만 내 대상 버전이 다릅니다. 폴더는 어디에 있나요 /lib/modules/3.6.9? CROSS_COMPILE과 ARCH가 모두 설정되었습니다.

답변1

Linux 커널 모듈을 크로스 컴파일하려면 Makefile이 대상 머신(귀하의 경우 "KDIR")의 Linux 커널을 알아야 합니다. 대상 머신의 Linux 커널이 저장된 주소로 KDIR을 구성합니다.

Makefile에 대해 두 번째로 주목해야 할 점은 CROSS_COMPILER 및 ARCH입니다. Makefile에서 이를 구성할 필요가 없습니다. 실행할 때 인수로 전달하십시오 make.

make CROSS_COMPILE=arm-poky-linux-gnueabi-  ARCH=arm

관련 정보