Комментарии 13
Это потрясающая статья! Видно как было много работы проделано. Сейчас нет возможности, но вечером попробую на реальном железе.
Вот это прекрасная иллюстрация к тезису, что ядро - это просто программа! Тут автор @PrincePercia "Ядро Linux: Реально ли это просто программа?" пытался привести пример того, что это программа, но нигде этого не было видно. А здесь хорошая иллюстрация, что можно встроить свою функцию, которая будет работать внутри этой программы и ничего больше ей не требуется.
Полный восторг, знайте - это круто!

Итак, мне удалось это повторить. Пишу короткую инструкцию.
Ядро берём отсюда https://github.com/lukovkonst/tetris-in-linux-kernel/releases/tag/v6.12.67-1
Сохраняем файл tetris-in-linux-kernel-6.12.67-1 на флешку по пути: mpuntpoint/EFI/BOOT/BOOTX64.EFI . Важно чтобы файл стал с именем BOOTX64.EFI . В UEFI выбираем нашу флешку и наслаждаемся.
Кайф да и только. Столько крутых возможностей это открывает! На канале у себя выложу видео без ютуба.
Очень круто! Читал ранее упомянутый пост про то, что ядро - тоже программа, но тут всё значительно понятнее.
Работа с ядрами для встраиваемых устройств тема интересная, но тогда статья будет занимать узкую нишу.
Кстати, а не думали позже написать про это? Как тому, кто больше имеет дело с железом, будет очень интересно.
Техническая возможность загрузить модули от одного ядра в другое есть. Не всегда и не все, между версиями не должны ломаться внутренние апи, но если очень нужно...
insmod -f
(Не делайте так на проде)
Любопытно, а запущенный тетрис - это единственный поток, активно выполняющийся в данном случае? Если так, то это открывает дополнительные возможности для синтетического микробенчмаркинга, когда хочется, скажем получить количество промахов по кэшу или там статистику и пенальти предсказателя переходов без влияния на результат от других потоков. Тут ведь фактически детерминированный реалтайм, и уровень ядра, можно без заморочек использовать RDPMC и считать такты и количество инструкций, другие процессы не будут оказывать влияния. Помимо обработчика прерываний клавиатуры там что ещё крутится? Надо будет на чистом асме набросать бенчмарк на досуге.
если запустить ядро Linux без корневой файловой системы или файла initramfs, то оно упадет с сообщением о панике ядра
Давно initramfs стало обязательным?
Насколько помню это было опцией при сборке.
Статья отличная!
Особенно радует подробность команд для возможности повторения.
Вы в статье упоминаете про то что если ядро будет другое то модуль уже не подойдет.
А по вашему опыту. Насколько сильно меняется ядро от версии к версии в плане обратной совместимости?
Иными лосвами например есть ядро 6 есть 6.1 есть 6.1.3 в пределах версии будет совместим модуль? А если уже ниже выше то все? все функции не совместимы становятся? просто очень много софта и драйверов переставших работать... хочется понять насколько много там нужно перелопачивать чтобы заработало. а то может "указатель" условный поменять и будет достачтоно.
и вообще. а можно ли сделать универсальный модуль? как статическую библиотеку? ))
Модуль для другой версии ядра не загрузится, потому что это защита ядра Linux. @vanxantуже написал в комментариях, что это можно обойти.
Это проблема бинарной несовместимости, когда меняются структуры и смещения полей становятся другими. В этом случае принудительно загружая модуль от для другой версии ядра вы делаете на свой страх и риск.
Что касается совместимости на уровне исходного кода, насколько изменчиво ядро - это субъективно с вероятностной составляющей. Все зависит, что вы используете в своем модуле. Меньше компонентов ядра используете, меньше вероятность, что сломается.
Наверное, единственный алгоритм - это попытаться скомпилировать модуль, если не получится, посмотреть ошибки, Исправить. После усердно тестировать и разбираться в исходном коде модуля и ядра.
Статический модуль ядра - такого нет. Разделяемые и статические библиотеки - это userspace. В ядре немного другие правила.
Информация
- Сайт
- timeweb.cloud
- Дата регистрации
- Дата основания
- Численность
- 201–500 человек
- Местоположение
- Россия
- Представитель
- Timeweb Cloud
Тетрис в ядре Linux