Изменения, не учтенные при перекомпиляции исходных текстов ядра Linux

#compilation #linux-kernel

Вопрос:

Я хочу использовать режим защиты от записи функции userfaultfd, но он реализован только в Linux 5.11. У меня ubuntu 20 с ядром 5.4, поэтому я установил версию 5.11 Linux из исходных текстов, но когда я перезагружаюсь в установленной версии и пытаюсь использовать режим защиты от записи в пользовательской программе на c, макросы (например, UFFDIO_WRITEPROTECT) все еще не определены. И я проверил, что userfaultfd не является модулем (выполняет lsmod).

С другой стороны, если я внесу изменения, например, в планировщик только для теста (скажем, в kernel/sched/core.c:context_switch), изменения будут приняты во внимание, потому что это в ядре, но изменений для пользовательского пространства нет, я в замешательстве.

Файл userfaultfd.c находится в каталоге fs/ ядра. Так что, пожалуйста, мне чего-то не хватает в процессе компиляции (сделайте menuconfig, сделайте, сделайте modules_install, сделайте) ?

Комментарии:

1. in a c user program the macros Итак, вы включили новые заголовки linux из программы?

2. Я включил библиотеку userfaultfd.h, которая изменена с 5.4 до 5.11

Ответ №1:

Я неверно истолковал допущенную мной ошибку. Изменения действительно учитываются при загрузке только что скомпилированного ядра.

Но, пытаясь понять, что происходит при загрузке скомпилированного ядра, я получил следующее:

  • При загрузке ядра, скомпилированного из исходных текстов, библиотеки в /usr/include не изменяются на диске
  • Если вы хотите перезаписать их измененным, вам следует сделать это:

    сделайте deb-pkg //из каталога источников ядра cd .. sudo dpkg -i *.deb

Это установит новое ядро и перезапишет заголовки