LinuxBIOS: компьютер с Линуксом в сердце

Прошивка LinuxBIOS - полностью открытая альтернатива для закрытых, фирменных и, наконец, просто устаревших BIOS-систем. Некоторые надеются, что вскорости - и единственная базовая система ввода-вывода, которая останется в природе :-)

Причинно-следственная связь

Назвать вещи своими именами нетрудно.
Трудно под этим поставить свое имя.

Прежде чем перейти к рассмотрению альтернативной базовой системы ввода-вывода, не помешает выяснить причины, побудившие исследователей на ее проектирование.

Чтобы преодолеть сложности в общении с компьютером, вычислительная система была построена как ряд уровней абстракций. Каждый из этих уровней определяет некую "виртуальную машину", надстраиваемую над абстракцией более низкого уровня. Предполагается, что каждая виртуальная машина обслуживает ту среду, в которой ее основные абстракции могут обрабатываться как аксиоматические. Если эти предположения верны, то говорят, что система обладает целостностью (integrity),- в противном случае система работает нестабильно и ее принято считать ненадежной (untrusted).

Таким образом, можно подытожить, что функционирование любой системы напрямую зависит от своего рода фундамента, на котором она построена. К примеру, в 60-х и 70-х годах прошлого столетия предпринимались попытки производства безопасных вычислительных систем путем использования в качестве основы безопасной среды операционной системы. Главным аргументом в пользу этих разработок было использование системных уровней с фундаментом в виде операционной системы, индифферентного аппаратного обеспечения, микропрограмм… Спустя годы стало ясно, что основное внимание уделялось безопасности операционной системы, в то время как фундаменту безопасного управления, лежащему в ее основе, внимания не хватало. (Примером такого фундамента может служить фаза самозагрузки этих самых операционных систем.) В действительности же "безопасные" системы выполняются в среде с установленным "незащищенным" ПО. Одним из возможных способов разрешения вышеописанной проблемы является реализация высокогарантийного процесса начальной загрузки посредством сотрудничества с Open Source проектом LinuxBIOS.

В качестве основного "бочкокачения" в сторону BIOS двадцатилетней давности можно привести цитаты из документов "отцов альтернативной замены".

"Разработчики персонального компьютера IBM PC считали BIOS вовсе не фундаментальным компонентом своей конструкции, а лишь временной мерой, рассчитанной от силы на 250 тысяч первых машин. Коммерческие BIOS-системы дня сегодняшнего все еще продолжают писаться полностью на ассемблере, загружаться в эмуляционном режиме 8086, запускаться с 16-битными адресами, операторами и операндами. Другими словами, сейчас та же горячая поделка Pentium 4 3,2 ГГц при запуске эмулирует 16-битный 6 МГц процессор, который был, так сказать, современным почти 25 лет назад.

Современные кластерные узлы, построенные на архитектурах PC и Alpha, на этапе загрузки не зависят от поставщика BIOS. Базовая система ввода-вывода, в свою очередь, для загрузки операционной системы полагается на ненадежные устройства, например флоппи или жесткие диски. Не внес существенных изменений в ситуацию и стандарт сетевой загрузки (основная концепция которого воплощена в PXE), который не пригоден для функционирования в крупномасштабной кластерной среде.

Так выглядит чип BIOS'a

Дальше - больше. Та несложная миссия, которая ставилась перед BIOS, была, как бы смешно это ни прозвучало, провалена. Приведем несколько тому примеров: существуют базовые системы ввода-вывода, конфигурирующие все устройства на материнской плате одним прерыванием; системы, которые не загружаются без подключенной клавиатуры; системы, которые не загружаются при неправильном значении часов реального времени. Также при загрузке BIOS-системы программно обнуляют всю главную память, тем самым делая очень трудным обнаружение блокировок в операционных системах, потому что во время перезагрузки буфер сообщений и образ ОС предаются стиранию.

