Відкриті системи bios для linux

Хоч і може здатися цілком природним, що PC гуде при включенні, насправді, є фрагмент коду, який змушує його робити це. Цей фрагмент вбудований в завантажувач. У більшості PC він називається BIOS. (Слово є акронімом basic input / output system (базова система введення / виведення)). BIOS забезпечує підтримку основного обладнання, яку ранні операційні системи x86 використовували для доступу до дисків, моніторів і майже до всього іншого.

Одне з перших дій, яке робить BIOS - проведення різних перевірок включення: ідентифікація (і, можливо, тестування) доступної пам'яті, визначення тактової частоти і так далі. Якщо перевірка пройшла вдало, комп'ютер гуде один раз. Цей процес називають power-on self test (внутрішній тест при включенні) або POST. Англомовні комп'ютерні фанати зазвичай використовують цей термін в якості дієслова: "That machine will not even POST, so we should swap the memory." (Ця машина навіть не проходить тест BIOS (POST), так що треба поміняти пам'ять.)

Що BIOS коли-небудь зробив для нас?

Така операційна система як MS-DOS може завантажувати додаткові драйвери пристроїв, наприклад CD-ROM'а, але вимагає, щоб всі драйвери обладнання були завантажені при запуску системи. Стандартний інтерфейс, передбачений для цих драйверів, підтримується BIOS'ом і через це BIOS повинен досліджувати пристрої, ідентифікувати і, можливо, форматувати їх для використання.

Точно так же BIOS відповідає за ініціалізацію пам'яті. Не всі операційні системи вимагають, щоб пам'ять була инициализирована, але ранні DOS зазвичай вимагали, і навіть сьогодні більшість BIOS'ов, можливо, роблять це заради сумісності. Тільки один цей процес може бути дуже довгим і багато сучасних систем частково або повністю відключають його. У той же час, BIOS спробує визначити кількість доступної пам'яті. У числі інших дій, що здійснюються при завантаженні, може бути ініціалізація і включення кеша процесора, настройка подвійних CPU, побудова таблиці інформації про процесорах, створення списку пристроїв PCI, приєднаних до системи, і навіть запуск апаратних загрузчиков, наданих цими пристроями, які можуть завантажувати додаткові драйвери.

Так що зробити треба багато. Так багато, що, я допускаю, виконання POST і подальша ініціалізація драйверів може зажадати цілої хвилини або більше. BIOS може виконувати різні опитування обладнання в пошуках завантажувальних пристроїв, а в деяких системах навіть спробувати виконати мережеву завантаження через Ethernet. Я думаю, що одна система витрачає близько п'яти секунд, ініціалізувавши мережеві завантажувальні параметри, навіть якщо мережева завантаження відключена. Прикро!

Останнє по порядку, але не за важливістю - BIOS робить чимало роботи по ініціалізації. Щось, але не все, виявляється корисним незалежно від того, що ви збираєтеся завантажити. Призначення запитів переривання (IRQ) пристроїв - можливо і правда, корисний сервіс, так як воно дозволяє ОС просто брати список пристроїв і починати роботу, не програмуючи їх. У багатьох пристроїв є конфігураційні регістри, в які BIOS може записувати відповідні або правильні значення на підставі установок, розташованих в системній пам'яті, доступної для запису. (Взагалі, ця пам'ять називається CMOS, хоча не строго обов'язково, що вона насправді реалізована за допомогою даної технології.)

Що відбувається після того як BIOS зробить це все? Він десь (частіше на диску) знаходить блок коду і виконує його, як правило, завантажуючи операційну систему. Якщо операційна система DOS або щось в цьому роді, вся ця робота по установці означає, що ви негайно отримаєте своє запрошення командного рядка.

подвійна робота

Але у Linux, або BSD, або Windows® є свої власні драйвери. Так що далі операційна система прочитує список додаються пристроїв PCI і починає завантажувати ці драйвери. Робота, виконана BIOS'ом, здебільшого ігнорується; операційна система, якщо вже завантажує драйвер SCSI, сама вивчить шину SCSI. BIOS тільки надає інформацію, нічого більше, а значна її частина не використовується. Все, що дійсно потрібно від BIOS'а, - це завантажити першу порцію коду (під назвою початковий завантажувач (bootstrap loader) або bootloader) і дати можливість машині працювати.

Точна різниця в швидкостях залежить від операційної системи. Однак ми знаємо, що в Linux сканування при завантаженні може проходити дуже і дуже швидко. А це означає, що BIOS не тільки займає майже половину часу від включення харчування до завантаження останнього драйвера; він, ймовірно, витрачає значно більше. Це стає особливо помітним, коли менш істотні модулі ядра (такі як звукові драйвери) можуть бути завантажені пізніше, можливо, після завантаження більш критичних речей (таких як Web-сервіси).

