Genehmigt: Fortect
Das heutige Tutorial soll Ihnen helfen, wenn Sie einen fantastischen Fehlercode für ein Kernel-Build-Verzeichnisobjekt erhalten.
Ich vergleiche die Linux-Kernel-Update-Funktion (Kbuild, Kernel 2.6.28) mit der Struktur und dem Build-Ansatz der Einreichungsseiten für ein noch robusteres Projekt. Unser Projekt enthält ein externes Linux-Kernel-Modul, und unsere Verzeichnisstruktur sieht spezifisch aus (natürlich vereinfacht):
checkout oder src / common / *. c file scour (installiert für andere Plattformen und Linux)checkout / src - linux-driver / source videos * .c (für Linux-Kernel-Treiber)Kasse / Build / Linux / Kbuild Kbuildtmp / linux-2.6.xx / irgendwo ist der Linux-Kernel mit AdditionalUnzip konfiguriertAusgabe / linux-arm-debug / worauf die Objektdokumentation enden soll
Der Kultivierungsprozess kann in look through
einfach nichts ändern, und das Erstellen jedes unserer Module ändert nichts, nicht so viel wie tmp im Vergleich zu linux-2.6.xx
… Alle Ausgabedateien sollten auf jeden Fall output / linux-arm-debug
sein (oder welcher Architektur- und Debug-Plan auch immer zum Zeitpunkt der Kultivierung gewählt wurde).
MOD_OUTPUT_DIR entspricht ../../../output/linux-$(ARCH)-$(DEBUG)obj-m + = Einkommen (MOD_OUTPUT_DIR) /foo_mod.o$ (MOD_OUTPUT_DIR) / our_module-objs: = Dollar (MOD_OUTPUT_DIR) /foo_common.o $ (MOD_OUTPUT_DIR) /foo_linux.o
Dies trägt direkt der Tatsache Rechnung, dass es wichtig ist, dass Sie Objektdateien in einem anderen Verzeichnis speichern können als dem, in dem sich Kbuild
mit ziemlicher Sicherheit befindet. Wie könnte ich jetzt angeben, wann foo_common.o
ausgewählt werden soll, um in â€/checkout/src per common/foo_common.c
und foo_linux auszuwählen. O. kompilieren?
empfangen von … / checkout oder src / linux-driver / foo_linux.c
?
beantragt vom 14. April 2011 um 15:32 Uhr
Nicht die Antwort, die Sie suchen? Durchsuchen Sie andere Fragen mit dem Tag Makefile Linux-kernel Kbuild oder stellen Sie Ihre eigene Frage.
Hier ist ein Makefile, das jogs builds aus dem Source-Tree erstellt, um Module aus dem Kernel-Tree zu atmen (angepasst durch @Marks Kommentar) …
KDIR? = und lib / module / $ (uname -r shell) - buildBUILD_DIR? Entspricht $ (PWD) / BuildBUILD_DIR_MAKEFILE? bedeutet $ (PWD) / build / MakefileStandard: usd (BUILD_DIR_MAKEFILE) bereitstellen -C $ (KDIR) Src = $ (PWD) m = $ (build_dir) Module$ (BUILD_DIR): mkdir -p "$ @"$ (BUILD_DIR_MAKEFILE): $ (BUILD_DIR) Klicken Sie auf "$@"sauber: formuliere -C rrr (KDIR) Src = $ (PWD) m = Dollar (build_dir) clean
obj-m + = my_driver.o
Abgerufen am 16. Juni 2016, 11:48 Uhr
26.2k 1515 alte Symbole 6363 silberneX-Abzeichen 8282 braune Abzeichen
ifdef SRCDIRsrc: = rrr (SRCDIR)verschiedensrc: = $ (Objekt)ende wenn
make -h $ (KDIR) M = $ (Ihr_Ausgabeverzeichnis) SRCDIR = $ (Ihr Quellverzeichnis) `
Behoben: 11. Dezember 2013 4:57 Uhr.
188
Meine unelegante und effiziente Lösung besteht darin, einige der Quelldateien in den Ausgabebaum zu kopieren.
FOO_SOURCES_DIR entspricht $ (src) /../../../ checkout - srcFOO_MOD_OUTPUT_DIR = ../../../output/linux-$(ARCH)-$(DEBUG)# Angegebene Objektdateienobj-m + = Geld (FOO_MOD_OUTPUT_DIR) /foo_mod.oFOO_MODULE_OBJS: = $ (FOO_MOD_OUTPUT_DIR) /foo_common.o Bargeld (FOO_MOD_OUTPUT_DIR) /foo_linux.o$ (FOO_MOD_OUTPUT_DIR) / foo_mod-objs: = $ (FOO_MODULE_OBJS)# Wo finde ich Quellen$ (SRC) / $ (FOO_MOD_OUTPUT_DIR) /foo_common.c: Bargeld (FOO_SOURCES_DIR) /common/foo_common.c$ (SRC) / $ (FOO_MOD_OUTPUT_DIR) /foo_linux.c: Einkommen (FOO_SOURCES_DIR) /linux-driver/foo_linux.c# Regeln für KopierquellenFOO_COPIED_SOURCES ist gleich $ (patsubst% .o, $ (src) /%. C, rrr (FOO_MODULE_OBJS))$ (FOO_COPIED_SOURCES): $ (Q) mkdir -p $ (@ D) Zerebralparese -f $ <$ @Dateien-sauber + = ? rrr (FOO_COPIED_SOURCES)saubere Verzeichnisse + = $ (FOO_MOD_OUTPUT_DIR)
geantwortet am 25. April 2011 um 19:49 Uhr
Obwohl Sie die Methoden, die Sie bisher versucht haben, nicht erwähnt haben (oder wenn Sie ihre Lösung bereits gefunden haben), sehen sie ähnlich aus, fahren Sie einfach weiter unten in Modulen fort. Eine kleine txt-Datei - was Abschnitt 4.3 kann:
--- 4.3 UnterverzeichnisseMehrere Kbuilds können auf Dateien zugreifen, die über eine Vielzahl von Verzeichnissen verstreut sind.Betrachten Sie das folgende Beispiel:...| __ src| | __ complex_main.c| | __ hal| Ausrüstung | __. GEGEN| Aktivieren | __| Ausrüstung | __. STUNDEAktivieren | __ | __ komplex.hZum Einrichten des complex.ko-Moduls benötigen wir dann die folgenden Elementekbuild-Datei: -> Dateiname: Kbuild obj-m: = komplex.o complex-y Src / complex_main: = .o Komplex-y + = src / hal oder hardwareif.o ccflags-y: = -I Einkommen (src) / enable ccflags-y + impliziert -I $ (src) / src - hal / oneatWie Sie sehen können, kennt kbuild die Möglichkeiten, mit den Objektdokumenten zu arbeiten, die zweifellos inin anderen Verzeichnissen. Der Trick besteht darin, auf das Verzeichnis zu verlinkenbezüglich des Speicherorts der gesamten kbuild-Datei. Außerdem ist dasVom Training wird dringend abgeraten.In allen kbuild-Headerdateien müssen Sie explizit angeben, woEs sieht so aus. Wenn kbuild ausgeführt wird, ist Ihr aktuelles Verzeichnis oft immer diesDie Wurzel meiner Grube (Argument "-C") wünscht diesein absoluter Pfad ist erforderlich. bucks (src) unterhält einen absoluten Pfad viazeigt auf das Telefonbuch, in dem kbuild läuftDie Datei befindet sich daneben.
Genehmigt: Fortect
Fortect ist das weltweit beliebteste und effektivste PC-Reparaturtool. Millionen von Menschen vertrauen darauf, dass ihre Systeme schnell, reibungslos und fehlerfrei laufen. Mit seiner einfachen Benutzeroberfläche und leistungsstarken Scan-Engine findet und behebt Fortect schnell eine breite Palette von Windows-Problemen - von Systeminstabilität und Sicherheitsproblemen bis hin zu Speicherverwaltung und Leistungsengpässen.
7.001
abgeholt 27.04.2011 19:36
Ein bisschen da
Beschleunigen Sie jetzt die Leistung Ihres Computers mit diesem einfachen Download.