Еще одна проблема BIOS состоит в невозможности приспосабливания нестандартного аппаратного обеспечения. Что касается эксплуатации систем, то она представляется сущим кошмаром. Все базовые системы, предназначенные для процессоров семейства Pentium, обслуживаются с помощью DOS-программ, причем настройки конфигурации для большинства BIOS для Pentium и всех Alpha-машин производятся посредством клавиатуры и дисплея (и, в некоторых сумасшедших случаях, даже мыши). Совершенно непрактично добираться к 1024-м "измученным" узлам PC и загружать DOS на каждом из них для изменения какой-нибудь одной настройки BIOS. Пока лишь этот непрактичный метод взят на вооружение производителями и является единственно поддерживаемым. Ситуация категорически неприемлема для кластеров из 64-х, 128-и или более узлов. Практический путь решения заключается в поддержке БСВВ кластера через сеть, под управлением операционной системы - конфигурирование и обновление BIOS должно быть возможно из пользовательских программ операционной системы. Параметры BIOS должны быть доступны через /proc."

Обобщая, можно также выделить следующее:

  • в конфигурировании памяти преобладает субоптимальность. К примеру, некоторые BIOS используют режим памяти CAS2, который намного медленнее поддерживаемого CAS3;
  • некорректная конфигурация адресного пространства шины PCI, открывающая дыры в безопасности при использовании карт с распределением памяти, например Myrinet (был случай, когда одному инженеру пришлось собственноручно писать код конфигурации PCI, ибо существующая BIOS не была способна оперировать структурой машинной шины);
  • субоптимальное присваивание запросов на прерывания. Некоторые системы распределяют по одному IRQ между несколькими устройствами (сказать, что это не нужно,- ничего не сказать), что влечет за собой увеличение времени ожидания;
  • некорректно сконфигурированные таблицы (наподобие $PIR), как результат: критическая информация, требуемая Linux для присваивания IRQ, просто-напросто не доступна;
  • некорректные идентификационные строки в BIOS (к примеру, информация в строке "Mainboard vendor name here" соответствует производителю BIOS, а не материнской платы);
  • отсутствует возможность обновления BIOS из среды современной ОС (часто для этого приходится использовать DOS-дискеты; есть также вариант загрузки с CD Windows 3.1 и последующий запуск программы обновления);
  • отсутствует возможность сохранения настроек CMOS во время обновления BIOS (в такой ситуации рекомендуется записать все значения на бумаге и затем вновь ввести их для каждой машины; в случае 960-узловой системы без клавиатуры или консоли это задание выполнить, мягко говоря, проблематично).

Вот так легко разоблачив существующую BIOS (по крайней мере, в отношении кластерных систем), дальнейшее посвятим средству, которое имеет все шансы потеснить ее.

Знакомьтесь - альтернативная BIOS

Как известно, шаг за шагом
самые существенные сдвиги в
технологии основываются
преимущественно на нововведениях.

Пропеллер открытого (GPL) проекта LinuxBIOS закрутился зимой 1998 года как часть исследовательской работы в области кластерных решений в лабораториях Cluster Reseach Lab (CRL) и Advanced Computing Laboratory (ACL) при Лос-Аламосской научной лаборатории (Los Alamos National Laboratory - LANL). LANL является научно-исследовательским центром Управления энергетическими исследованиями США; лаборатория основана в 1943 г. и работает под руководством Калифорнийского университета. Что примечательно, в LANL велись работы по созданию первой американской атомной бомбы (кошмар!).

За финансирование работ ответственность несут Los Alamos Computer Science Institute и Office of Science министерства энергетики. Хотя реализацией и поддержкой "прожекта" занимались (и занимаются) многие люди, включая двух студентов: Джеймса Хэндрикса (James Hendricks) и Дэйла Уэбстера (Dale Webster), запевалой в этом хоре был не кто иной как Рон Майннич (Ron Minnich). Последний получил докторскую степень в области computer science в Пенсильванском университете; перед приходом в ACL (в период 1989-1994 гг.) работал в центре Supercomputing Research Center; с 1994 по 1999 гг. - создавал кластеры для компании Sarnoff Corp. в Принстоне, штат Нью-Джерси.

