В этом разделе приводятся примеры нескольких программ, которые можно использовать для передачи аргументов загрузки ядра в само ядро. Рассматривается, также, обработка параметров, какие ограничения существуют на параметры загрузки и как они передаются к соответстующему устройству.
Важно помнить, что в параметрах загрузки нельзя использовать пробелы, только между отдельными аргументами. Список значений для одного аргумента должен разделяться запятыми между значениями, и опять же, никаких пробелов. Смотри пример ниже.
ether=9,0x300,0xd0000,0xd4000,eth0 root=/dev/hda1 *ПРАВИЛЬНО* ether = 9, 0x300, 0xd0000, 0xd4000, eth0 root = /dev/hda1 *НЕПРАВИЛЬНО*
После загрузки и запуска ядра Linux
посмотреть параметры командной
строки, заданные при загрузке,
можно просто набрав /proc/cmdline
.
Обычно используется программа LILO (LInux LOader -- загрузчик Linux), написаная Вернером Алмесбергером (Werner Almesberger). Она может загружать разные ядра и хранит конфигурационную информацию в обычном текстовом файле. Большинство дистрибутивов поставляются с LILO в качестве загрузчика по-умолчанию. LILO без проблем может загружать DOS, OS/2, Linux, FreeBSD и т.д. и является достаточно гибкой.
Типичная конфигурация
приостановит LILO и напечатает LILO:
после включения компьютера. Затем
она ждет несколько секунд ввода
пользователем дополнительных
параметров и, в случае их
отсутствия, загружает систему по-умолчанию.
Типичные системные метки,
используемые людьми в файле
конфигурации, этоlinux
, backup
и msdos
. Если вы хотите ввести
параметр загрузки, то делаете его
сразу после системной метки
раздела, с которого вы хотите
загрузиться, как показано на
примере ниже:
LILO: linux root=/dev/hda1
LILO поставляется с прекрасной
документацией, в том числе по
обсуждаемым здесь параметрам
загрузки, из которых особенно важна
команда LILO append=
, необходимая
когда кто-то собирается добавить
параметр загрузки в виде
постоянного добавления к
конфигурационному файлу LILO. Вы
просто добавляете нечто типа append
= "foo=bar"
к файлу /etc/lilo.conf
.
Это можно сделать в начале файла
конфигурации, применяя ко всем
разделам, или для одного системного
раздела, если добавить внутри
секции image=
. Более полное
описание смотрите в документации
LILO.
Другим широкоиспользуемым загрузчиком Linux является 'LoadLin' -- программа DOS, запускающая ядро Linux из командной строки DOS (с параметрами загрузки). Это особенно удобно людям, использующим DOS и желающим запускать Linux из-под DOS.
Он полезен, также, если у вас
имеется оборудование, использующее
драйвер DOS для установки в
определенное состояние. Общий
пример -- "SoundBlaster совместимые"
звуковые карты, требующие драйвер
DOS для установки определенных
регистров карты в SB совместимый
режим. Загрузка DOS с поставляемым
драйвером, а затем загрузка Linux из
строки DOS с помощью LOADLIN.EXE
предотвратит
сброс карты, который происходит при
обычной перезагрузке. Таким
образом, карта остается в SB
соместимом режиме и, следовательно,
может быть использована под Linux.
Есть еще несколько других
программ, которые можно
использовать для загрузки Linux.
Полный список смотрите в списке
доступных программ на вашем
местном ftp зеркале Linux, в каталоге system/Linux-boot/
.
Есть несколько параметров
загрузки ядра, хранящие свои
значения по-умолчанию в
определенных байтах самого образа
ядра. Есть утилита с названием rdev
,
установленная на большинстве
систем, которая знает где находятся
эти значения и как их изменить. Она
может, также, изменять значения, у
которых нет соответствующего
параметра загрузки ядра, например,
используемый по-умолчанию видео-режим.
Утилита rdev обычно привязана к swapdev, ramsize, vidmode и rootflags. Это пять значений, которые rdev может менять -- корневое устройство, устройство своппинга, параметры RAM-диска, видео-режим по-умолчанию и установка readonly/readwrite для корневого устройства.
Более подробную информацию по rdev
можно найти, набрав rdev -h
или
прочитав поставляемую страницу man (man
rdev
).
Большинство параметров загрузки имеют вид:
имя[=значение_1][,значение_2]...[,значение_11]
где `имя' - уникальное ключевое слово, идентифицирующее часть ядра, которому передаются связанные значения (если несколько). Несколько параметров загрузки передаются просто списком параметров выше приведенного формата, разделенного пробелами. Помните, что предел в 11 значений реален, поскольку существующий код на одно ключевое слово обрабатывает только 11 параметров, разделенных запятыми. (Однако, в особых сложных ситуациях вы можете повторно использовать такое же ключевое слово с еще 11-ю параметрами, предполагая, что функция установки это поддерживает.) Также помните, что ядро разбивает список максимум на десять целочисленных аргументов и последующую строку, поэтому реально вы не можете передать 11 целочисленных значений, если только не преобразовываете 11-й параметр из строчного в целочисленный непосредственно в самом драйвере.
Большая часть фильтрации
происходит в linux/init/main.c
.
Сначала ядро проверяет не являются
ли параметры одним из специальных
параметров `root=', `ro', `rw', или `debug'.
Назначение этих специальных
параметров будет описано в этом
документе ниже.
Затем ядро проходится по списку
функций установки (находящемуся в
массиве bootsetups
) в поиске
совпадения заданной строки
параметра (такой как `foo') с функцией
установки (foo_setup()
)
конкретного устройства или части
ядра. Если вы передаете ядру строку foo=3,4,5,6,bar
,
то ядро будет искать
зарегистрировано ли `foo' в массиве bootsetups
.
Если да, то ядро вызовет функцию
установки, связанную с `foo' (foo_setup()
)
и передаст ей целочисленные
значения 3, 4, 5 и 6, указанные в
командной строке ядра, и также
строковый параметр bar
.
Если что-то в форме `foo=bar' не
принимается функцией установки,
как описано выше, то это
интерпретируется как установка
переменной окружения. Примером
может послужить применение TERM=vt100
или BOOT_IMAGE=vmlinuz.bak
в качестве
параметров загрузки. Эти
переменные окружения обычно
проверяются скриптами
инициализации для разрешения или
запрещения большого диапазона
параметров.
Любые оставшиеся параметры, не
выбранные ядром и не
интерпретированные в качестве
переменных окружения, будут
переданы в дальнейшую обработку,
которую обычно выполняет программа
init
. Наиболее обычный
параметр, передаваемый процессу init
,
является слово single, которое
сообщает init
загружать
компьютер в режиме одного
пользователя и не запускать все
обычные демоны. Список приемлимых
параметров смотрите в странице
руководства для установленной на
вашем компьютере версии программы init
.