Das U-Boot (повна назва "the Universal Boot Loader", часто скорочується до U-Boot; див. розділ Історія для більш детальної історії назви) це первинний завантажувач операційної системи (англ. boot loader) з відкритим кодом, що використовується у вбудованих пристроях для упаковування програмних інструкцій, що здійснюють завантаження ядра операційної системи на пристрої. Він доступний для багатьох архітектур комп'ютерів, серед яких 68k, ARM, Blackfin, MicroBlaze, MIPS, Nios, SuperH, PPC, RISC-V і x86.

Das U-Boot
U-Boot Logo.svg
U-boot.png
Тип Boot loader
Розробник DENX Software Engineering
Перший випуск 15 жовтня, 1999; 21 рік тому (1999-10-15)
Стабільний випуск v2019.07 (8 липня, 2019; 16 місяців тому (2019-07-08)[1])
Репозиторій git.denx.de/u-boot.git
Нестабільний випуск v2019.10-rc3 (27 серпня, 2019; 15 місяців тому (2019-08-27)[2])
Написано мовою C, Асемблер
Доступні мови Англійська
Ліцензія GNU GPLv2+[3]
Онлайн-документація denx.de/wiki/DULG/Manual
Вебсайт denx.de/wiki/U-Boot/

ФункціонуванняРедагувати

U-Boot є одночасно завантажувачем першої і другої стадії. Він завантажується ROM або BIOS системи із доступного пристрою завантаження, такого як SD карта, SATA диск, NOR флеш пам'ять (використовуючи SPI або I²C), або NAND флеш-пам'ять. Якщо існують обмеження по обсягу пам'яті, завантаження U-Boot можна розділити на стадії: платформа буде завантажувати невеликий SPL (Secondary Program Loader), який є укороченою версією U-Boot, і тоді SPL буде виконувати початкову конфігурацію обладнання і завантажувати більшу, більш повну за функціоналом версію U-Boot.[4][5][6] Незалежно від того чи використовується SPL, U-Boot виконує обидві: першу стадію (тобто, конфігурування контролерів пам'яті і SDRAM) і другу стадію завантаження (виконує послідовність із декількох кроків для завантаження сучасної операційної системи із набором різних пристроїв, які необхідно зконфігурувати, і надає меню для того, щоб користувач міг керувати процесом завантаження, тощо).

U-Boot запускає інтерфейс командного рядка через послідовний порт. За допомогою консолі користувачі можуть завантажувати і запускати на виконання ядро, при необхідності змінювати параметри за замовчуванням. Також існують команди для вичитування інформації про пристрій, читання і запису флеш- пам'яті, завантаження файлів (образів ядра та завантажувача, та ін.) через послідовний порт чи мережу, керування деревом пристроїв, і для роботи із змінними середовища (які можна записати у постійне сховище, і які використовують для керування поведінкою U-Boot, наприклад, дають змогу змінити команду завантаження за замовчуванням і затримку перед автоматичним завантаженням, а також параметри обладнання, наприклад, Ethernet MAC-адресу).

На відміну від завантажувачів на ПК, які неявним чином або автоматично вибирають локацію у пам'яті для ядра і інших даних для завантаження, U-Boot потребує, щоб у його командах завантаження було явним чином вказано фізичні адреси пам'яті, куди будуть копіюватися дані (ядро, ramdisk, дерево пристроїв, тощо) і вказівник переходу на адресу запуску ядра і як аргумент, який передаватиметься ядру. Оскільки команди U-Boot є відносно низькорівневими, для запуску ядра необхідно виконати декілька кроків, але це також робить U-Boot більш гнучким завантажувачем у порівнянні із іншими, оскільки ті самі команди можна застосувати для виконання більш загальних задач. Навіть можливо оновити сам U-Boot за допомогою U-Boot, просто вичитавши новий завантажувач з якогось джерела (локальне сховище, із послідовного порту або мережі) у пам'ять, і записавши потім ці дані у постійну пам'ять де зберігається завантажувач.