Тот самый Майннич "изображает бога" за 128-узловым кластером Cyclone

Система LinuxBIOS создана на базе ранней версии ПО FreeBIOS - отдавая дань этому факту, разработчики не стали менять название каталога CVS. Помимо первоначальной мотивации, проект LinuxBIOS был сфокусирован на исключительном улучшении управления большими вычислительными кластерами. Многочисленные разработчики рассматривали LinuxBIOS как средство, обеспечивающее дополнительные характеристики BIOS (наподобие безопасности), а также поддержку различных операционных систем, не ограничиваясь только Linux.

Поскольку альтернативная BIOS может загружать, помимо ядра Linux, и другое ПО: от Etherboot - PROM нескольких объединенных Ethernet-карт, обеспечивающий удаленную загрузку ядра, до Plan 9 9load и от взаимосвязей типа Myrinet, Quadrix или Scaleable Co-herent Interface до использования соединений SSH для загрузки ядра (как InterMezzo и NFS) - то название "LinuxBIOS" определяет лишь небольшой Open Source код начальной загрузки вычислительной системы. Система вмещается в 500 строк на ассемблере и 1500 - на языке C. Не является серкетом тот факт, что, по сравнению с использованием простой программы сетевой загрузки или BIOS в виде PXE, намного большую гибкость обеспечивает использование настоящей операционной системы для непосредственной загрузки другой системы.

Философия управления LinuxBIOS проста - она заключается в следующем: "Позвольте ядру Linux выполнить это" (Let the Linux kernel do it). Другими словами, если Linux может выполнить какую-нибудь определенную задачу, вроде инициализации устройства, то необходимость в любом другом ПО, тоже способном осуществить это, просто отпадает как таковая. Было замечено, что часто Linux еще раз делает ту же работу, за которую в любом случае отвечает BIOS. Или, что еще хуже, Linux достаются задачи, которые BIOS в большинстве случаев делает неправильно. Из этого следует, что BIOS должен поручатся тот объем работы, который не в состоянии выполнить ядро Linux. Претворяя эту концепцию в жизнь, LinuxBIOS в то же время является быстрой и небольшой альтернативой (двоичный файл системы занимает 36 Кб, в зависимости от конфигурации).

LinuxBIOS полностью заменяет нормальную коммерческую базовую систему ввода-вывода компьютера, загрузка и настройка последней устраняется и заменяется достаточно простой фазой инициализации аппаратного обеспечения, в которую входит и установка серийных консолей (отладочная информация обеспечена). Как только проходит инициализация DRAM, LinuxBIOS может продолжать загрузку уже посредством кода на C, что по сравнению с тысячами строк ассемблера x86 считается очень удачной характеристикой. Идя еще далее, LinuxBIOS может устанавливать контрольные регистры типа памяти (Memory Type Range Registers) на процессоре, делая доступным его кэш,- как следствие, значительно увеличивается скорость выполнения. LinuxBIOS также отвечает за создание таблицы маршрутизации IRQ и инициализацию индивидуальных компонентов оборудования на материнской плате (к таковым часто относятся IDE-контроллер, клавиатура, южный мост и т.п.). Вновь выполняется лишь минимальная инициализация - ответственность за остальное ложится на плечи Linux, точнее ядра этой ОС.

После завершения инициализационной ступеньки для обнаружения следующего этапа загрузочного процесса LinuxBIOS просматривает содержимое ROM. При традиционном методе использования LinuxBIOS там должно находиться ядро Linux. Конфигурация такого типа позволяет добиться феноменального результата быстродействия (в своем роде даже рекорда) - отрезок времени от включения питания до получения приглашения интерпретатора команд составляет всего-навсего 3 секунды.

