Маркировка загружаемого модуля ядра как 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