Команды сопровождения |
boot(1M) |
boot - запуск ядра операционной системы или независимой программы
Начальная загрузка (bootstrapping) - это процесс загрузки и выполнения независимой программы. В рамках обсуждаемой темы, начальная загрузка означает процесс загрузки и выполнения операционной системы. Обычно в качестве независимой программы выступает ядро операционной системы (см. kernel(1M)), но вместо него можно загружать любую независимую программу. Например, на SPARC-системах в качестве такой независимой программы можно, кроме ядра операционной системы, загружать диагностический монитор.
Если независимая программа является динамически компонуемым выполняемым файлом, команда boot загрузит интерпретатор (компоновщик/загрузчик), соответствующий формату выполняемого файла, и передаст управление этому командному интерпретатору. Если независимая программа скомпонована статически, она сразу выполняется.
Обычно в качестве программы загружается ядро. После загрузки ядро запускает систему UNIX, монтирует необходимые файловые системы (см. vfstab(4)) и загружает процесс /sbin/init для перевода системы в стандартное состояние ("initdefault"), указанное в файле /etc/inittab. См. inittab(4).
На большинстве SPARC-машин процедура начальной загрузки состоит из следующих основных стадий.
После ключения питиания, микропрограммное обеспечение системы (firmware в PROM) выполняет ее тестирование (power-on self-test - POST). Форма и масштабы тестирования зависят от используемой в системе версии микропрограммного обеспечения.
После успешного выполнения тестирования, микропрограммное обеспечение пытается автоматически выполнить загрузку, если соответствующий флаг установлен в используемом ПЗУ. Можно изменять имя загружаемого файла и устройство, с которого он будет загружаться.
Эти флаги и имена можно установить с помощью команды eeprom(1M) из командного интерпретатора или с помощью команд PROM, задаваемых в ответ на приглашение ok после остановки системы.
В качестве вторичной загружаемой программы может использоваться либо программа ufsboot (при загрузке с диска), либо программа inetboot (при загрузке по сети). При загрузке с диска процесс начальной загрузки состоит из двух концептуально различных стадий: первичной и вторичной загрузки. PROM предполагает, что первичный загрузочный блок находится в блоках с 1 по 15 на локальном диске. При загрузке по сети PROM выполняет обратный запрос ARP и, при получении ответа, посылает широковещательный запрос по протоколу TFTP для получения программы inetboot по сети с любого ответившего сервера, и выполняет эту программу. Программа inetboot выполняет другой обратный запрос ARP, а затем использует протокол bootparams (см. bootparams(4)) для поиска корневой файловой системы. Затем она получает по сети ядро по протоколу NFS, и выполняет его.
Если имя независимой программы задано как относительное (не начинается с косой черты), вторичная программа загрузки будет использовать путь поиска, зависящий от платформы. Этот путь гарантированно включает каталог /platform/имя_платформы. На многих SPARC-платформах затем просматривается каталог /platform/класс_платформы. См. filesystem(5). Если задано абсолютное имя, оно будет использовано при загрузке. Программа загрузки загружает соответствующую независимую программу и передает ей управление.
Если имя файла не задано в командной строке и не указано другим способом, например, в переменной boot-file NVRAM, программа boot выбирает для загрузки стандартный файл, соответствующий установленному в системе программному обеспечению, возможностям оборудования и микропрограммного обеспечения, а также сконфигурированному пользователем файлу режима загрузки (policy file).
Команда boot в OpenBoot принимает аргументы следующего вида:
Стандартная команда boot без аргументов:
Если спецификация_устройства в командной строке boot не задана, OpenBoot обычно использует значение переменной nvram boot-device или diag-device. Если в командной строке не заданы аргументы, OpenBoot обычно использует в качестве стандартных аргументов значения переменной nvram boot-file или diag-file. (Если система работает в режиме диагностики, вместо boot-device и boot-file используются переменные diag-device и diag-file).
Аргументы могут состоять из нескольких строк. Все строки аргментов передаются вторичной программе загрузки; они не интерпретируются системой OpenBoot.
Если в командной строке boot указаны аргументы, значения переменных nvram boot-file и diag-file не используются. Значения переменных nvram не объединяются с аргументами командной строки. Например, команда
игнорирует значения переменных boot-file и diag-file; она интерпретирует строку "-s" как аргументы. boot не будет использовать значение переменной boot-file или diag-file.
Команды
не имеют аргументов; они будут использовать значения переменных boot-file или diag-file, если они установлены, в качестве стандартного имени файла и аргументов для команды boot. Соответственно, если значением переменной boot-file является имя файла 64-битного ядра, и выполняется попытка загрузиться с установочного CD с помощью команды boot cdrom, загрузка завершится ошибкой, если на установочном CD находится только 32-битное ядро.
Поскольку значение переменной boot-file или diag-file может быть проигнорировано, в зависимости от вида используемой команды boot, в большинстве производственных систем нельзя полагаться на переменную boot-file. Чтобы изменить режим работы ОС, измените файл режима загрузки. Существенное исключение возникает лишь когда в производственной системе установлены как 32-битовые, так и 64-битовые пакеты, но использоваться должна 32-битовая версия ОС.
В большинстве случаев, лучше позволить команде boot выбрать соответствующее стандартное значение в зависимости от типа системы, ее аппаратного и микропрограммного обеспечения, а также содержимого корневой файловой системы. Общепринятой практикой является управление режимом работы команды boot путем изменения файла режима загрузки; однако, изменение значений переменных boot-file или diag-file может давать неожиданные результаты в некоторых ситуация.
Такое поведение характерно для большинства систем, основанных на версиях OpenBoot 2.x и 3.x. Учтите, что на некоторых платформах возможны отличия.
На системах IA процесс начальной загрузки состоит из двух принципиально различных стадий, первичной и вторичной загрузки. Первичная загрузка реализована в ПЗУ BIOS на системной плате и в расширениях BIOS в ПЗУ периферийных контроллеров. Она отличается тем, что позволяет управлять установленными периферийными устройствами и обеспечивает средства ввода/вывода через программные прерывания. Процесс загрузки начинается с загрузки первого физического сектора дискеты, жесткого диска или, если это поддерживает установленная в система версия BIOS, CD-ROM. Первичная программа загрузки реализована как код в реальном режиме процессора IA.
Вторичная программа загрузки загружается первичной. Она реализована как 32-битовый код в защищенном режиме. Она также загружает и использует специфические расширения BIOS периферийных устройств, написанные как код в реальном режиме процессора IA. Вторичная программа загрузки называется boot.bin и отвечает за чтение и загрузку с файловой системы UFS на жестком диске или CD, или загрузку по сети по протоколу NFS.
Вторичная программа загрузки запускает программу Configuration Assistant, которая определяет (возможно, с помощью пользователя), какие устройства установлены в системе. Вторичная программа загрузки затем читает сценарий в файле /etc/bootrc, который управляет процессом загрузки. Этот файл содержит команды загрузочного командного интерпретатора, описанные ниже, и может изменяться, чтобы адаптировать процесс загрузки к особенностям машины.
Стандартный сценарий /etc/bootrc предлагает пользователю ввести символ b для загрузки с указанными опциями, символ i для вызова интерпретатора в интерактивном режиме, или любой другой символ для загрузки стандартного ядра. После загрузки ядро запускает операционную систему, загружает необходимые модули, монтирует необходимые файловые системы (см. vfstab(4)) и запускаеет процесс /sbin/init для перевода системы в стандартное состояние ("initdefault"), указанное в файле /etc/inittab. См. inittab(4).
После включения питания PC-совместимой машины микропрограммное обеспечение системы в ПЗУ BIOS выполняет самотестирование при включении (power-on self test - POST), запускает расширения BIOS ПЗУ периферийных контрорллеров и выполняет программное прерывание INT 19h, начальная загрузка. Обработчик прерывания INT 19h обычно выполняет стандартную процедуру начальной загрузки PC, которая состоит в попытке чтения первого физического сектора дискеты в первом дисководе или, если эта попытка завершится неудачно, первого жесткого диска. Затем процессор переходит на первый байт образа сектора в памяти.
Первый сектор дискеты содержит главный загрузочный блок. Загрузочный блок отвечает за загрузку образа начального загрузчика (boot loader) strap.com, который затем загружает вторичную программу загрузки, boot.bin. Аналогичная последовательность действий выполняется и при загрузке с CD-ROM, но местонахождение и содержимое загрузочного блока определяется спецификацией El Torito. Загрузка El Torito тоже приводит к запуску программы strap.com, которая, в свою очередь, загружает boot.bin.
Первый сектор жесткого диска содержит главный загрузочный блок, в котором находится главная загрузочная программа и таблица разделов FDISK, названная так по имени программы PC, с помощью которой ее поддерживают. Главная загрузочная программа находит активный раздел в таблице FDISK, загружает его первый сектор и переходит на первый байт образа этого сектора в памяти. Этим завершается стандартная последовательность загрузки с жесткого диска на PC.
Раздел IA FDISK для программного обеспечения Solaris начинается с одноцилиндровой загрузочной секции (boot slice), содержащей программу загрузки раздела (pboot) в первом секторе, стандартную метку диска Solaris и таблицу секций тома (volume table of contents - VTOC) во втором и третьем секторах, и программу bootblk в четвертом и последующих секторах. Когда раздел FDISK для программного обеспечения Solaris является активным разделом, главная загрузочная программа (mboot) читает загрузочную программу раздела с первого сектора в память и передает ей управление. Эта программа, в свою очередь, считывает в память программу bootblk и передает управление ей. Независимо от типа активного раздела, если диск содержит несколько разделов FDISK, пользователь получает возможность загрузиться с любого раздела.
Программа bootblk или strap.com (в зависимости от типа активного раздела) читает программу boot.bin из файловой системы в корневой секции диска Solaris и переходит на первый байт ее образа в памяти.
Вторичная программа загрузки, boot.bin, переводит процессор в 32-разрядный защищенный режим со страничной организацией памяти и выполняет некоторые действия по инициализации системы. Она запускает программу Configuration Assistant, которая либо загружает систему автоматически, либо выдает список устройств, с которых можно загрузиться, в зависимости от значения переменной auto-boot? (см. eeprom(1M)).
Диски, с которых выполняется загрузка (в том числе, CDROM) должны содержать файловую систему UFS. При обращении к сетевым устройствам сначала посылается запрос Reverse Address Resolution Protocol (RARP) для получения IP-адреса машины, а затем RPC-вызов bootparams для поиска сервера, который может предоставить корневую файловую систему. Затем корневая файловая система монтируется по протоколу NFS. После успешного монтирования корневой файловой системы программа boot.bin вызывает специальный загрузочный командный интерпретатор, который интерпретирует содержимое файла /etc/bootrc.
Широкий спектр оборудования, которое необходимо поддерживать на IA-системах требует повышенной гибкости процесса загрузки. Эта гибкость частично достигается за счет возможности программировать процесс вторичной загрузки. Вторичная программа загрузки содержит интерпретатор, воспринимающий простой язык команд, похожий на языки командных интерпретаторов sh и csh. Основное отличие в том, что конвейеры, циклы и перенаправление ввода/вывода не поддерживается.
Загрузочный командный интерпретатор разбивает входные строки на слова, разделенные символами пробела и табуляции. Символы доллара ($), одиночной кавычки ('), двойной кавычки ("), номера (#), перевода строки и обратной косой (\) являются метасимволами. Чтобы использовать метасимволы буквально, их надо предварять обратной косой чертой. Символ новой строки, перед котым идет обратная косая, рассматривается как пробел. Символ номера начинает комментарий, который продолжается до символа новой строки.
Строка в одиночных или двойных кавычках образует одно слово (или часть одного слова. Пробелы и символы новой строки в кавычках становятся частью слова. Символы строки в кавычках можно маскировать, предваряя их символом обратной косой; таким образом, можно ввести одиночную кавычку в строке в одиночных кавычках, если перед ней указать обратную косую. Две обратных косых подряд дают в результате обратную косую, а обратная косая перед симоволом новой строки позволяет включить символ новой строки в слово.
По ходу загрузки поддерживается набор переменных со строковыми значениями. Первым символом имени переменной должна быть буква, а затем могут идти буквы, цифры и символы подчеркивания. Команда set создает переменную и/или присваивает ей значение, или выдает значения переменных. Команда unset удаляет переменную.
Подстановка значений переменных происходит, когда интерпретатор обнаруживает символ доллара, не предваренный обратной косой. Вместо доллара и имени переменной, которое за ним идет, подставляется значение этой переменной, и анализ строки продолжается с начала этого значения. Подстановка значений переменных выполняется также в строках в двойных кавычках, но не выполняется в строках в одиночных кавычках. Имя переменной может быть взято в фигурные скобки, отделяющие его от последующих символов.
Команда - это последовательность слов, завершаемая символом новой строки. Первое слово - имя команды, последующие слова - ее аргументы. Все команды являются встроенными. Независимые программы выполняются с помощью команды run.
Команды можно выполнять по условию, окружив командами if, elseif, else и endif:
if выражение1 ... elseif выражение2 ... elseif выражение3 ... else ... endif
Блок if ... endif можно включать в другие блоки if ... endif.
Команды set, if и elseif вычисляют арифметические выражения, синтаксис и семантика которых соответствует языку программирования C. Поддерживаются операторы ||, &&, |, ^, &, ==, !=, <, >, <=, >=, >>, <<, +, -, *, /, %, ~ и !, а также скобки (, ) и оператор запятая. При вычислении используются 32-битовые целые числа со знаком.
Выражения анализируются после полного формирования командной строки. Каждая лексема в выражении должна представлять собой отдельное слово-аргумент, так что лексемы в командной строке надо разделять пробелами.
Перед выполнением арифметических операций над слолвом-операндом, оно преобразуется из строки в 32-битовое целочисленное значение со знаком. После необязательного знака начальный символ 0 означает преобразование из восьмеричной системы счисления, а начальные символы 0x или 0X требуют выполнить преобразование из шестнадцатеричной системы счисления. В противном случае предполагается, что строка задает десятичное значение. Строка, не допускающая преобразования в целое число, заменяется нулем.
Предлагается ряд функций обработки строк. Имена встроенных функций начинаются с точки. Строковые аргументы этих функций не преобразуются в целые числа. Чтобы оператор, например, -, обрабатывался как строка, его необходимо предварять обратной косой, а эта обратная косая должна маскироваться другой обратной косой. Учтите также, что пустая строка может дать в результате пустой аргумент, и, как следствие, синтаксическую ошибку в выражении. Например:
if .strneq ( ${usrarg}X , \- , 1 )
Это безопасный способ проверить, что значение переменной usrarg начинается с -, даже если оно может быть пустым.
Загрузочный командный интерпретатор принимает ввод с консоли или из файлов. Команда source требует от интерпретатора прочитать файл в память и начать его анализ. Команда console требует от интеррпетатора читать входные данные с системной консоли. При прочтении символа конца файла (EOF) интерпретатор продолжает разбор прежнего источника входных данных. Символ CTRL-D, введенный в начале строки с консоли, рассматривается как признак конца файла (EOF).
Команда echo выдает свои аргументы на экран. Команда read читает данные с системной консоли и присваивает значения обнаруженных в ней слов своим аргументам-переменным.
Команда verbose включает и отключает режим подробного информирования. В режиме подробного информирования интерпретатор выдает строки из текущего исходного файла и команды в том виде, как они будут выполняться после подстановки значений переменных.
Команда singlestep включает и отключает режим пошагового выполнения команд. В режиме пошагового выполнения командный интерпретатор выдает step ? перед обработкой следующей команды и ждет ввода с клавиатуры, который не запоминается. Обработка начинается при нажатии клавиши ENTER. Это позволяет пошагово выполнять команды в режиме подробного информирования.
При первоначальном вызове интерпретатора в процессе загрузки он начинает работу с выполнения встроенной строки инициализации. Эта строка обычно имеет вид "source /etc/bootrc\n" и предназначена для запуска сценария загрузки с корневой файловой системы.
Загрузочный интерпретатор передает информацию другим независимым программам с помощью аргументов команды run. Программа может вернуть информацию загрузочному интерпретатору, устанавливая значения переменных интерпретатора с помощью служебной функции загрузки var_ops(). Она также может передавать информацию ядру с помощью служебной функции загрузки setprop(). Свойство whoami устанавливается равным имени выполняющейся независимой программы.
В выражениях поддерживаются следующие встроенные функции:
Для загрузки стандартного ядра в однопользовательском интерактивном режиме, введите одну из следующих команд в ответ на приглашение ok:
boot -as boot disk3 -as
Для загрузки kadb для отладки 32-битового ядра:
boot kadb -D kernel/unix
Для явной загрузки 32-битового ядра необходимо указать имя файла ядра. Поэтому, чтобы загрузить 32-битовое ядро в однопользовательском интерактивном режиме, введите одну из следующих команд в ответ на приглашение ok:
boot kernel/unix -as boot disk3 kernel/unix -as
Для явной загрузки 64-битового ядра необходимо указать имя файла ядра. Поэтому, чтобы загрузить 64-битовое ядро в однопользовательском интерактивном режиме, введите одну из следующих команд в ответ на приглашение ok:
boot kernel/sparcv9/unix -as boot disk3 kernel/sparcv9/unix -as
Прежде чем явно загружать 64-битовое ядро, указав имя соответствующего файла, прочитайте подраздел "Загрузка систем UltraSPARC" в разделе "ПРИМЕЧАНИЯ".
Для загрузка стандартного ядра в однопользовательском интерактивном режиме, введите одну из следующих команд в ответ на приглашение >:
b -as b kernel/unix -as
См. подраздел "Загрузка систем UltraSPARC" в разделе "ПРИМЕЧАНИЯ".
System Administration Guide, Volume 1
Sun Hardware Platform Guide
Утилита boot не способна определить, какие файлы можно использовать в качестве загружаемых программ. Если затребована загрузка файла, которые не является загружаемым, утилита boot загрузит его и передаст ему управление. Дальнейшие события непредсказуемы.
Имя_платформы можно узнать с помощью опции -i команды uname(1). Имя_класса_оборудования можно узнать с помощью опции -m команды uname(1).
На некоторых платформах для обеспечения работы 64-битового ядра может потребоваться обновление микропрограммного обеспечения. Подробнее см. в Sun Hardware Platform Guide. Если пакеты 64-битового ядра установлены и boot определяет, что необходимо обновление микропрограммного обеспечения для работы в 64-битовом режиме, boot выдает на консоль соответствующее сообщение и использует в качестве стандартного файла 32-битовое ядро.
В системах, сожержащих процессоры UltraSPARC-1 с тактовой частотой до 200 МГц включительно, пользователь может запустить 64-битовую программу, которая использует имеющуюся аппаратную проблему для остановки процессора. Поскольку 64-битовые программы не могут работать на 32-битовом ядре, в качестве стандартного файла в этих системах выбирается 32-битовое ядро.
Последовательность команд, вызвающая аппаратную проблему, очень нетипична, и маловероятно, что она будет сгенерирована компилятором. Для демонстрации проблемы необходимо специально писать код на ассемблере. Очень маловероятно, что написанная на ассемблере по всем правилам вручную процедура будет включать эту последовательность команд.
Пользователи, согласные почти на риск случайного или намеренного запуска пользователем программы, специально созданной для остановки процессора, могут запускать 64-битовое ядро, изменив файл режима загрузки. Отредактируйте файл /platform/имя_платформы/boot.conf так, чтобы он содержал незакомментированную строку с установкой переменной ALLOW_64BIT_KERNEL_ON_UltraSPARC_1_CPU значение true, как показано ниже:
ALLOW_64BIT_KERNEL_ON_UltraSPARC_1_CPU=true
Подробнее об этом см. в руководстве Sun Hardware Platform Guide.
Поскольку клавиша "-" на клавиатурах с национальными раскладками перенесена, необходимо использовать альтернативную клавишу для передачи аргументов команде загрузки в системах на основе IA, использующих такие клавиатуры. Используйте "-" на числовой клавиатуре. Альтернативные клавиши, которые можно нажимать на таких "национальных" клавиатурах для ввода символа "-" в процессе загрузки представлены ниже.
Клавиатура | Замещающая клавиша |
итальянская | ' |
испанская | ' |
шведская | + |
французская | ? |
немецкая | ? |
Например, команду b -r необходимо на шведской клавиатуре набирать как b +r, - на экране при этом появится b -r.
Последнее изменение: 26 февраля 1999 года
Copyright 2002 В. Кравчук, OpenXS Initiative, перевод на русский язык
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |