Могу ли я преобразовать патч для ядра Linux в загружаемый модуль ядра?

У меня есть патч для ядра vanila linux, который включает новые файлы, а также изменения в исходных файлах ядра SourceTree.

Я хочу сделать этот патч загружаемым модулем ядра, чтобы избежать пересборки базового ядра.

Поскольку этот патч имеет изменения в файлах заголовков, а также в файле .c и файле данных исходного кода ядра org, у меня есть сомнения, можно ли это сделать модулем ядра?

Пожалуйста, запросите дополнительную информацию, которую вы хотите прояснить.

Спасибо, Сапан


person user3243804    schedule 12.12.2014    source источник


Ответы (1)


Простой ответ - нет.

Более детальный ответ: Да, теоретически возможно сделать что-то вроде того, что вы представляете. Тем не менее, это чрезвычайно сложно - каждая деталь должна быть совершенно правильной - и это не то, что вы могли бы надеяться сделать в произвольной манере. Например, каждая структура данных, которая увеличивается в размере, может привести к необходимости перераспределения и перемещения огромных областей памяти, и каждый указатель, указывающий на один из этих фрагментов данных, затем должен быть скорректирован, и существует потенциальный каскад дальнейших изменений. зависимые корректировки. Просто нет возможности отследить все эти детали.

Но см. https://www.ksplice.com/, который фактически исправляет ядро ​​во время выполнения. Я не знаю много подробностей о ksplice, но я совершенно уверен, что это возможно сделать только с очень жесткими ограничениями на то, что именно меняется из-за проблем, которые я изложил выше, среди прочего.

person Gil Hamilton    schedule 12.12.2014
comment
Вы должны были остановиться после первого предложения, т. е. OP не может избежать пересборки базового ядра с патчем к исходному коду.. - person sawdust; 12.12.2014
comment
На самом деле у меня тоже возникла мысль, когда я посмотрел на тот факт, что патч, который необходимо сделать KLM, имеет изменения в дереве исходного кода ядра, но все же просто хочу подтвердить. Еще одна вещь, которой я хотел бы поделиться, это то, что патч представил новую структуру и инициализировал ее в init_task.h. И, насколько я знаю, init_task.h помогает создать начальную таблицу задач размером около 2 МБ. Мы не можем изменить его с помощью KLM во время выполнения. Пожалуйста, поправьте меня, если я ошибаюсь. И спасибо за ваш ответ. - person user3243804; 15.12.2014