Перестройка / Обновление модуля ядра
Привет, следующая проблема: я использую довольно странный дистрибутив linux здесь на работе (Centos 5), который, кажется, имеет более старое ядро (или, по крайней мере, некоторые различия в ядре), и вы не можете просто обновить его. Программа, которую мне нужно установить, нуждается в функции crypto_destro_tfm (и, вероятно, еще немного, но это единственная ошибка на данный момент), которая включена в файл linux/crypto/api.c - поэтому я предполагаю, что она находится в модуле ядра crypto_api. Проблема в том, что в моем дистрибутиве у меня даже нет crypto / api.c, и хотя у меня есть модуль crypto_api.ko, похоже, что этой функции там нет.
Мой план следующий: возьмите crypto_api из более нового дистрибутива Linux, а затем скомпилируйте его и загрузите модуль в мои centos.
Теперь я надеюсь, что некоторые из вас скажут мне, что мне нужно сделать, чтобы перестроить и заменить этот модуль. Конечно, у меня есть все исходные файлы из более нового ядра. (Напоминаю: я не могу просто перекомпилировать и использовать более новое ядро, b/c centos отстой таким образом) Спасибо
FWIW: вот точная ошибка
ВНИМАНИЕ: "crypto_destroy_tfm" [/home/Chris/digsig-patched/digsig_verif.ko] не определено!
2 ответа
Существует большая вероятность того, что обратное изменение API в старом ядре приведет к каскаду проблем. Предположим, вы вернули crypto api версии 2.6.Y на локальную версию 2.6.X
Теперь у вас следующая ситуация:
- модуль crypto api export 2.6.Y функции
- Ваш внешний модуль может быть доволен этой ситуацией
- все другие модули, которые зависят от версии 2.6.X крипто API, будут жаловаться.
Но подождите, я могу перенести недавний код ядра во все модули, которые жалуются, и здесь мы идем... Ой, но тогда мы имеем прежнюю ситуацию, но теперь каждый модуль с обратным портированием может вызвать подобную ситуацию.
Если вы не можете обновить ядро CentOS, потому что в ядре CentOS есть много пользовательского кода, который вы боитесь потерять при работе с "ванильным" ядром, то вы можете обнаружить, что проще "понизить" версию своего внешнего модуль:
- Посмотрите на текущий крипто API (например, используя lxr.linux.no)
- Посмотрите на версию ядра этого API
- Попробуйте посмотреть, как новый API может быть заменен вызовом старого API для обеспечения аналогичной функции.
- Измените внешний модуль, чтобы использовать старый API вместо нового.
В любом случае вы не сможете заменить ядро на ванильное, но вы должны хотя бы уметь его перестраивать, а затем исправлять, перестраивать и т. Д. Если вы не можете выполнить эту простую задачу тогда я не думаю, что бэкпортирование чего-либо будет успешным.
Попробуйте загрузить RPC-версию SRC из более новой версии CentOS, в которой есть модуль, и перекомпилируйте RPM-версию на CentOS 5:
rpmbuild --rebuild kernel-X.XX-X.src.rpm
У меня нет копии CentOS для сравнения, поэтому вы можете прочитать страницу руководства в rpm / rpmbuild, но я обнаружил, что перекомпилировать весь пакет, включающий ядро и все его модули, безопаснее, чем просто попытаться портирование одного модуля из более нового ядра. Я делаю это иногда в Debian/Ubuntu, когда мне нужен более новый пакет для чего-либо.