Интересует такая вещь. Когда компилирую свой модуль для версии ядра скажем 2.6.31.4 ОС отказывается его подключать по средствам команды insmod на ядрах: 2.6.31.6 , 2.6.31.4-desktop-1mnb и тд... . И приходится каждый раз перекомпилировать модуль, под текущую версию ядра. Интересует следующее, как сделать так, чтоб модуль скомпилированный на 2.6.31.4 , подгружался в ядро... на 2.6.31.6 (как избежать перекомпиляции модуля)
уберите из своего модуля символ vermagic. Автоматизировать процесс можно закомментив соответствующие строчки в /usr/src/linux/scripts/mod/modpost.c::add_header() и пересобрав модуль. однако я должна предупредить что это чревато неприятностями ибо вендоры имеют привычку накладывать разные патчи на вроде бы ядра одной версии. кроме того в минорных версиях тоже может поменятся abi
stmia вопрос - будет ли он работать? можно ли в линухе собрать версия-независимый модуль ядра? такой чтобы или грузился и работал или говорил - не найден символ ХХХ, лоад файлед? не "хелло ворлд" а что-нибудь практически интересное, например файл-систем-фильтр? спасибо
теоретически можно, но набор api которым он может пользоваться будет оччень сильно ограничен. на практике - это похлеще чем ходьба по минному полю. сигнатуры одних и тех же функций и одни и те же структуры могут очень сильно меняться от версии к версии. стеки и взаимодействие между уровнями одного стека -тоже. стек VFS в linux коротенький, такого понятия как файл-систем-фильтр (в том виде как оно понимается в windows) нету
z0mailbox Те кому очень хочется делают иначе. Ведь код модуля делится на две части, интерфейс к ядру и собственно модуль. Модуль распространяется объектником, интерфейс в виде .c файла. В качестве примера могу привести дрова от nvidia. Когда-то давным давно я в таком же виде имел дрова на winmodem.
stmia VFS как я понял и не предназначался и для создания фильтров жаль что линукс лишен такой полезной возможности глупо получается - несколько драйверов железа снизу и файлсистем драйвер сверху БЕЗ СОРЦОВ и никак не влезть между неполноценная операционка ИМХО r90 проблема в самой необходимости компиляции у меня продукт ставится на ESX где GCC нет и тащить его с собой ну очень не хочется
в сорцах есть файлик где линус пишет, почему "в топку бинарную совместимость" читаем, а потом плюемся, ну и не забываем про переносимость и все такое.
z0mailbox Мои соболезнования. Я тоже не переношу связываться со всей этой пропиетарщиной. Вечно она создаёт проблем больше, чем решает. Но, увы и ах, такова жизнь.
Без перекомпиляции никак. binary blob делай. В чём проблемма? читай /usr/src/linux/Documentation/kbuild/modules.txt. пункт 4.2
попробуй Module versioning support укзать при сборке ядра..а потом компили и вставляй, компили и вставляй..модули CONFIG_MODVERSIONS=y , хотя я сам это не помню чтобы пробовал..но судя по описанию,подходит