GNU/Linux >> Znalost Linux >  >> Linux

Jak sestavit modul jádra Linuxu tak, aby byl kompatibilní se všemi verzemi jádra?

Ve zkratce :stěží může napsat užitečný modul jádra, který lze nahrát do jader relativně široké škály verzí.

Když sestavujete modul proti jádru kompilovanému s CONFIG_MODVERSIONS (jako ve vašem případě), pro každý symbol exportovaný z jádra je CRC pro tento symbol uložen v souboru modulu. CRC je jakýsi kontrolní součet , který mimo jiné zohledňuje rozložení typů použitých pro parametry funkce. Například, pokud rozložení hypotetického struct A se liší ve dvou jádrech, CRC pro funkci f(struct A *a) v těchto jádrech se také liší.

Když je modul načten do běžícího jádra, CRC pro všechny funkce v modulu jsou porovnány s funkcemi pro jádro. Pokud se liší, jádro odmítne načíst modul. Další informace o tomto mechanismu naleznete v dokumentaci jádra (Documentation/kbuild/modules.txt).

Aby bylo možné modul načíst do dvou různých jader, jste omezeni pouze funkcemi, jejichž parametry mají v obou jádrech stejné rozložení. Zejména v případě rozložení typu struct module se liší, žádný modul nelze načíst pro obě jádra.

Existuje několik přístupů, jak dodat ovladač vhodný pro několik jader. Nejjednodušším způsobem je doručit zdroje ovladače a přidejte je do dkms . Pokud běžící jádro nemá vytvořený ovladač, bude ovladač zkompilován automaticky pomocí jeho zdrojů.


Linux
  1. Jak najít všechny soubory končící na .rb s Linuxem?

  2. Jak předat hodnotu vestavěnému modulu jádra Linuxu při spouštění?

  3. Jak nainstalovat modul pro všechny uživatele s pip na linux?

  1. Jak sestavit rpm balíčky

  2. Linux – Jak zjistit, který modul poškozuje jádro?

  3. Linux – poskvrněné jádro v Linuxu?

  1. Linux – Jak správně znovu načíst modul jádra?

  2. Jak najít všechny soubory/složky s oprávněním 777 v Linuxu?

  3. Jak napsat svůj vlastní modul linuxového jádra s jednoduchým příkladem