A csatlakoztatott rendszermag modulok különálló összeállítása linux - stack overflow oroszul

Két a és b modulot egymástól elkülönítve kell összeállítani, míg az egyiket a másikhoz csatlakoztatja.
Megmagyarázom egy példával:
a.c fájl

Van egy közös Makefile

Ebben a szakaszban a modulok összeszerelése és betöltése a következő sorrendbe történik: a -> b. mert b hívja a függvényt a.

Módosítsuk a feladat feltételeit, terítsük a modulokat különböző mappákra, és mindegyikhez létrehozzuk a Makefile-t.
Most, amikor a b modult építjük, a következőket látjuk: FIGYELEM: "hello_print_msg" [. /b/hello_b.ko] undefined! Ha a modult tartalmazó mappából mostantól a modullal rendelkező mappában található Module.symvers fájl másolja (helyettesíti) a b modult. és futtassa újra a make parancsot. minden jó lesz!

Kérdés: Van még egy módja annak, hogy megmondja a Linux kernel modulgyűjtőnek, hol kell keresni az exportált karakterek listáját tartalmazó fájlokat?

ezt a dokumentáció írja le. a 6.3. szimbólumokat egy másik külső modulból.

alul a szabad fordításom:

néha egy külső modul egy másik külső modulból származó azonosítókat használ. A kbuildnek tudnia kell róla, hogy ne aggódjon az ismeretlen azonosítókkal kapcsolatos figyelmeztetésekkel kapcsolatban. három megoldás létezik.

a kbuild fájlt a szint feletti könyvtárban használva

ha két modulja van, foo.ko és bar.ko. és a foo.ko modulhoz bar.ko. azonosítók szükségesek. A közös kbuildfájlt a fent említett könyvtári szintről is használhatja - mindkét modul ugyanabban a rendszerben fordul elő. vegye figyelembe a következő könyvtárstruktúrát:

akkor a kbuild fájl így néz ki:

mindkét modul összeszereléséhez az összes azonosítóval kapcsolatos teljes információt tartalmaz.

további fájl Module.symvers használata

Külső modul létrehozásakor létrehozza a Module.symvers fájlt. amely a rendszermagban nem meghatározott összes exportált azonosítót tartalmazza. hogy hozzáférjen az azonosítókhoz a bar.ko fájlból, másolja át a Module.symvers fájlt a modul assembly mappájából a könyvtárba, ahol a foo.ko gyűjtődik. A build folyamat során a kbuild elolvassa ezt a fájlt, és egy új Module.symvers kerül létrehozásra a végén. amely a leírt azonosítók "összegét" tartalmazza, amelyek nem tartoznak a rendszermaghoz.

a KBUILD_EXTRA_SYMBOLS változó használata

Kapcsolódó cikkek