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