मैं निर्देशिका संरचना के साथ लिनक्स कर्नेल बिल्ड सिस्टम (Kbuild, कर्नेल ≥2.6.28) का सामना कर रहा हूं और एक बड़ी परियोजना के लिए सिस्टम का निर्माण कर रहा हूं। चाहिएएक अलग ऑब्जेक्ट निर्देशिका में एक आउट-ऑफ-पेड़ लिनक्स कर्नेल मॉड्यूल का निर्माण
checkout/src/common/*.c source files (common to Linux and other platforms)
checkout/src/linux-driver/*.c source files (for the Linux kernel driver)
checkout/build/linux/Kbuild Kbuild
tmp/linux-2.6.xx/ where the Linux kernel is unpacked and configured
output/linux-arm-debug/ where object files must end up
निर्माण प्रक्रिया checkout
के तहत कुछ भी संशोधित नहीं होना चाहिए, और मॉड्यूल का निर्माण: हमारी परियोजना एक बाहर के पेड़ लिनक्स कर्नेल मॉड्यूल शामिल है, और हमारी निर्देशिका संरचना इस तरह दिखता है (सरलीकृत, स्पष्ट रूप से) tmp/linux-2.6.xx
के तहत कुछ भी संशोधित नहीं करें। सभी आउटपुट फाइलों को output/linux-arm-debug
(या जो भी आर्किटेक्चर और डीबग संस्करण का निर्माण समय पर चुना गया था) के तहत समाप्त होना चाहिए।
मैं kbuild/modules.txt
पढ़ा है, और मेरे Kbuild
फ़ाइल लिखना शुरू किया:
MOD_OUTPUT_DIR = ../../../output/linux-$(ARCH)-$(DEBUG)
obj-m += $(MOD_OUTPUT_DIR)/foo_mod.o
$(MOD_OUTPUT_DIR)/our_module-objs := $(MOD_OUTPUT_DIR)/foo_common.o $(MOD_OUTPUT_DIR)/foo_linux.o
यह जहां Kbuild
जीवन से एक अलग निर्देशिका में वस्तु फ़ाइलों को संग्रहीत करने संभालती है। अब मैं foo_common.o
को …/checkout/src/common/foo_common.c
और foo_linux.o
से …/checkout/src/linux-driver/foo_linux.c
से संकलित करने की आवश्यकता कैसे निर्दिष्ट कर सकता हूं?
मैं वह हिस्सा पढ़ा है, और मैं यह कैसे मेरी मदद करने के लिए के रूप में एक नुकसान में हूँ। उस उदाहरण में, 'complex_main.c' और' complex_main.o' एक ही निर्देशिका में हैं।मेरे निर्माण पेड़ में, स्रोत और निर्माण उत्पाद पूरी तरह से अलग हैं। – Gilles