Тем не менее, есть и другие расширения LinuxBIOS, дающие возможность полностью использовать ее модульную конструкцию. Одним из наиболее популярных считается загрузка Etherboot, позволяющая процессу начальной загрузки извлекать следующий этап загрузки (или еще одну составляющую дальнейшего расширения процесса загрузки, или финальную операционную систему) из памяти сетевых карт.

Небольшой полупроводниковый (без перемещаемых частей) 4-узловый кластер Plan 9

LinuxBIOS размещается в специальном чипе EEPROM (Electronically Erasable Programmable Read Only Memory), где обычно расположен BIOS поставщика. LinuxBIOS полностью заменяет присутствующую базовую систему, то есть после установки альтернативы от "старой" БСВВ не остается и следа. Далее в EEPROM размещается ядро Linux (или другое ПО), играющее роль загрузчика. На ядро Linux выбор пал благодаря поддержке им широкого спектра аппаратных средств, которые могут использоваться для того, чтобы двоичным файлам должно было получить возможность дальнейший загрузки операционных систем. Ядро ОС Linux подходит для этой цели, поскольку оно, по большей части, первоначально было написано для функционирования с избежанием потребности в наследственных сервисах BIOS. Отсутствие каких-либо зависимостей сводит к минимуму количество представляемых сервисов, вследствие чего и становится возможным небольшой и компактный код BIOS. Избежав сложности и времени ожидания, свойственных коммерческим базовым системам, разработчики сумели здесь весь загрузочный процесс "вложить, втиснуть, утрамбовать" в считанные секунды. Очень скоро этими же разработчиками было обнаружено, что спрос на систему есть не только у строителей кластеров, но и у общества компьютерных энтузиастов. Больше того - производители материнских плат все чаще отказываются от услуг поставщиков обычных BIOS.

Еще одним резоном в пользу выбора именно ядра Linux является тот факт, что ядро может загружаться с использованием любого устройства, сети, протокола и файловой системы, которые поддерживаются Linux,… и загружать другие операционные системы. Среди средств, позволяющих осуществить данное действие, выделяют TKM, kexec, bootimg, LOBOS (см. врезку "LOBOS, или Линуксу - Линукс!").

Установка

Брошюра "Как уложить парашют".
Издание второе. Исправленное

Сейчас мы перейдем от многообещающей теории к не менее интригующей практике. Из-за разнообразия и многоликости воплощений "загрузок с помощью LinuxBIOS" возможность описания каждой реализации и ее особенностей в рамках обзорной статьи практически сводится к нулю. Вместе с тем, в данном разделе идет речь о наиболее типичном и стандартном варианте использования системы LinuxBIOS - то есть о связке LinuxBIOS + ядро Linux.

Первым делом проверьте на сайте проекта, поддерживается ли ваша материнская плата. Количество поддерживаемых плат весьма значительно, наиболее важное требование состоит в том, наличествует ли чип BIOS, который можно вынимать из его сокета (поскольку вы заменяете физический чип, содержащий код старой BIOS, чипом памяти Disk-on-Chip гораздо большей емкости с LinuxBIOS и ядром Linux). Disk-on-Chip являются чипами памяти, которые могут форматироваться как стандартные накопители на жестких дисках. DoC - это 8-мегабайтные flash-программируемые устройства, которые устанавливаются в стандартный 32-штырьковый сокет, используемый 2-мегабайтным чипом BIOS. Средняя стоимость таких устройств составляет около $45. Главной причиной использования DoC вместо flash ROM BIOS считается невозможность "вложения" ядра Linux в 2 Мб. Рекомендуется приобрести 32-штырьковый сокет Zero Insertion Force (ZIF), чтобы значительно упростить и обезопасить удаление и вставку BIOS и DoC, поскольку эти операции производятся при включенном питании компьютера.

