我正在尝试为ARM交叉编译模块。我将Sabrelite用作具有3.0.35内核版本的主板。我正在使用开放式嵌入式生成内核映像。

我拥有交叉引用所需的所有工具链,如下所示:


  回声$ CC:
  
  arm-oe-linux-gnueabi-gcc -march = armv7-a -mthumb-interwork
  -mfloat-abi = hard -mfpu = neon -mtune = cortex-a9 --sysroot = / usr / local / oecore-x86_64 / sysroots / cortexa9hf-vfp-neon-oe-linux-gnueabi
  
  回声$ CROSS_COMPILE:arm-oe-linux-gnueabi-
  
  回声ARCH:
  臂


(这只是我的工具链的一部分。)

这是我的makefile的一部分:


  KSRC = kaodv-mod.c kaodv-debug.c kaodv-netlink.c kaodv-queue.c
  kaodv-ipenc.c kaodv-expl.c
  
  KERNEL_DIR = / home / user / script_emulation / AODV / kernel
  
  KERNEL_INC = $(KERNEL_DIR)/包括THIS_DIR = $(shell pwd)
  
  obj-m + = kaodv.o kaodv-objs:= kaodv-mod.o kaodv-debug.o
  kaodv-netlink.o kaodv-queue.o kaodv-ipenc.o kaodv-expl.o
  
  默认:
      $(MAKE)-C $(KERNEL_DIR)SUBDIRS = $(THIS_DIR)个模块


当我使用make命令启动它时,我得到了一个模块(.ko),但是奇怪的是,生成的模块是使用主机工具链编译的,这意味着makefile在调用本机编译器而不是交叉编译器。我究竟做错了什么?交叉编译器的二进制文件在我的路径中。

这是我在终端上得到的输出的一部分:


  抄送/home/user/script_emulation/AODV/aodv-uu/lnx/kaodv.mod.o
  
  LD [M] /home/user/script_emulation/AODV/aodv-uu/lnx/kaodv.ko


我们可以看到那里使用了本机CC和LD而不是交叉编译器工具

有人可以提出解决方案吗?

谢谢

更新:

$ readelf -h kaodv.ko

ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              REL (Relocatable file)
  Machine:                           ARM
  Version:                           0x1
  Entry point address:               0x0
  Start of program headers:          0 (bytes into file)
  Start of section headers:          13480 (bytes into file)
  Flags:                             0x5000000, Version5 EABI
  Size of this header:               52 (bytes)
  Size of program headers:           0 (bytes)
  Number of program headers:         0
  Size of section headers:           40 (bytes)
  Number of section headers:         33
  Section header string table index: 30

最佳答案

要快速修复,请如下更改Makefile。


  KERNEL_DIR = / home / user / script_emulation / AODV / kernel
  
  KERNEL_INC = $(KERNEL_DIR)/包括THIS_DIR = $(shell pwd)
  
  obj-m + = kaodv.o kaodv-objs:= kaodv-mod.o kaodv-debug.o kaodv-netlink.o kaodv-queue.o kaodv-ipenc.o kaodv-expl.o
  
  默认:
  $ {MAKE)ARCH = arm CROSS_COMPILE = arm-oe-linux-gnueabi- -C $ {KERNEL_DIR)SUBDIRS = $ {THIS_DIR)模块


还请确保在运行make using之前设置交叉编译器工具链路径


  导出PATH = $ PATH:PathToToolchain。


还要检查您先前编译的内核是否也针对ARM体系结构进行了编译。

关于c - 交叉编译内核模块ARM,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25572395/

10-08 22:50