#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
Это установит новое ядро и перезапишет заголовки