Sonntag, Mai 31, 2020

Cross-kompilieren von kernel-Modul für ARM-Architektur

Ich versuche zu machen .ko-Datei für ARM-von einem linux-x86-Maschine. Ich habe versucht, das folgende Makefile:

1 obj-m +=helloworldtest_module.o 
2 modules_install:
3     make ARCH=$(ARCH) CC=$(CROSS_COMPILER) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
4 clean:
5     make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

… aber ich bekam eine Fehlermeldung auf was make -f Makefile ARCH=arm CROSS_COMPILER=arm-linux-gnueabi-gcc in der Eingabeaufforderung wie folgt:

make ARCH=arm CC=arm-linux-gnueabi-gcc -C /lib/modules/3.2.0-29-generic/build M=/home/terenesas/sample modules
make[1]: Entering directory `/usr/src/linux-headers-3.2.0-29-generic'
  CC [M]  /home/terenesas/sample/helloworldtest_module.o
In file included from /usr/src/linux-headers-3.2.0-29-generic/arch/arm/include/asm/types.h:4:0,
                 from include/linux/types.h:4,
                 from include/linux/list.h:4,
                 from include/linux/module.h:9,
                 from /home/terenesas/sample/helloworldtest_module.c:2:
include/asm-generic/int-ll64.h:11:29: fatal error: asm/bitsperlong.h: No such file or directory
compilation terminated.
make[2]: *** [/home/terenesas/sample/helloworldtest_module.o] Error 1
make[1]: *** [_module_/home/terenesas/sample] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.2.0-29-generic'
make: *** [modules_install] Error 2

Was habe ich falsch gemacht?

InformationsquelleAutor saju | 2013-02-11

2 Kommentare

  1. 2

    shell uname -r bedeutet, dass diese Makefile des Moduls erstellen für Sie hosten(x86) – system und nicht für ARM.

    Müssen Sie das Quellverzeichnis Ihres ARM-Kernel. Benutzen, können Sie folgenden Makefile, um cross-kompilieren Ihrer module.

    Makefile:

    CC=$(CROSS_COMPILE)gcc
    # If KERNELRELEASE is defined, we've been invoked from the
    # kernel build system and can use its language.
    ifneq ($(KERNELRELEASE),)
        obj-m := modulename.o 
    
    # Otherwise we were called directly from the command
    # line; invoke the kernel build system.
    else
    
        KERNELDIR ?= /path/to/kernel/linux
        PWD  := $(shell pwd)
    
    default:
        ${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} modules
    
    clean:
        ${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} clean
    endif

Kostenlose Online-Tests