Маркировка загружаемого модуля ядра как in-tree
этот вопрос касается ядра linux 4.10.
загрузка LKM вне дерева заставляет ядро печатать предупреждение:
module: loading out-of-tree module taints kernel.
это поднимает от этой регистрации модуль.c:
if (!get_modinfo(info, "intree")) {
чтение get_modinfo это швы, что "intree" -это просто волшебная строка livnig внутри .
под управлением readelf на случайном LKM, который я нашел в своей системе, показывает это:
readelf -a imon.ko | grep intree
161: 00000000000006c0 9 OBJECT LOCAL DEFAULT 13 __UNIQUE_ID_intree1
во время поиска intree в простой пользовательский ЛКМ она не возвращает никаких результатов.
это действительно так?
как некоторые модули помечены как находящиеся в дереве? Это делается путем добавления макроса в модуль (например, MODULE_LICENCE) или путем создания модуля определенным образом или что-то еще?
1 ответов
короче говоря, система сборки ухитряется добавить строку MODULE_INFO(intree, "Y"); на "модуль.ультрасовременный.с" файлом, если, и только если модуль строится intree.
есть очевидный способ обмануть систему, добавив эту строку в один из обычных модуля ".c-файлы, но я не уверен, зачем вам это нужно.
более длинная версия....
внешние модули обычно строятся с помощью команды, подобной этой:
$ make M=`pwd` modules
или старый синтаксис:
$ make SUBDIRS=`pwd` modules
наличие непустого M или SUBDIRS заставляет верхний уровень ядра "Makefile" установить KBUILD_EXTMOD переменной. Он не будет установлен для обычной сборки ядра.
для этапа 2 построения модуля (когда выводится сообщение "Building modules, stage 2") Выполните запуск "scripts/Makefile.modpost" в Makefile. Это работает scripts/mod/modpost с различными вариантами, когда KBUILD_EXTMOD установлен. В частности,-I опция используется, когда KBUILD_EXTMOD is набор.
глядя на источник modpost в " Скрипты / mod / modpost.с"external_module переменная имеет начальное значение 0, а -I опция устанавливает его в 1. Функция add_intree_flag() вызывается со вторым параметром is_intree значение !external_module. The