Linux mini-HOWTO


Обычные проблемы и то, чем вы можете заинтересоваться - часть 3


Q: Команда mount не ждет, пока kerneld загрузит модуль файловой системы

A: Было несколько сообщений о том, что команда mount(8) не ожидает, пока kerneld загружает модуль файловой системы. Команда lsmod, однако, показывает, что kerneld загружает модуль, и если сразу же повторить команду mount, то она выполнится успешно. Это, по-видимому, ошибка в утилитах modules версии 1.3.69f, которая возникает у некоторых пользователей дистрибутива Debian - ее можно исправить, установив последнюю версию утилит modules.

Q: kerneld не может загрузить модуль ncpfs

A: Утилиты ncpfs необходимо собрать с ключом -DHAVE_KERNELD. Смотрите файл сборки (Makefile) утилит ncpfs.

Q: kerneld не может загрузить модуль smbfs

A: У вас старая версия утилит smbmount. Установите последнюю версию (0.10 или новее), которую можно найти на ftp по адресу: Архив SMBFS на TSX-11

Q: Я все построил в виде модулей, и теперь моя система не загружается, или kerneld не может загрузить модуль корневой файловой системы!

A: Нельзя же превращать в модули все подряд: Ядру должно хватать встроенных драйверов, чтобы смонтировать (mount) вашу корневую файловую систему, а также, чтобы запустить все программы, необходимые для запуска kerneld. [1]

Поэтому нельзя превращать в модули:

  • драйвер жесткого диска, на котором находится ваша корневая файловая система

  • собственно драйвер корневой файловой системы

  • драйвер формата кода программ init, kerneld и им подобных

Q: kerneld не запускается в момент загрузки системы - жалуется на libgdbm

A: Новые версии kerneld для работы используют библиотеку GNU dbm, libgdbm.so. Во многих установках этот файл находится в каталоге /usr/lib, а у вас, по-видимому, kerneld запускается до подключения файловой системы /usr. Одним из симптомов этого может быть то, что kerneld не запускается в процессе старта системы (из rc-скриптов), но запускается вручную после загрузки системы. Проблема решается либо путем переноса загрузки kerneld так, чтобы он загружался после подключения (mount) файловой системы /usr, либо путем переноса библиотеки gdbm в корневую файловую систему, т.е. в каталог /lib.

Q: Я получаю сообщение "Cannot load module xxx" ("Не могу загрузить модуль xxx"), но я только что собрал мое ядро без поддержки xxx!

A: Дистрибутив Slackware (и, возможно, некоторые другие) включает в себя стандартный файл /etc/rc.d/rc.modules, в котором содержатся подробные команды modprobe на некоторые конкретные модули. Конкретный список модулей, для которых запускается команда modprobe, зависит от конфигурации начального ядра. Вы, по-видимому, перенастроили ваше ядро, исключив из него модули, которые используются командой modprobe в rc.modules, поэтому и возникает сообщение об ошибке. Исправьте ваш файл rc.modules, закоментировав строчки с модулями, которые вы больше не используете, или вообще удалите файл, чтобы kerneld загружал модули только тогда, когда они потребуются.

Q: Я пересобрал ядро и модули, и до сих пор получаю сообщения о неразрешимых символах (unresolved symbols) в модулях при загрузке

A: Вы, видимо, переконфигурировали/пересобрали ваше ядро и исключили несколько модулей. Значит, у вас сохранились старые модули в районе каталога /lib/modules. Наиболее простое решение - удалить все подкаталоги каталога /lib/modules/x.y.z, и запустить make modules_install из каталога, содержащего исходные тексты ядра. Заметьте, что такая проблема существует, когда вы изменяете конфигурацию ядра без изменения его версии. Если вы получили это сообщение при переходе на новую версию ядра, то у вас, очевидно, другая проблема.

Q: Я установил Linux с ядром версии 2.1 и теперь не могу загрузить НИ ОДИН модуль!

A: Ядра Linux-а нечетных версий являются тестовым. Поэтому можно ожидать, что такие вещи будут происходить время от времени. Одна из вещей, которая серьезно изменилась - это способ работы с модулями, а также способ и место загрузки модулей ядром в память. Кроме того, Richard Henderson теперь отвечает за разработку модулей ядра.

В двух словах, если вы хотите использовать модули с разрабатываемым ядром, вы должны