التجميع المتقاطع وحدة kernel
-
28-09-2019 - |
سؤال
أحاول عبور وحدة Helloworld kernel (2.6.x) للهندسة المعمارية للذراع على مضيف Intel X86 الخاص بي.
توجد سلسلة أدوات CodeSourcery لـ ARM على: /Home/Ravi/Workspace/Hawk/ARM-2009Q3
يقع مصدر kernel في:/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
عندما أركض صنع, ،. Ko المنتج هو جهاز المضيف الخاص بي مما يعني أن Makefile يستدعي المترجم الأصلي بدلاً من المترجم المتقاطع. ما الذي أفعله خطأ؟ ثنائيات المترجم المتقاطع في طريقي.
المحلول
وضع ARCH
و CROSS_COMPILE
في Makefile لا يعمل. تحتاج إلى وضعها على سطر الأوامر:
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
نصائح أخرى
يحل محل
القوس = الذراع
cross_compile = ذراع-none-linux-gnueabi
بواسطة
قوس التصدير: = الذراع
تصدير cross_compile: = ذراع-لا linux-gnueab--
سيعمل هذا أيضًا إذا كنت لا ترغب في إعطاء سطر الأوامر المعلمة هذا في كل مرة.
ملاحظة جانبية: SUBDIRS=
تم إهماله لصالح M=
.
هل يمكنك المحاولة ، لقد نسيت إضافة القوس و 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
بادئة جايم أشارت ، و 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