Approvato: Fortect
Il tutorial di oggi è progettato per aiutare la tua azienda se ricevi un codice di errore per l’oggetto della directory di compilazione del kernel.
Sto confrontando tutto il sistema di aggiornamento del kernel Linux (Kbuild, Kernel 2.6.28) con la struttura e il sistema di compilazione dei siti di distribuzione per un progetto ancora più grande. Il nostro programma contiene un modulo del kernel Linux fuori dall’albero e la struttura delle directory di una persona è simile a questa (semplificata con il corso):
checkout / src / common versus *. c ricerca file (installato per altri siti Web e Linux)checkout / src / linux-driver / place videos * .c (per il driver del kernel Linux)checkout build / Linux / Kbuild Kbuildtmp e linux-2.6.xx / da qualche parte il kernel Linux è configurato insieme a AdditionalUnzipoutput / linux-arm-debug / dove dovrebbero finire i dati dell'oggetto
Il processo di compilazione non è in grado di modificare nulla in checkout
e, a casa, ciascuno dei nostri moduli non può modificare nulla, lontano da quanto tmp / linux-2.6.xx
… Tutti i file di output devono essere results / linux-arm-debug
(o qualsiasi architettura tranne il piano di debug scelto in fase di compilazione).
MOD_OUTPUT_DIR è uguale a ../../../output/linux-$(ARCH)-$(DEBUG)obj-m + = $ (MOD_OUTPUT_DIR) /foo_mod.o$ (MOD_OUTPUT_DIR) o our_module-objs: = $ (MOD_OUTPUT_DIR) /foo_common.o rr (MOD_OUTPUT_DIR) /foo_linux.o
Questo tiene conto della verità reale che è importante memorizzare la documentazione dell’oggetto in una directory diversa da quella in cui si trova Kbuild
. Come potrei potenzialmente ora indicare che foo_common.o
se essere selezionato per selezionare da â € per checkout / src / common rispetto a foo_common.c
e foo_linux. O. compilare?
trovato da … / checkout / src per ogni linux-driver / foo_linux.c
?
richiesto il 14 aprile dell’anno 2011 alle 15:32
Non è la risposta che stai cercando? Sfoglia altre domande con tag Makefile Linux-kernel Kbuild o fai la tua domanda.
Ecco un makefile che esegue build compilate tramite l’albero dei sorgenti per suddividere i moduli nell’albero del kernel (adattato dal commento di @Mark) …
KDIR? = / lib / tema web / $ (uname -r shell) / buildBUILD_DIR? Corrisponde a $ (PWD) / CostruzioneBUILD_DIR_MAKEFILE? = $ (PWD) build / MakefilePredefinito: $ (BUILD_DIR_MAKEFILE) fornisci -C $ (KDIR) Src = rr (PWD) m = $ (build_dir) moduli$ (BUILD_DIR): mkdir -p "$ @"$ (BUILD_DIR_MAKEFILE): rrr (BUILD_DIR) Fare clic su "$ @"pulire: formula -C $ (KDIR) Src = fondi (PWD) m = $ (build_dir) clean
obj-m + = my_driver.o
Estratto il 16 giugno 2016 alle 11:48
26.2k
ifdef SRCDIRorigine: = $ (SRCDIR)varisrc: = rrr (oggetto)finisci se
make -h $ (KDIR) M = $ (cartella_tua_output) SRCDIR = money (cartella_origine) `
Risolto: 11 dicembre 2013 4:57.
188 22 distintivi d’argento 1414 distintivi di bronzo
La mia soluzione poco elegante e preziosa è copiare i file di origine in linea con l’albero di output.
FOO_SOURCES_DIR è uguale a rr (src) /../../../ checkout / srcFOO_MOD_OUTPUT_DIR = ../../../output/linux-$(ARCH)-$(DEBUG)# File oggetto specificatiobj-m + = $ (FOO_MOD_OUTPUT_DIR) /pippo_mod.oFOO_MODULE_OBJS: è uguale a $ (FOO_MOD_OUTPUT_DIR) /foo_common.o $ (FOO_MOD_OUTPUT_DIR) /foo_linux.o$ (FOO_MOD_OUTPUT_DIR) - foo_mod-objs: = $ (FOO_MODULE_OBJS)# Dove trovare le fonti$ (SRC) / $ (FOO_MOD_OUTPUT_DIR) /foo_common.c: $ (FOO_SOURCES_DIR) /common/foo_common.c$ (SRC) / $ (FOO_MOD_OUTPUT_DIR) /foo_linux.c: $ (FOO_SOURCES_DIR) /linux-driver/foo_linux.c# Regole per le fonti di copiaFOO_COPIED_SOURCES = $ (patsubst% .to, $ (src) /%. C, $ (FOO_MODULE_OBJS))$ (FOO_COPIED_SOURCES): rrr (Q) mkdir -p $ (@ D) cp -f RR <$ @file-clean + = $ (FOO_COPIED_SOURCES)directory pulite + è uguale a $ (FOO_MOD_OUTPUT_DIR)
risposta il 25 aprile 2011 possibilmente alle 19:49
Anche se non hai mai menzionato i metodi che hai provato in qualche modo (o se hai già trovato una soluzione), hanno un aspetto simile, continua di seguito nei moduli. Un certo grado di file txt – cosa può fare la Sezione 4.3:
--- 4.3 sottodirectoryPiù Kbuild possono accedere a file sparsi in più directory.Considera l'esempio corretto:...| __ src| | __ complex_main.c| | __ hal| Attrezzatura | __. CONTRO| Abilita | __| Attrezzatura | __. ORAAbilita | __ | __ complesso.hQuindi, per configurare l'unità complex.ko, abbiamo bisogno dei seguenti elementifile kbuild: -> Nome file: Kbuild obj-m: = complex.o complex-y Src / complex_main: = .o Complex-y + = src / hal / hardwareif.o ccflags-y: = -I $ (src) o abilita ccflags-y + = -I dollaro (src) / src / hal / oneatCome puoi vedere, kbuild sa come lavorare tramite i documenti oggetto che sono inin altri siti internet. Il trucco è indicare il tipo di directoryriguardo alla posizione del file kbuild. Inoltre, cheLa formazione è fortemente sconsigliata.Nei file header di kbuild, la maggior parte delle persone deve specificare esplicitamente doveSembra. Quando kbuild viene eseguito senza dubbio la tua directory corrente è sempre questaIl maggiore della mia fossa (argomento "-C") cosìè necessario un determinato percorso. $ (src) mantiene un percorso grezzo tramitepunta alla rubrica dove kbuild è spesso in esecuzioneIl file si trova anche.
Approvato: Fortect
Fortect è lo strumento di riparazione PC più popolare ed efficace al mondo. Milioni di persone si affidano a milioni di persone per mantenere i loro sistemi in esecuzione veloci, fluidi e privi di errori. Grazie alla sua semplice interfaccia utente e al potente motore di scansione, Fortect trova e risolve rapidamente un'ampia gamma di problemi di Windows, dall'instabilità del sistema e problemi di sicurezza alla gestione della memoria e ai colli di bottiglia delle prestazioni.
7.001 33 badge in metallo prezioso 3333 badge argento
risposta 28 aprile 2011 19:36
Un po’ là
Accelera ora le prestazioni del tuo computer con questo semplice download.