Мини-HOWTO: Linux kerneld | ||
---|---|---|
Пред. |
В: Почему я получаю сообщение Cannot locate module for net-pf-X (Не могу найти модуль для net-pf-X), когда я запускаю ifconfig
О: В районе версии 1.3.80 ядра, код работы с сетью был изменен, чтобы поддерживать загрузку семейств сетевых протоколов (например, IPX, AX.25 и AppleTalk) в виде модулей. Поэтому был введен новый вид запроса ядра к kerneld: net-pf-X, где X - это число, определяющее протокол (см. /usr/src/linux/include/linux/socket.h для конкретных значений различных чисел). К сожалению, ifconfig вызывает своими действиями появление этих сообщений, поэтому у многих появляется пара таких сообщений в журнале загрузки системы и затем при запуске ifconfig для настройки устройства обратной петли. Эти сообщения безобидны, и вы можете запретить их, добавив соответствующие строки
alias net-pf-3 off # Забыть AX.25 alias net-pf-4 off # Забыть IPX alias net-pf-5 off # Забыть AppleTalk |
в /etc/conf.modules. Конечно вам не надо добавлять строчку о запрете IPX, если вы используете его в виде модуля.
О: На самом деле пару раз были такие вопросы. Скорее всего, это неправильное взаимодействие между kerneld и скриптом tkPPP, который используется на некоторых системах для настройки и мониторинга PPP соединения - скрипт видимо запускает в цикле ifconfig. Это, в свою очередь, заставляет kerneld каждый раз искать модули net-pf-X (см. выше), тем самым загружая систему и, возможно, забрасывая системный журнал потоком сообщений "Cannot locate module for net-pf-X" ("Не могу найти модуль для net-pf-X") . Пока нет известного решения, кроме того, как не использовать tkPPP, или его изменения для другого способа мониторинга соединения.
О: Добавьте строчку SCSI hostadapter в файл /etc/conf.modules. Смотрите описание строки scsi_hostadapter выше.
О: Это ошибка в утилитах modules, она проявляется только с пакетом binutils версии 2.6.0.9 и выше, и описана в примечаниях и дополнениях (releasenotes) binutils. Поэтому их и читайте. Или достаньте новую версию утилит modules, в которой эта ошибка исправлена.
О: Настройки модуля находятся внутри самого модуля на момент загрузки. Поэтому, когда kerneld автоматически выгружает модуль, все настройки, которые вы делали, теряются, и при следующей загрузке модуля настройки возвращаются в значения по умолчанию.
Вы можете заставить kerneld настроить модуль путем запуска программы после того, как модуль автоматически загружен. Смотрите раздел Pre/Post Install, описывающий строки post-install.
О: Никак. Ни одна из версий dosemu - официальных или тестовых - не поддерживает загрузку модулей dosemu через kerneld. С другой стороны, если у вас ядро версии 2.0.26 и выше, вам просто не нужны дополнительные специальные модули dosemu - просто обновите свой dosemu до версии 0.66.1.
В: Почему я получаю сообщения Ouch, kerneld timed out, message failed ("Ох, kerneld превысил время ожидания, запрос не выполнен") ?
О: Когда ядро посылает запрос kerneld, оно ожидает подтверждения в течение секунды. Если kerneld не посылает это подтверждение, тогда и возникает это сообщение. Запрос посылается заново, и, в конце концов, должен пройти.
Это обычно происходит в системах с большой загрузкой, а так как kerneld - это процесс пользовательского уровня, он работает так же, как и любой другой процесс в системе. В пиковые моменты перегрузки системы ему может просто не хватать времени, чтобы послать подтверждение вовремя.
Если это происходит, а система не перегружена, попробуйте
перезапустить kerneld. (Пошлите сигнал "Kill" процессу kerneld,
а затем снова запустите его командой
/usr/sbin/kerneld). Если проблема не
исчезла, напишите отчет об ошибке по адресу
<linux-kernel@vger.rutgers.edu>
, но,
пожалуйста, сначала убедитесь в том, что
версии вашего ядра и kerneld действительно новые. Проверьте
соответствие требованиям файла
linux/Documentation/Changes
О: Было несколько сообщений о том, что команда mount(8) не ожидает, пока kerneld загружает модуль файловой системы. Команда lsmod, однако, показывает, что kerneld загружает модуль, и если сразу же повторить команду mount, то она выполнится успешно. Это, по-видимому, ошибка в утилитах modules версии 1.3.69f, которая возникает у некоторых пользователей дистрибутива Debian - ее можно исправить, установив последнюю версию утилит modules.
О: Утилиты ncpfs необходимо собрать с ключом -DHAVE_KERNELD. Смотрите файл сборки (Makefile) утилит ncpfs.
О: У вас старая версия утилит smbmount. Установите последнюю версию (0.10 или новее), которую можно найти на ftp по адресу: Архив SMBFS на TSX-11
В: Я все построил в виде модулей, и теперь моя система не загружается, или kerneld не может загрузить модуль корневой файловой системы!
О: Нельзя же превращать в модули все подряд: Ядру должно хватать встроенных драйверов, чтобы смонтировать (mount) вашу корневую файловую систему, а также, чтобы запустить все программы, необходимые для запуска kerneld. [1] Поэтому нельзя превращать в модули:
драйвер жесткого диска, на котором находится ваша корневая файловая система
собственно драйвер корневой файловой системы
драйвер формата кода программ init, kerneld и им подобных
О: Новые версии kerneld для работы используют библиотеку GNU dbm, libgdbm.so. Во многих установках этот файл находится в каталоге /usr/lib, а у вас, по-видимому, kerneld запускается до подключения файловой системы /usr. Одним из симптомов этого может быть то, что kerneld не запускается в процессе старта системы (из rc-скриптов), но запускается вручную после загрузки системы. Проблема решается либо путем переноса загрузки kerneld так, чтобы он загружался после подключения (mount) файловой системы /usr, либо путем переноса библиотеки gdbm в корневую файловую систему, т.е. в каталог /lib.
В: Я получаю сообщение "Cannot load module xxx" ("Не могу загрузить модуль xxx"), но я только что собрал мое ядро без поддержки xxx!
О: Дистрибутив Slackware (и, возможно, некоторые другие) включает в себя стандартный файл /etc/rc.d/rc.modules, в котором содержатся подробные команды modprobe на некоторые конкретные модули. Конкретный список модулей, для которых запускается команда modprobe, зависит от конфигурации начального ядра. Вы, по-видимому, перенастроили ваше ядро, исключив из него модули, которые используются командой modprobe в rc.modules, поэтому и возникает сообщение об ошибке. Исправьте ваш файл rc.modules, закоментировав строчки с модулями, которые вы больше не используете, или вообще удалите файл, чтобы kerneld загружал модули только тогда, когда они потребуются.
В: Я пересобрал ядро и модули, и до сих пор получаю сообщения о неразрешимых символах (unresolved symbols) в модулях при загрузке
О: Вы, видимо, переконфигурировали/пересобрали ваше ядро и исключили несколько модулей. Значит, у вас сохранились старые модули в районе каталога /lib/modules. Наиболее простое решение - удалить все подкаталоги каталога /lib/modules/x.y.z, и запустить make modules_install из каталога, содержащего исходные тексты ядра. Заметьте, что такая проблема существует, когда вы изменяете конфигурацию ядра без изменения его версии. Если вы получили это сообщение при переходе на новую версию ядра, то у вас, очевидно, другая проблема.
О: Ядра Linux-а нечетных версий являются тестовым. Поэтому можно ожидать, что такие вещи будут происходить время от времени. Одна из вещей, которая серьезно изменилась - это способ работы с модулями, а также способ и место загрузки модулей ядром в память. Кроме того, Richard Henderson теперь отвечает за разработку модулей ядра.
В двух словах, если вы хотите использовать модули с разрабатываемым ядром, вы должны
прочитать файл Documentation/Changes и выяснить, какие пакеты требуют обновления в вашей системе
использовать наиболее новый пакет modutils, доступный по адресу AlphaBits на Red Hat или на зеркале TSX-11
Если вы хотите использовать модули с ядром версии 2.1, я бы порекомендовал использовать ядро, как минимум, версии 2.1.29.
О: kerneld ранее поддерживал возможность установления dial-up соединения по требованию системы; попытки посылать пакеты в сеть без соединения должны были заставлять kerneld запускать скрипт /sbin/request_route для установления PPP или SLIP соединения.
Но это была плохая идея. Alan Cox, один из знаменитых специалистов по сетям в Linux, написал в списке рассылки по ядру Linux, что
Утилита request-route устарела, не работает и не нужна [...] Она также убрана из структур 2.1.x.
Вместо использования скрипта request-route вместе с kerneld, я настоятельно советую вам установить пакет diald (Eric Schenk), доступный по адресу http://www.dna.lth.se/~erics/diald.html.
[1] | (На самом деле, это не совсем так. Поздние версии 1.3.x и все 2.x версии ядер поддерживают режим загрузочного ram-диска, загружаемого LILO или LOADLIN-ом, и также существует возможность загрузить модули с этого "диска" практически в любой момент в процессе загрузки. Как это сделать, описано в файле linux/Documentation/initrd.txt, поставляемом с исходными текстами ядра.) |