交叉编译内核模块

iti*_*avi 31 makefile cross-compiling kernel-module embedded-linux linux-toolchain

我正在尝试在我的intel x86主机上为ARM体系结构交叉编译helloworld内核(2.6.x)模块.

ARM的代码源工具链位于:/ home/ravi/workspace/hawk/arm-2009q3

内核源代码位于:/ home/ravi/workspace/hawk/linux-omapl1

我的Makefile:

ARCH=arm
CROSS_COMPILE=arm-none-linux-gnueabi
obj-m := Hello.o
KDIR := /home/ravi/workspace/hawk/linux-omapl1
PWD := $(shell pwd)
default:
          $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
          $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean
Run Code Online (Sandbox Code Playgroud)

当我运行make时,.ko生成的是我的主机,这意味着makefile正在调用本机编译器而不是交叉编译器.我做错了什么?交叉编译器的二进制文件在我的路径中.

Jay*_*ayM 34

ARCHCROSS_COMPILEMakefile文件不起作用.您需要将它们放在命令行上:

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
Run Code Online (Sandbox Code Playgroud)

  • 附带说明一下,我们可以在不编写 makefile 的情况下仅通过使用 gcc 开关来编译模块吗? (3认同)
  • 作为一个不知何故的linux noob,我想知道为什么ARCH和CROSS_COMPILE在某些Makefile中,如果他们不这样工作. (3认同)
  • 我相信你可以,但这并不容易.当你调用make来查看如何调用gcc时,在命令行中添加"V = 1".这就是你必须输入而不是`make ...` (2认同)

raj*_*gt1 18

更换

ARCH = arm
CROSS_COMPILE = arm-none-linux-gnueabi

通过

export ARCH:= arm
export CROSS_COMPILE:= arm-none-linux-gnueabi-

如果您不想每次都提供这些参数命令行,这也可以工作.


use*_*515 6

旁注:SUBDIRS=不赞成使用M=.


Alb*_*hen 5

你可以尝试,你忘了将ARCH和CROSS_COMPILE添加到默认值并清理

ARCH=arm
COMPILER=arm-none-linux-gnueabi
obj-m := Hello.o
KERNELDIR := /home/ravi/workspace/hawk/linux-omapl1
PWD := $(shell pwd)
default:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(COMPILER) modules

clean:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) ARCH=$(ARCH) clean
Run Code Online (Sandbox Code Playgroud)