Без ответа на мои предыдущие вопросы, вот некоторые предположения, которые также могут быть некоторыми подсказками, и шаг к ответу:
Из того, что я помню, файл .ko - это не что иное, как файл .o, полученный в результате слияния всех файлов .o, созданных вашим исходным модулем, и добавления раздела .modinfo.
В конце любого сборочного Makefile .ko происходит LD-вызов: из того, что я помню, ld вызывается с опцией -r, и это то, что создает тот файл .o, который Makefile вызывает .ko. Этот результирующий файл не следует путать с архивом или библиотекой объектов (файл .a), то есть просто форматом архивирования / упаковки нескольких файлов .o в один: объединенный объект является результатом ссылки, которая создает еще один файл .o модуль: Но в полученном модуле все разделы, которые могли быть объединены, были, и все открытые / внешние пары, которые могли быть разрешены, были внутри этих разделов.
Поэтому я предполагаю, что вы получите файл .ko, содержащий все ваши «локальные» внешние определения:
Те, кто внешние, потому что они
используются для вызова через .o
модули в вашем .ко (но не
нужно больше, так как они не
должен быть вызван снаружи
.ko) и
те, которые нужны модулю .ko
правильно общаться с загрузчиком
и ядро.
Первые из них, скорее всего, уже были разрешены ld во время слияния, но ld не может определить, намереваетесь ли вы сделать так, чтобы они также вызывались извне .ko.
Таким образом, посторонние символы, которые вы видите, являются внешними для каждого из ваших файлов .o, но не нужны как внешние для результирующих .ko.
И то, что вы ищете, это способ раздеть только эти.
Правильно ли описывает этот последний абзац символы, от которых вы хотите избавиться?