Goedgekeurd: Fortect
De tutorial van vandaag is bedoeld om je te helpen als je een foutcode ontvangt voor een kernel-write directory-object.
Ik vergelijk het Linux-kernelupdatesysteem (Kbuild, Kernel 2.6.28) met het schets- en bouwsysteem van de indieningssites voor een nog groter project. Ons project bevat uw out-of-tree Linux-kernelmodule, en ons directorybestandsformaat ziet er als volgt uit (vereenvoudigd natuurlijk):
check out / src / common / *. zoeken naar bestanden (geïnstalleerd voor andere platforms en Linux)checkout / src / linux-driver / bronvideo's 1 . .c (voor Linux-kernelstuurprogramma)afrekenen / bouwen of Linux / Kbuild Kbuildtmp / linux-2.6.xx / enige tijd is de Linux-kernel geconfigureerd met additionalUnzipoutput - linux-arm-debug / waar de objectdocumentatie gaat eindigen
Het bouwproces kan het probleem gewoon niet veranderen in checkout
, en het bouwen van elk vergelijkbaar met onze modules kan niets veranderen, niet zo erg als tmp / linux-2.6.xx < /code> ... Alle uitvoerbestanden moeten
-uitvoer zijn per linux-arm-debug
(of welk architectuur- en debugplan dan ook gekozen tijdens het bouwen).
MOD_OUTPUT_DIR als een ../../../output/linux-$(ARCH)-$(DEBUG)obj-m + = $ (MOD_OUTPUT_DIR) /foo_mod.o$ (MOD_OUTPUT_DIR) of our_module-objs: = $ (MOD_OUTPUT_DIR) /foo_common.o $ (MOD_OUTPUT_DIR) /foo_linux.o
Dit houdt rekening met het feit dat het belangrijk is om objectbestanden op te slaan in de laatste directory die verschilt van die waarin specifiek Kbuild
zich bevindt. Hoe kon ik onmiddellijk aangeven dat foo_common.o
zeer beperkt zou moeten zijn om te kiezen uit â € / see / src / common / foo_common.c
en ook foo_linux . O. compileren?
ontvangen als resultaat van … / checkout / src / linux-driver - foo_linux.c
?
aangevraagd op 14 april 2011 binnen 15:32
Niet het antwoord dat u zoekt? Blader door andere vragen Tagged Makefile Linux-kernel Kbuild Of stel je eigen vraag.
Hier is een duidelijke makefile die builds uitvoert die zijn gebouwd vanuit de koopboom om modules uit de belangrijkste kernelboom te breken (aangepast van de opmerking van @Mark) ...
KDIR? = / lib / modules / rr (uname -r shell) / buildBUILD_DIR? Komt overeen met dollar (PWD) / BuildBUILD_DIR_MAKEFILE? = $ (PWD) / makefile bouwenStandaard: $ (BUILD_DIR_MAKEFILE) bieden -C $ (KDIR) Src = $ (PWD) m is gelijk aan $ (build_dir) modules$ (BUILD_DIR): mkdir -p "$ @"$ (BUILD_DIR_MAKEFILE): $ (BUILD_DIR) Klik op "$ @"schoon: ontwikkel -C $ (KDIR) Src = $ (PWD) yards = $ (build_dir) schoon
obj-m + komt overeen met my_driver.o
Ontvangen 16 juni 2016 11:48 am
26.2k
ifdef SRCDIRsrc: = $ (SRCDIR)verscheidenesrc: = $ (object)stop als
make -h $ (KDIR) M = rrr (uw_uitvoermap) SRCDIR = $ (uw bronmap) `
Opgelost: 11 december, het jaar 2013 4:57 uur.
188
Mijn onelegante en efficiënte oplossing is om de bronbestanden naar de productstructuur te kopiëren.
FOO_SOURCES_DIR is gelijk aan $ (src) /../../../ kijk naar / srcFOO_MOD_OUTPUT_DIR = ../../../output/linux-$(ARCH)-$(DEBUG)# Opgegeven protestbestandenobj-m + = $ (FOO_MOD_OUTPUT_DIR) /foo_mod.oFOO_MODULE_OBJS: = ? rrr (FOO_MOD_OUTPUT_DIR) /foo_common.o $ (FOO_MOD_OUTPUT_DIR) /foo_linux.o$ (FOO_MOD_OUTPUT_DIR) / foo_mod-objs: komt overeen met $ (FOO_MODULE_OBJS)# Waar vind je bronnen$ (SRC) - $ (FOO_MOD_OUTPUT_DIR) /foo_common.c: $ (FOO_SOURCES_DIR) /common/foo_common.c$ (SRC) of $ (FOO_MOD_OUTPUT_DIR) /foo_linux.c: $ (FOO_SOURCES_DIR) /linux-driver/foo_linux.c# Regels om bronnen te kopiërenFOO_COPIED_SOURCES = $ (patsubst% .o, rr (src) /%. C, $ (FOO_MODULE_OBJS))$ (FOO_COPIED_SOURCES): $ (Q) mkdir -delaware $ (@ D) cp -f $ <$ @files-clean + is gelijk aan $ (FOO_COPIED_SOURCES)mappen opschonen + = rrr (FOO_MOD_OUTPUT_DIR)
tevreden 25 april 2011 om 19:49 uur
Hoewel je nog geen methoden hebt genoemd die je tot nu toe hebt geprobeerd (of indien verkregen al een oplossing hebt gevonden), lijken ze op elkaar, ga hieronder volledig verder in modules. Een kleine txt-aanzet - wat sectie 4.3 kan doen:
--- 4.3 submappenMeerdere Kbuilds hebben toegang tot bestanden die in meerdere mappen zijn gepubliceerd.Beschouw het volgende voorbeeld:...| __ src| | __ complex_main.c| | __ hal| Uitrusting | __. TEGEN| Inschakelen | __| Uitrusting | __. UURInschakelen | __ | __ complex.hOm vervolgens de module complex.ko te configureren, hebben we de volgende elementen nodig:kbuild-bestand: -> Bestandsnaam: Kbuild obj-m: is gelijk aan complex.o complex-y Src per complex_main: = .o Complex-y + komt overeen met src / hal / hardwareif.o ccflags-y: betekent -I $ (src) / inschakelen ccflags-y + = -I $ (src) versus src / hal / oneatOmdat je kunt touren, weet kbuild hoe te werken met de speelgoeddocumenten die erin zittenin andere mappen. De magie is om naar de directory te wijzenmet betrekking tot de stad van het kbuild-bestand. Bovendien, datTrainen wordt ten stelligste afgeraden.In de kbuild-headerbestanden moet u duidelijk specificeren waarHet lijkt. Wanneer kbuild wordt uitgevoerd, is uw verbazingwekkende huidige map altijd dezeDe wortel van mijn put (argument "-C") zoals dezeeen absoluut pad is vereist geworden. $ (src) behoudt een absolute focus viawijst naar het telefoonboek waar kbuild draaitHet document bevindt zich ook.
Goedgekeurd: Fortect
Fortect is 's werelds meest populaire en effectieve pc-reparatietool. Miljoenen mensen vertrouwen erop dat hun systemen snel, soepel en foutloos blijven werken. Met zijn eenvoudige gebruikersinterface en krachtige scanengine kan Fortect snel een breed scala aan Windows-problemen vinden en oplossen - van systeeminstabiliteit en beveiligingsproblemen tot geheugenbeheer en prestatieproblemen.
7.001
beantwoord op 27 april, dit jaar om 19:36 uur
Een minimale daar
Versnel de prestaties van uw computer nu met deze eenvoudige download.