Подтвердить что ты не робот

Кросс-компиляция модуля ядра

Я пытаюсь перекрестно скомпилировать модуль helloworld kernel (2.6.x) для архитектуры ARM на моем хосте intel x86.

Целевая цепочка инструментов для 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

Когда я запускаю make, созданный .ko - это мой хост-компьютер, который означает, что make файл вызывает собственный компилятор вместо кросс-компилятора. Что я делаю неправильно? Бинарные файлы кросс-компилятора находятся на моем пути.

4b9b3361

Ответ 1

Ввод ARCH и CROSS_COMPILE в Makefile не работает. Вам нужно поместить их в командной строке:

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

Ответ 2

Заменить

ARCH = рука
CROSS_COMPILE = arm-none-linux-gnueabi

экспорт ARCH: = arm
export CROSS_COMPILE: = arm-none-linux-gnueabi -

это также будет работать, если вы не хотите каждый раз указывать эту командную строку параметра.

Ответ 3

Sidenote: SUBDIRS= устарел в пользу M=.

Ответ 4

Вы можете попробовать, вы забыли добавить 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

Ответ 5

добавление export в конце ваших объявлений переменных Makefile сделает их доступными для подоболочек. и добавьте тире к префиксу CROSS_COMPILE как JayM, а M вместо SUBDIRS в качестве user502515.

и обычно рекомендуется использовать :=, а не = в Makefile, поэтому переменная получает интерполяцию только один раз. действительно не имеет значения в данном конкретном случае.

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

Ответ 6

MODULES := hola_kern.o

#guest architecture
ARCH := arm

CROSS_COMPILE := arm-linux-gnueabi-
obj-m := $(MODULES)

#path of the arm compiled kernel
ROOTDIR := /home/aldo/c/proyectos/prefixa/work/kernels/linux-omap-5f0a6e2

MAKEARCH := $(MAKE) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE)

all: modules
modules:
    $(MAKEARCH) -C $(ROOTDIR) M=${shell pwd} modules

clean:
    $(MAKEARCH) -C $(ROOTDIR) M=${shell pwd} clean