Ответ 1
Ввод ARCH
и CROSS_COMPILE
в Makefile не работает. Вам нужно поместить их в командной строке:
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
Я пытаюсь перекрестно скомпилировать модуль 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 файл вызывает собственный компилятор вместо кросс-компилятора. Что я делаю неправильно? Бинарные файлы кросс-компилятора находятся на моем пути.
Ввод ARCH
и CROSS_COMPILE
в Makefile не работает. Вам нужно поместить их в командной строке:
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
Заменить
ARCH = рука
CROSS_COMPILE = arm-none-linux-gnueabi
экспорт ARCH: = arm
export CROSS_COMPILE: = arm-none-linux-gnueabi -
это также будет работать, если вы не хотите каждый раз указывать эту командную строку параметра.
Sidenote: SUBDIRS=
устарел в пользу M=
.
Вы можете попробовать, вы забыли добавить 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
добавление 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
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