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ů.