Все, що ми хочемо, - це отримати спосіб завантажити ядро, не чекаючи, поки BIOS зробить безліч установок, які ядро ​​і саме зробить, причому набагато швидше, краще і, може бути, надійніше.

Помістіть ядро ​​у флеш

Є очевидна проблема, яка з'являється, коли ми видаляємо всі драйвери пристроїв з BIOS'а: якщо BIOS не завантажує їх, як він зможе прочитати ядро? Просте рішення - використовувати всі місце, звільнене після видалення драйверів, для зберігання мінімального ядра. Все, що цього ядра буде потрібно для завантаження, це драйвер для диска, на якому містяться інші, завантажувані модулі. Після початку роботи ядра вони можуть бути завантажені динамічно.

Розмір сучасних мікросхем flash-пам'яті BIOS'а робить цю альтернативу напрочуд життєздатною. У багатьох системах є один або два мегабайти flash-пам'яті, доступної для BIOS'а. Іноді BIOS справді такий великий. В інших випадках пам'яті виявляється більше, ніж треба, просто тому, що "оптом було дешевше". В достатній мірі розібране і стислий ядро ​​може легко поміститися в такому просторі, а у Linux'ових загрузчиков є великий досвід у створенні крихітних декомпресор для розпакування стислих ядер.

Таке рішення, можливо, не найкращий для людей, які роблять активну розробку ядра, але для системи, в якій ви хочете прискорити можливу завантаження, це може бути хорошим вибором. Проект LinuxBIOS (дивіться Ресурси) працює над цим рішенням і він, мабуть, найбільше підійде для тих, хто використовує сервера і вбудовані системи.

Open Firmware

Основне джерело походження вбудованих загрузчиков, який розроблений не під MS-DOS, - це Open Firmware. Спочатку використовувався компаніями Sun і Apple, цей відкритий стандарт для вбудованого завантажувача розроблений з меншою увагою до системам в стилі DOS і великим інтересом до таких систем, як первісний Mac OS, Mac OS X або Solaris, які самі працюють з драйверами. Серйозну перевагу Open Firmware - це те, що він "один раз з'явившись, працює скрізь": пристрої з апаратним загрузчиком для Open Firmware працюватимуть добре в будь-якій системі Open Firmware з шиною, в яку його можна вставити. Заковика в тому, що у дуже небагатьох пристроїв, створених для x86 PC є вбудовані завантажувачі Open Firmware. Проте, якщо ви можете знайти такий пристрій, це може стати хорошим вибором; це, зрозуміло, вимагає, щоб ви могли визначити свої апаратні засоби і стандартизувати окремі компоненти.

Open Firmware - напевно найбільш дружній до крутих програмістам віджет. Він не робить упор на швидкої завантаженні, як наприклад, LinuxBIOS, але в загальному, набагато швидше, ніж традиційний PC BIOS, і надзвичайно доброзичливий до користувачів, які шукають способи для налаштування своїх машин.

Світ стане прекрасніше, якщо виробники x86 почнуть використовувати Open Firmware за замовчуванням.

Інші шляхи створення вільного BIOS'а

Навіть BIOS, який просто намагається повторити основні функції більш традиційного BIOS'а, часто може зробити якісь речі більш швидкими і відкритими. Наприклад, можна відрегулювати час, який витрачається на перевірку пристроїв, якщо ви знаєте, що в даній системі немає пристроїв, на перевірку яких вимагається від 5 до 10 секунд.

Одна важлива річ, яку вільний BIOS вміє робити, - це бути трохи більш гнучким у розробці загрузчиков. Наприклад, проект OpenBIOS використовувався в поєднанні з LinuxBIOS, з якого був узятий низько-рівневий код і ядром OpenBIOS Forth як корисного навантаження, щоб поліпшити систему до Open Firmware. Велика частина самої важкої роботи в системах x86 - створення крихітного блоку коду, який завантажує справжній завантажувач; більш гнучкий BIOS міг би робити цю роботу і це вирішило б проблему.

Є кілька досить спеціалізованих, але не вільних, програм BIOS. Наприклад, обладнання Soekris Engineering, яке поставляється з BIOS'ом під назвою comBIOS, який набагато простіше і менше, ніж стандартний BIOS, і значно швидше завантажується.

Багато уваги і ніякої документації

