301 lines
15 KiB
Markdown
301 lines
15 KiB
Markdown
---
|
||
title: Побудова з джерельного коду
|
||
x-toc-enable: true
|
||
...
|
||
|
||
Система побудови libreboot, називається `lbmk`, скорочення від `Libreboot Make`, і цей
|
||
документ описує те, як використовувати її. З цим керівництвом ви можете узнати те, як побудувати
|
||
libreboot з доступного джерельного коду.
|
||
Ця версія, якщо розміщена наживо на libreboot.org, передбачає, що ви використовуєте
|
||
сховище git `lbmk`, яке
|
||
ви можете завантажити, використовуючи інструкції на [сторінці огляду коду](../../git.uk.md).
|
||
|
||
Якщо ви використовуєте архів випуску libreboot, будь ласка, зверніться до
|
||
документації, включеної до *того* випуску. Випуски libreboot розраховані тільки,
|
||
як *знімки*, не для розробки. Для належної розробки ви маєте завжди
|
||
працювати безпосередньо в сховищі git libreboot.
|
||
|
||
Наступний документ описує те, як працює `lbmk`, і як ви можете робити зміни
|
||
до нього: [керівництво обслуговування libreboot](../maintain/)
|
||
|
||
Git
|
||
===
|
||
|
||
Система побудови Libreboot використовує Git, обширно. Ви маєте виконати кроки
|
||
знизу, *навіть, якщо ви використовуєте архів випуску*.
|
||
|
||
Перед тим, як вам використовувати систему побудови, будь ласка, знайте: система побудови, сама по собі,
|
||
використовує Git обширно, коли завантажує програмне забезпечення, таке як coreboot, та проводить застосування виправлень.
|
||
|
||
Ви маєте переконатись в тому, щоб ініціалізувати ваш Git належним чином, перед тим, як почати, або інакше
|
||
система побудови не буде працювати належно. Зробіть це:
|
||
|
||
git config --global user.name "John Doe"
|
||
git config --global user.email johndoe@example.com
|
||
|
||
Змініть ім'я та адресу електронної пошти на будь-яку, що забажаєте, коли робите це.
|
||
|
||
Ви також можете захотіти прослідувати більшій кількості етапів тут:
|
||
<https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup>
|
||
|
||
Python
|
||
======
|
||
|
||
Python2 не використовується lbmk або будь-чим, що завантажується в якості модулів. Ви
|
||
маєте переконатись, що команда `python` виконує python 3 на вашій системі.
|
||
|
||
Make
|
||
========
|
||
|
||
libreboot Make включає файл, який названо `Makefile`. Ви досі можете
|
||
використовувати систему побудови `lbmk` безпосередньо, або ви можете використовувати Make. `Makefile`
|
||
просто виконує команди `lbmk`. Однак, використання `lbmk` безпосередньо запропонує вам
|
||
набагато більше гнучкості; наприклад, Makefile наразі не може побудувати один
|
||
образ ROM (він лише будує всі з них, для всіх плат).
|
||
|
||
Ви мусите переконатись, що всі залежності побудови встановлено. Якщо ви використовуєте
|
||
Ubuntu або подібний дистрибутив (Debian, Arch і тому подібні), можете виконати це:
|
||
|
||
sudo make install-dependencies-ubuntu
|
||
|
||
Існує конкретно для Debian:
|
||
|
||
sudo make install-dependencies-debian
|
||
|
||
Інша існує для Arch:
|
||
|
||
sudo make install-dependencies-arch
|
||
|
||
Тепер, просто побудуйте образи coreboot подібним чином:
|
||
|
||
make
|
||
|
||
Ця єдина команда побудує образи ROM для *кожної* плати, інтегрованої до
|
||
libreboot. Якщо ви тільки хочете побудувати обмежену вибірку, можете використовувати `lbmk` безпосередньо:
|
||
|
||
./build boot roms x200_8mb
|
||
|
||
Ви можете вказати більше одного аргумента:
|
||
|
||
./build boot roms x200_8mb x60
|
||
|
||
Образи ROM з'явяться під щойно створеною директорією `bin/` в системі побудови.
|
||
|
||
Для інших команд просто прочитайте `Makefile` в своєму улюбленому текстовому редакторі.
|
||
`Makefile` є простим, тому що він виконує виключно команди `lbmk`, таким чином дуже
|
||
просто знати те, які команди є в доступності, просто читаючи його.
|
||
|
||
Стандартна команда `clean` доступна (чистить всі модулі, окрім `crossgcc`):
|
||
|
||
make clean
|
||
|
||
Щоб почистити ваші побудови `crossgcc`:
|
||
|
||
make crossgcc-clean
|
||
|
||
Для побудови архівів випуску:
|
||
|
||
make release
|
||
|
||
Побудова без використання Make
|
||
============================
|
||
|
||
`Makefile` включено лише для *сумісності*, щоб якщо хтось
|
||
інстиктивно пише `make`, то було отримано результат.
|
||
|
||
Фактична розробка/тестування завжди виконується безпосередньо за допомогою `lbmk`, і це також
|
||
стосується збирання з джерельного коду. Ось кілька інструкцій, щоб
|
||
почати:
|
||
|
||
Спочатку встановіть залежності побудови
|
||
---------------------------------
|
||
|
||
libreboot включає сценарій, який автоматично встановлює apt-get залежності
|
||
в Ubuntu 20.04:
|
||
|
||
sudo ./build dependencies ubuntu2004
|
||
|
||
Окремі сценарії також існують:
|
||
|
||
sudo ./build dependencies debian
|
||
|
||
sudo ./build dependencies arch
|
||
|
||
sudo ./build dependencies void
|
||
|
||
Технічно, будь-який дистрибутив Linux може бути використано для побудови libreboot.
|
||
Однак, вам потрібно буде написано свій власний сценарій для встановлення залежностей
|
||
побудови.
|
||
|
||
libreboot Make (lbmk) автоматично виконує всі необхідні команди; наприклад,
|
||
`./build payload grub` автоматично виконає `./build module grub`,
|
||
якщо затребувані утиліти для GRUB не збудовано, для виготовлення корисних навантажень.
|
||
|
||
В якості результату, ви тепер можете (після встановлення правильних залежностей побудови) виконати
|
||
лише одну команду, з свіжого Git clone, для побудови образів ROM:
|
||
|
||
./build boot roms
|
||
|
||
або навіть побудувати конкретні образи ROM, такі як:
|
||
|
||
./build boot roms x60
|
||
|
||
Якщо ви бажаєте побудувати корисні навантаження, можете зробити це. Наприклад:
|
||
|
||
./build payload grub
|
||
|
||
./build payload seabios
|
||
|
||
./build payload u-boot qemu_x86_12mb
|
||
|
||
Попередні кроки буде виконано автоматично. Однак, ви можете *досі* виконати
|
||
окремі частини системи побудови власноруч, якщо виберете. Це може бути
|
||
вигідно, коли ви робите зміни, та бажаєте протестувати конкретну частину
|
||
lbmk.
|
||
|
||
Отже, якщо ви лише хочете побудувати образи ROM, просто зробіть наведене вище. В іншому випадку,
|
||
будь ласка, продовжіть читати!
|
||
|
||
Опціонально: видобути двійкові блоби
|
||
------------------------------
|
||
|
||
Деякі плати, включаючи всі плати sandy/ivybridge, вимагають невільні блоби, які не можуть бути включеними до libreboot.
|
||
Для плат, які вимагають ці блоби, libreboot спробує завантажити блоби власноруч.
|
||
Якщо ваша плата не має джерел блоба в наявності, тоді ви мусите видобути їх з резервної копії вашого rom постачальника.
|
||
Ви маєте вказати libreboot резервну копію rom та сказати системі побудові те, для якої плати ви хочете видобути блоби
|
||
Наприклад, щоб видобути блоби для t440p, ви маєте виконати:
|
||
|
||
./blobutil extract t440p_12mb /path/to/12mb_backup.rom
|
||
|
||
Ви потім можете побудувати rom для цієї плати нормально:
|
||
|
||
./build boot roms t440p_12mb
|
||
|
||
|
||
Друге, завантажити всі програмні компоненти, які вимагаються
|
||
--------------------------------------------------------
|
||
|
||
Якщо ви не виконали просто `./build boot roms` (з або без надлишкових
|
||
аргументів), ви все одно можете виконати залишок процесу побудови власноруч. Читайте
|
||
далі! Ви можете прочитати про всі доступні сценарії в `lbmk`, читаючи
|
||
[керівництво обслуговування libreboot](../maintain/); lbmk розроблено бути модулярним,
|
||
що означає те, що кожен сценарій *може* бути використано самостійно (якщо це не є правдою, для
|
||
будь-якого сценарія, це є помилкою, яка має бути виправлена).
|
||
|
||
Це настільки просто, як це:
|
||
|
||
./download all
|
||
|
||
Вищезазначена команда завантажує всі модулі, які означено в системі побудови libreboot.
|
||
Однак, ви можете завантажити модулі індивідуально.
|
||
|
||
Ця команда показує вам список доступних модулів:
|
||
|
||
./download list
|
||
|
||
Приклад завантаження індивідуального модуля:
|
||
|
||
./download coreboot
|
||
|
||
./download seabios
|
||
|
||
./download grub
|
||
|
||
./download flashrom
|
||
|
||
./download u-boot
|
||
|
||
Третє, побудова кожного з модулів:
|
||
--------------------------------
|
||
|
||
Побудова модуля означає, що він має вже бути завантаженим.
|
||
В цей момент, система побудови не виконує автоматично кроки передумови,
|
||
такі як цей, тому ви мусите перевірити це власноруч.
|
||
|
||
Знову, дуже просто:
|
||
|
||
./build module all
|
||
|
||
Це будує кожен модуль, означений в системі побудови libreboot, але ви можете
|
||
будувати модулі індивідуально.
|
||
|
||
Наступна команда перелічує доступні модулі:
|
||
|
||
./build module list
|
||
|
||
Приклад побудови конкретних модулів:
|
||
|
||
./build module grub
|
||
|
||
./build module seabios
|
||
|
||
./build module flashrom
|
||
|
||
Команди доступні для *очищення* модуля, які, по суті, виконують make-clean.
|
||
Ви можете перелічити ці команди:
|
||
|
||
./build clean list
|
||
|
||
Видаліть всі модулі таким чином:
|
||
|
||
./build clean all
|
||
|
||
Приклад видалення конкретних модулів:
|
||
|
||
./build clean grub
|
||
|
||
./build clean cbutils
|
||
|
||
Четверте, побудуйте всі корисні навантаження:
|
||
---------------------------------
|
||
|
||
Дуже просто:
|
||
|
||
./build payload all
|
||
|
||
Ви можете перелічити доступні корисні навантаження таким чином:
|
||
|
||
./build payload list
|
||
|
||
Приклад побудови конкретних корисних навантажень:
|
||
|
||
./build payload grub
|
||
|
||
./build payload seabios
|
||
|
||
Кожна плата має свою власну конфігурацію побудови U-Boot в `lbmk` під
|
||
`resources/u-boot`. Для побудови корисних навантажень U-Boot, вам потрібно вказати
|
||
цільову плату і мабуть крос-компілятор для її архітектури ЦП. Вони
|
||
керуються автоматично під час побудови образів ROM, але для прикладу:
|
||
|
||
./build payload u-boot qemu_x86_12mb # на хостах x86
|
||
|
||
CROSS_COMPILE=aarch64-linux-gnu- ./build payload u-boot gru_kevin
|
||
|
||
CROSS_COMPILE=arm-linux-gnueabi- ./build payload u-boot veyron_speedy
|
||
|
||
Команда build-payload є попередньою умовою для побудови образів ROM.
|
||
|
||
П'яте, побудуйте ROM!
|
||
----------------------
|
||
|
||
Виконайте цю команду:
|
||
|
||
./build boot roms
|
||
|
||
Кожна плата має свою власну конфігурацію в `lbmk` під `resources/coreboot/`,
|
||
яка вказує, які корисні навантаження підтримуються.
|
||
|
||
За замовчуванням, всі образи ROM будуються, для всіх плат. Якщо ви бажаєте побудувати лише
|
||
конкретну плату, ви можете вказати назву плати, засновану на імені директорії
|
||
для неї під `resources/coreboot/`. Наприклад:
|
||
|
||
./build boot roms x60
|
||
|
||
Імена плат, як вище, такі самі, як імена директорій для кожної плати,
|
||
під `resources/coreboot/` в системі побудови.
|
||
|
||
Ось так!
|
||
|
||
Якщо все пройшло добре, образи ROM мають бути доступними вам під bin/
|