Godkänd: Fortect
Dagens handledning är utformad för att hjälpa dig om du får en kraftfull felkod för ett kärnobjektkatalogobjekt.
Jag jämför Linux -kärnuppdateringsenheten (Kbuild, Kernel 2.6.28) med strukturen och uppbyggnaden av inlämningsplatserna för ett ännu massivt projekt. Vårt projekt innehåller en out-of-tree Linux-kärnmodul, och vår katalogstruktur ser ut så här (förenklat förstås):
kassa eller src / common / *. c filsökning (installerad för andra plattformar och Linux)checkout / src per linux-driver / source videos * .c (för Linux-kärndrivrutin)kassa / build / Linux / Kbuild Kbuildtmp / linux-2.6.xx / någonstans är Linux-kärnan konfigurerad med additionalUnzipoutput / linux-arm-debug / och där objektdokumentationen ska sluta
Boostprocessen kan bara inte ändra någonting i look through
, och att bygga var och en av våra moduler har svårt att ändra någonting, inte så mycket som tmp per linux-2.6.xx
… Alla utdatafiler behöver bara vara output/linux-arm-debug
(eller vad det nu är arkitektur och felsökningsplan som valts vid förbättrad tid).
MOD_OUTPUT_DIR är lika med ../../../output/linux-$(ARCH)-$(DEBUG)obj-m + = usd (MOD_OUTPUT_DIR) /foo_mod.o$ (MOD_OUTPUT_DIR) /our_module-objs: = funds (MOD_OUTPUT_DIR) /foo_common.o $ (MOD_OUTPUT_DIR) /foo_linux.o
Detta tar hänsyn till att det är viktigt på vägen att lagra objektfiler i en annan katalog än den där Kbuild
kan finnas. Hur skulle jag nu kunna ange att foo_common.o
ska väljas efter â / checkout / src kontra common / foo_common.c
och foo_linux. O. sammanställa?
mottagen från ... / checkout för varje src / linux-driver / foo_linux.c
?
begärdes i ämnet den 14 april 2011 klockan 15:32
Inte svaret du letar efter? Bläddra bland andra frågor märkta Makefile Linux-kernel Kbuild Eller ställ din egen fråga.
Här är en makefil som fortsätter att bygga byggda från källträdet till benfrakturmoduler ur kärnträdet (anpassat med @Marks kommentar) …
KDIR? = för varje lib / modules / $ (uname -r -skal) för varje buildBUILD_DIR? Matchar $ (PWD) / BuildBUILD_DIR_MAKEFILE? är lika med $ (PWD) / build / MakefileStandard: rrr (BUILD_DIR_MAKEFILE) tillhandahåll -C $ (KDIR) Src = $ (PWD) m = $ (build_dir) moduler$ (BUILD_DIR): mkdir -p "$ @"$ (BUILD_DIR_MAKEFILE): $ (BUILD_DIR) Klicka på "$ @"rena: formulera -C -dollar (KDIR) Src = $ (PWD) m = rr (build_dir) ren
obj-m + = my_driver.o
Hämtad 16 juni 2016 11:48
26.2k 1515 gamla ikoner 6363 silverX-märken 8282 bruna märken
ifdef SRCDIRsrc: = rr (SRCDIR)olikasrc: = $ (objekt)sluta om
make -h $ (KDIR) M = $ (din_output -katalog) SRCDIR = $ (din källkatalog) `
Löst: 11 december 2013 04:57.
188
Min oeleganta och effektiva lösning är att kopiera källfiler till utdataträdet.
FOO_SOURCES_DIR är lika med $ (src) /../../../ checkout - srcFOO_MOD_OUTPUT_DIR = ../../../output/linux-$(ARCH)-$(DEBUG)# Specificerade objektfilerobj-m + = kontanter (FOO_MOD_OUTPUT_DIR) /foo_mod.oFOO_MODULE_OBJS: = $ (FOO_MOD_OUTPUT_DIR) /foo_common.o dollar (FOO_MOD_OUTPUT_DIR) /foo_linux.o$ (FOO_MOD_OUTPUT_DIR) / foo_mod-objs: = $ (FOO_MODULE_OBJS)# Var man hittar källor$ (SRC) /$ (FOO_MOD_OUTPUT_DIR) /foo_common.c: (FOO_SOURCES_DIR) /common/foo_common.c$ (SRC) /$ (FOO_MOD_OUTPUT_DIR) /foo_linux.c: cash (FOO_SOURCES_DIR) /linux-driver/foo_linux.c# Regler för kopieringskällorFOO_COPIED_SOURCES innebär $ (patsubst% .o, $ (src) /%. C, rrr (FOO_MODULE_OBJS))$ (FOO_COPIED_SOURCES): $ (Q) mkdir -p $ (@ D) clubpenguin -f $ <$ @files-clean + = rr (FOO_COPIED_SOURCES)rena kataloger + = $ (FOO_MOD_OUTPUT_DIR)
svarade 5 apr 2011 kl 19:49
Även om du inte har nämnt de metoder du har känt hittills (eller om du redan har hittat din lösning), ser de likadana ut, bara fortsätt nedan med att använda moduler. En liten txt -fil - vad avsnitt 4.3 kan göra:
--- 4.3 underkatalogerFlera Kbuilds har åtkomst till filer spridda över flerskiktskataloger.Tänk på följande exempel:...| __ src| | __ komplex_huvud.c| | __ hal| Utrustning | __. MOT| Aktivera | __| Utrustning | __. TIMMEAktivera | __ | __ komplex.hFör att sedan ändra modulen complex.ko behöver vi de viktiga elementenkbuild -fil: -> Filnamn: Kbuild obj-m: = komplex.o complex-y Src / complex_main: = .o Komplex-y + = src / hal per hardwareif.o ccflags -y: = -I dollar (src) / enable ccflags -y + är lika med -I $ (src) / src kontra hal / oneatSom du kan besöka vet kbuild på vilken metod som ska arbeta med de objektdokument som kan finnas ii andra kataloger. Tricket är att leda till katalogenom platsen för någon form av kbuild -fil. Dessutom detTräning avråds starkt.I dess kbuild -header -filer måste du uttryckligen ange varDet tror. När kbuild körs är din nuvarande katalog utan tvekan alltid dettaRoten till min grop (argument "-C") exakt så hären absolut väg krävs. rrr (src) upprätthåller en absolut väg viapekar på de gula sidorna där kbuild körsFilen finns dessutom.
Godkänd: Fortect
Fortect är världens mest populära och effektiva PC-reparationsverktyg. Det litar på miljontals människor för att hålla sina system igång snabbt, smidigt och felfritt. Med sitt enkla användargränssnitt och kraftfulla skanningsmotor hittar och fixar Fortect snabbt ett brett utbud av Windows-problem – från systeminstabilitet och säkerhetsproblem till minneshantering och prestandaflaskhalsar.
7.001
tog hand om 27 april 2011 19:36
Lite där
Snabba upp din dators prestanda nu med denna enkla nedladdning.