Логотип LinuxBIOS в ASCII-графике

Говоря понятным языком, можно выделить следующие основные этапы создания машины LinuxBIOS (здесь приведена лишь общая ознакомительная информация; если же вы хотите получить полностью рабочую систему, вам следует обратиться к более подробным руководствам).

Первый - установка Linux. Кроме базовой системы ОС с поддержкой устройств flash DoC (которую большинство ядер не имеет), требуются также средства разработки ПО - включая пакет Python, использующийся для конфигурирования файлов LinuxBIOS.

Второй - компиляция ядра Linux для создания системы LinuxBIOS. Сюда относятся: получение корректного исходного кода ядра Linux, его пропатчивание (около десяти строк), конфигурирование и построение. Ядро должно иметь поддержку MTD (Memory Technology Devices), которая обычно не включается в стандартное ядро. Также важно присутствие поддержки загружаемых модулей, поскольку при программировании DoC в гнезде BIOS материнской платы требуется запускать команду перед загрузкой модулей поддержки DoC - и, следовательно, у вас не будет возможности вкомпилировать эту поддержку непосредственно в ядро.

Третий - получение исходного кода LinuxBIOS. В наличии несколько вариантов получения LinuxBIOS:

  • репозиторий CVSа SourceForge.net (как уже было сказано, название проекта - "FreeBIOS", а не "LinuxBIOS");

  • Tarball ежедневно обновляемого образа всего исходного дерева;

  • непосредственное использование CVS:

export CVS_RSH=ssh
cvs -d:pserver:anonymous@cvs.freebios.sourceforge.net:>
/cvsroot/freebios login
# на запрос ввода пароля нажмите <Enter>
cvs -z3 -d:pserver:anonymous@cvs.freebios.sourceforge.net:>
/cvsroot/freebios co freebios

Четвертый - конфигурирование и построение загрузочного кода LinuxBIOS для вашей материнской платы. После считанных модификаций конфигурационного файла, соответствующего используемой плате, и некоторых оборудованиезависимых файлов исходного дерева LinuxBIOS следует генерация build-файлов с помощью Python-сценария. Завершает данный этап операция создания образа LinuxBIOS.

Кластер GeoffreyПятый - замена чипа BIOS на Disk-on-Chip. Предполагается, что в ZIF уже помещена "старая" BIOS. Без выключения питания компьютера производится замена чипа BIOS на DoC с последующей записью ядра. Финал создания машины LinuxBIOS наступает после нажатия кнопки Reset, что должно послужить запуском новой - пингвиньей - базовой системы ввода-вывода (доказательством чему является появление изображения пингвина в углу экрана без стандартных сообщений AMI или Award) и загрузки ядра Linux непосредственно из DoC вместо обычного использования "священной коровы прошлого" - загрузочного сектора жесткого диска.

Помимо описанного метода, наличествует также и вариант покупки пре-записанных чипов DoC, которые распространяются компаниями Linux Labs, Cluster Labs, CW Linux, i-TECH Corp., Linux NetworX, O.N.E. Technologies - с материнскими платами или без оных.

В данный момент есть возможность использования загрузчиков LILO и GRUB и в качестве операционных систем - Linux, OpenBSD, Windows 2000. Ведутся работы над возможностью лоудинга FreeBSD и Windows XP. Ожидается, что улучшение поддержки ATA позволит загружать Windows 98 и Windows XP, а обеспечение поддержки PIRQ - FreeBSD.

Ссылки

Я не могу вам дать столько ресурсов…

Русскоязычных ресурсов по рассматриваемой теме автору найти не удалось (к слову, это и послужило мотивом для написания статьи). Упоминания о LinuxBIOS встречаются лишь в кратких новостных очерках о создании кластеров и прочих суперкомпьютерных машин на основе Linux.