U-Boot має підтримку роботи із USB, тому з ним можна використовувати USB-клавіатуру для роботи з консоллю (як альтернативу для вводу команд через послідовний порт), а також він може доступатися і завантажуватися із пристроїв USB Mass Storage, таких як зчитувач SD-карт.

Збереження даних та джерела для завантаженняРедагувати

U-Boot завантажує операційну систему зчитуючи ядро і інші необхідні дані (дерево пристроїв та образ ramdisk) у пам'ять, і потім запускає ядро із необхідними аргументами.

Команди U-Boot є загальними командами, які можна використовувати для читання і запису будь-яких даних. Застосовуючи ці команди, дані можна зчитувати або записувати до будь-якого сховища даних з тих, які підтримує U-Boot. До них належать:

(Примітка: це джерела завантаження даних, з яких U-Boot може завантажувати данa (тобто ядро або образ ramdisk) у пам'ять. Сам U-Boot має завантажуватися платформою, і це повинно виконуватися з пристрою, з якого ROM або BIOS даної платформи звідки вона може завантажуватися, що залежить від реалізації платформи.)

  • Сховище на пристрої або зовнішнє під'єднане сховище
    • SD-карта
    • SATA
    • SCSI
    • I²C (тобто, EEPROMs або NOR flash)
    • SPI (тобто, NOR або NAND flash)
    • ONFI (raw NAND flash)
    • eMMC (керований NOR або NAND flash)
    • NVMe
    • Пристрій USB mass storage
  • Послідовний порт (передача файлів)
  • Завантаження по мережі (при необхідності із використанням DHCP, BOOTP, або RARP)

Сумісні файлові системиРедагувати

U-Boot не потрібно вміти читати файлову систему для того, щоб ядро використовувало її як кореневу файлову систему або початковий ramdisk; U-Boot лише надає відповідний параметр ядру kernel, і/або копіює дані у пам'ять без розбору їх вмісту.

Однак, U-Boot також може читати із (і у деяких випадках, писати) файлових систем. Таким чином, U-Boot не вимагатиме аби дані, які будуть завантажені, були збережені у фіксованому місці на пристрої збереження даних, а U-Boot зможе прочитати файлову систему аби знайти і завантажити ядро, дерево пристроїв, тощо за допомогою шляху.

U-Boot має підтримку наступних файлових систем:

Дерево пристроївРедагувати

Докладніше: Дерево пристроїв

Дерево пристроїв (Device tree) це структура даних для описання схеми пристроїв. Використовуючи дерево пристроїв, виробник може використовувати незмінений mainline U-Boot на іншому обладнанні із спеціальним призначенням. Так само як це прийнято у ядрі Linux, дерево пристроїв розроблене з метою оптимізації ситуації в індустрії вбудованих пристроїв, де існує велика кількість форків (коду U-Boot і Linux), що виконують специфічні для продукту функції. З боку користувача перевагою може бути можливість запускати програмне забезпечення основної гілки, за умови відсутності оновлень від виробника.

ВиноскиРедагувати

  1. Це справжнє завантаження з NFS (U-Boot використовує NFS для завантаження ядра), на відміну від завантаження ядра з мережі, за допомогою TFTP вказується що ядро має використовувати приєднану NFS, так що вона буде коренем файлової системи ядра.

ПриміткиРедагувати

  1. Rini, Tom (8 July 2019). U-Boot v2019.07 released. mailing list. Процитовано 9 July 2019. 
  2. Index of /pub/u-boot. Процитовано 27 August 2019. 
  3. Das U-Boot's licence. git.denx.de. 2013. Процитовано 2018-10-13. 
  4. http://xillybus.com/tutorials/u-boot-image-altera-soc
  5. https://boundarydevices.com/u-boot-on-i-mx6/
  6. Архівована копія. Архів оригіналу за 5 вересня 2017. Процитовано 23 вересня 2019. 

ПосиланняРедагувати