Коли люди б'ються з комп'ютерними проблемами, один з найбільш загальних порад, який вони отримують, - оновити BIOS. Чому? Теоретично BIOS не використовується після завантаження системи. Але насправді робота з ініціалізації, виконана BIOS'ом, може виявитися вирішальною. Наприклад, в одній х86-ой системі, яку я використовував, контролер шини CardBus був непридатний, тому що в ньому мало бути запрограмовано IRQ; в оновленому BIOS'е це було виправлено. Теоретично в операційній системі, можливо, міг би бути спеціальний код розпізнавання конкретно цієї моделі контролера шини CardBus і програмування в нього IRQ, але виробнику плати простіше написати код, правильно програмує контролер, спеціально для цієї конкретної плати.

Традиційно вважається, що в системах з відкритими початковими кодами більше шансів відловити помилки. Однак у випадку з BIOS'ом це не так очевидно. Зрештою, у творців обладнання може бути додаткова інформація, якої не мають розробники BIOS'ов загального призначення. Вільно розповсюджуваний BIOS загального призначення повинен вміти виконуватися на дюжині плат; з іншого боку, виробник може зробити припущення, не турбуючись про те, що програма буде робити на іншому обладнанні.

Правда, у відкритого підходу є багато переваг. Наприклад, BIOS на старій системі Alpha, яку я використовував, підтримує мікросхеми SCSI-контролера Symbios Logic '875. Однак, у нього є жорстко запрограмований список пар ID виробника / продукту PCI, для яких є підтримка, і він буде працювати тільки з картами з цього списку; правильно працює карта, яка не включена до списку, просто ігнорується. Оскільки BIOS є закритим кодом, і справді у чомусь туманним, я не міг навіть виправити таблицю; я повинен був за US $ 220 купити карту SCSI у певного виробника замість того, щоб використовувати фізично ідентичну, що є в наявності, за US $ 75.

Переломний момент, ймовірно, настане, коли виробники материнських плат вирішать використовувати BIOS з відкритим кодом замість того, щоб бути пов'язаним з одним з головних комерційних пропозицій. Я не знаю, коли це станеться і чи відбудеться взагалі, але було б непогано побачити BIOS з кращого підтримкою і документацією.

Використання всього цього

Для більшості користувачів все це непрактично. Небезпека некоректно запрограмованого чіпа BIOS досить серйозна: ваш комп'ютер взагалі не буде працювати, поки чіп не буде перепрограмований, а оскільки комп'ютер не може завантажитися, щоб запрограмувати чіп, вам буде потрібно спеціальне обладнання. Не всі, але деякі системи мають дві мікросхеми flash-пам'яті і дозволяють з одного з них завантажуватися, а потім програмувати другу. Так що для більшості людей експерименти зі створенням альтернативного BIOS'а будуть ймовірно кілька ризикованими. Проте, якщо ви виявите в запасі старий комп'ютер, який не боїтеся зіпсувати, і який підтримується одним з вільно розповсюджуваних BIOS'ов, буде забавно ризикнути. Люди захоплені знайшли б це привабливим.

На сьогоднішній день від цієї технології швидше виграють люди, що працюють на групах серверів або вбудованих системах. Якщо для вас має значення, як довго відбувається перезавантаження, то це серйозний стимул вкластися в роботу і час, щоб отримати щось, що буде працювати на обладнанні, яке ви використовуєте. До того ж, жоден впроваджений проект розробки не порадує так, як якщо ви зробите щось божевільне і непідтримуваний.

Зрештою ця технологія дасть виробникам велику можливість вибору. У виробників вбудованих систем є більше варіантів для вибору вбудованого завантажувача, і збільшення їх кількості допоможе нам уникнути скромного набору пропрієтарних BIOS'ов до більш відкритого і конкурентного ринку.

Отримати продукти і технології

  • Проект LinuxBIOS сфокусований безпосередньо на підтримку системи Linux.
  • Проект OpenBIOS створює вільно поширювану реалізацію Open Firmware, що працює і в системі PowerPC® і в x86.
  • PC Weasel корисний незалежно від того, новий у вас BIOS або старий. Він дає послідовний консольний доступ до машини, яка думає, що у неї є карта VGA і клавіатура, і надає доступ до кодів POST.
  • У Technologic Systems є інший варіант доморослої програми BIOS, яка використовується на їх дуже крутих вбудованих системах x86.
  • Soekris Engineering поширює доморощений BIOS, а також робить милі іграшки з мигалками.
  • Свою наступну розробку в Linux створюйте з пробним ПО IBM. доступним для скачування прямо з developerWorks.

Схожі статті