Ресурс проекта разместился по адресу: www.linuxbios.org (а до недавнего времени находился на сервере , основной участник проекта, занимается продажей разного рода кластерных решений с предустановленной LinuxBIOS.

Другие необходимые ссылки присутствуют в тексте. Если что-то все же не обнаружено - попробуйте спросить Google.com.

Подводя черту

Всему свой час, и время всякому делу под небесами…
Книга Экклесиаста

Ключевые преимущества, получаемые при использовании LinuxBIOS (приведено лишь несколько преимуществ, любое из которых зависит от характера конкретной эксплуатации):

  • скорость загрузки - около 3-х секунд в однопользовательском режиме (время загрузки напрямую зависит от используемого оборудования, в целом же измерить точно этот показатель трудно - ввиду его сравнительно малого значения);
  • надежность - вне зависимости от перемещаемых частей на CD или флоппи;
  • безопасность - постоянный (не сменный) носитель не допускает нежелательных вмешательств в процесс загрузки;
  • уменьшение работы - легкость в конфигурировании, установке, настройке и восстановлении для рабочих станций или кластеров. Сюда можно отнести также способность работы без использования клавиатуры, а также удаленное управление через последовательный порт;
  • уменьшение стоимости - один чип, заменяющий множество CD и флоппи, представляет короткие и долгосрочные сбережения.

В армейском инженерном корпусе существует поговорка: "Трудное мы сделаем сразу, невозможное потребует немного больше времени". "Трудное" уже достигнуто - много хардверных компаний поддерживает работу Майннича и его команды, обеспечивая их аппаратным обеспечением и документацией; и теперь общество переживает медленный процесс претворения в жизнь того, что когда-то казалось "невозможным" - подразумевается поддержка непомерно большого количества материнских плат, а также возможность загрузки различных операционных систем.

LOBOS, или Линуксу - Линукс!

В отличие от тезисной LinuxBIOS, альтернативы BIOS, системный вызов LOBOS предлагает вместо замены базовой системы элементарное ее игнорирование. LOBOS позволяет запуск ядра Linux посредством уже загруженного (выполняющегося) ядра, причем без покидания 32-битного защищенного режима. Как только ядро ОС загружено, ему больше не нужно использовать BIOS для загрузки других ядер. Новое средство обеспечивает использование ядер Linux в роли средств сетевой начальной загрузки.

Сначала LOBOS считывает новое ядро в память и подготавливает машину к перезагрузке, выполняя конфигурирование устройств. Далее фактический код начальной загрузки копируется в "безопасное" место, которое не подвергается перезаписи во время перезагрузки машины. В завершение процесса выполняется переход на код загрузки и новое ядро. Очевидно, что загрузка ядра с помощью LOBOS намного быстрее и легче стандартного BIOS-основанного бутинга.

Код системы LOBOS состоит из:

  • c-diff файла (diff-2.2.13) для ядра 2.2.13 (около 300 строк), который способен пропатчивать и более поздние версии ядер;
  • модифицированного сценария S00reboot;
  • собственно команды lobos - для перезагрузки с помощью системного вызова;
  • кода на C (tbootfile.c), который и запускает системный вызов для перезагрузки.

Кроме того, требуется утилита stripkernel, выполняющая преобразование vmlinux в двоичный образ. Для установки требуется: поддать пропатчиванию ядро, заменить системную команду reboot на S00reboot, скомпилировать tbootfile и поместить его вместе с lobos и stripkernel в один из каталогов, указанных в переменной окружения $PATH. Всё, дело сделано - теперь вы можете загружать Linux из Linux…

Для выполнения нового ядра необходимо ввести полный путь к нему или же воспользоваться промежуточной частью имени. Например, команда такого вида lobos <название_ядра> перезагрузит ядро /usr/src/<версия_ядра>/<название_ядра>.

Система LOBOS доступна для загрузки

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5,00 из 5)
Загрузка...

Дата публикации:
Автор публикации: