Das U-Boot
![]() | |
![]() | |
Тип | Boot loader |
---|---|
Автор | Wolfgang Denkd |
Розробники | DENX Software Engineering |
Перший випуск | 15 жовтня 1999; 24 роки тому (1999-10-15) |
Стабільний випуск | v2019.07 (8 липня 2019; 5 років тому (2019-07-08)[1]) |
Версії | 2023.01 (9 січня 2023)[2] |
Нестабільний випуск | v2019.10-rc3 (27 серпня 2019; 4 роки тому (2019-08-27)[3]) |
Мова програмування | C, Асемблер |
Доступні мови | Англійська |
Ліцензія | GNU GPLv2+[4] |
Онлайн-документація | denx.de/wiki/DULG/Manual u-boot.readthedocs.io/en/latest/ |
Репозиторій | source.denx.de/u-boot/u-boot |
Вебсайт | docs.u-boot.org/en/latest/ |
Das U-Boot (повна назва "the Universal Boot Loader", часто скорочується до U-Boot; див. розділ Історія для більш детальної історії назви) це первинний завантажувач операційної системи (англ. boot loader) з відкритим кодом, що використовується у вбудованих пристроях для упаковування програмних інструкцій, що здійснюють завантаження ядра операційної системи на пристрої. Він доступний для багатьох архітектур комп'ютерів, серед яких 68k, ARM, Blackfin, MicroBlaze, MIPS, Nios, SuperH, PPC, RISC-V і x86.
Функціонування
U-Boot є одночасно завантажувачем першої і другої стадії. Він завантажується ROM або BIOS системи із доступного пристрою завантаження, такого як SD карта, SATA диск, NOR флеш пам'ять (використовуючи SPI або I²C), або NAND флеш-пам'ять. Якщо існують обмеження по обсягу пам'яті, завантаження U-Boot можна розділити на стадії: платформа буде завантажувати невеликий SPL (Secondary Program Loader), який є укороченою версією U-Boot, і тоді SPL буде виконувати початкову конфігурацію обладнання і завантажувати більшу, більш повну за функціоналом версію U-Boot.[5][6][7] Незалежно від того чи використовується 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 є загальними командами, які можна використовувати для читання і запису будь-яких даних. Застосовуючи ці команди, дані можна зчитувати або записувати до будь-якого сховища даних[a] з тих, які підтримує U-Boot. До них належать:
- Сховище на пристрої або зовнішнє під'єднане сховище
- Послідовний порт (передача файлів)
- Kermit
- S-Record
- YMODEM
- Завантаження по мережі (при необхідності із використанням 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), що виконують специфічні для продукту функції. З боку користувача перевагою може бути можливість запускати програмне забезпечення основної гілки, за умови відсутності оновлень від виробника.
Виноски
- ↑ Це джерела завантаження даних, з яких U-Boot може завантажувати ядро, образ RAM-диска та інші дані у пам'ять. Сам U-Boot має завантажуватися платформою — наприклад, за допомогою Boot ROM, BIOS, UEFI або інших механізмів.
- ↑ Це справжнє завантаження з NFS (U-Boot використовує NFS для завантаження ядра), на відміну від завантаження ядра з мережі, за допомогою TFTP вказується що ядро має використовувати приєднану NFS, так що вона буде коренем файлової системи ядра.
Примітки
- ↑ Rini, Tom (8 липня 2019). U-Boot v2019.07 released. u-boot (Список розсилки). Архів оригіналу за 9 липня 2019. Процитовано 9 липня 2019.
- ↑ Index of /pub/u-boot. Архів оригіналу за 23 вересня 2019. Процитовано 27 серпня 2019.
- ↑ Das U-Boot's licence. git.denx.de. 2013. Архів оригіналу за 27 лютого 2019. Процитовано 13 жовтня 2018.
- ↑ Архівована копія. Архів оригіналу за 23 вересня 2019. Процитовано 23 вересня 2019.
{{cite web}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання) - ↑ Архівована копія. Архів оригіналу за 23 вересня 2019. Процитовано 23 вересня 2019.
{{cite web}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання) - ↑ Архівована копія. Архів оригіналу за 5 вересня 2017. Процитовано 23 вересня 2019.
{{cite web}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)
Посилання
- Офіційний сайт
- Official git repository
- Barebox [Архівовано 25 серпня 2019 у Wayback Machine.] (formerly known as U-Boot-V2)
- Das U-Boot на SourceForge.net