Cross compiling a kernel module
Próbuję skompilować jądro helloworld (2.6.x) moduł dla architektury ARM na moim Intel x86 host.
Łańcuch narzędzi codesourcery do ramienia znajduje się pod adresem: /home/ravi/workspace/hawk/arm-2009q3
Źródło jądra znajduje się pod adresem: /home / ravi/workspace/hawk / linux-omapl1
Mój 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
When I run make , the .Ko produkowane jest z mojego komputera hosta, co oznacza, że makefile wywołuje natywny kompilator zamiast kompilator krzyżowy.Co robię źle? Binaria kompilatora krzyżowego są na mojej drodze.
6 answers
Umieszczanie ARCH
i CROSS_COMPILE
w pliku Makefile nie działa. Musisz umieścić je w wierszu poleceń:
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-12 20:16:58
Zastąp
ARCH=arm
CROSS_COMPILE=arm-none-linux-gnueabi
By
Export ARCH: = arm
export CROSS_COMPILE:=arm-none-linux-gnueabi -
Będzie to również działać, jeśli nie chcesz za każdym razem podawać tych parametrów wiersza poleceń.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-22 11:21:08
Uwaga boczna: SUBDIRS=
jest przestarzała na rzecz M=
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-21 13:49:17
Możesz spróbować, zapomniałeś dodać ARCH i CROSS_COMPILE do domyślnego i czystego
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-07 00:51:03
Dodanie export
na końcu deklaracji zmiennej Makefile sprawi, że będą one dostępne dla podshellów. i dodaj myślnik do prefiksu CROSS_COMPILE
jako jaym, A M
zamiast SUBDIRS
jako user502515 odpowiedział.
I ogólnie dobrym pomysłem jest użycie :=
zamiast =
w pliku Makefile, więc zmienna jest interpolowana tylko raz. naprawdę nie ma to jednak znaczenia w tym konkretnym przypadku.
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-15 18:04:26
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-06 19:37:48