lbwww/site/docs/build/index.uk.md

16 KiB
Raw Blame History

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, ви маєте виконати:

./update blobs extract t440p_12mb /path/to/12mb_backup.rom

Ви потім можете побудувати rom для цієї плати нормально:

./build boot roms t440p_12mb

Друге, завантажити всі програмні компоненти, які вимагаються

Якщо ви не виконали просто ./build boot romsабо без надлишкових аргументів), ви все одно можете виконати залишок процесу побудови власноруч. Читайте далі! Ви можете прочитати про всі доступні сценарії в lbmk, читаючи керівництво обслуговування libreboot; lbmk розроблено бути модулярним, що означає те, що кожен сценарій може бути використано самостійно (якщо це не є правдою, для будь-якого сценарія, це є помилкою, яка має бути виправлена).

Check the list of downloadable modules by reading resources/git/revisions.

Приклад завантаження індивідуального модуля:

./fetch seabios

./fetch grub

./fetch flashrom

Coreboot and u-Boot are handled by a separate script:

./fetch_trees coreboot

./fetch_trees u-boot

The 'fetch_treesscript creates multiple directories based on revisions, and patches per revision, whereas thefetch` script only does one revision.

Третє, побудова кожного з модулів:

Побудова модуля означає, що він має вже бути завантаженим. В цей момент, система побудови не виконує автоматично кроки передумови, такі як цей, тому ви мусите перевірити це власноруч.

Знову, дуже просто:

./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/

20230625 build error (release archive)

When building ROM images from the release archives, the following error is observed in some cases, depending on distro:

In file included from src/lib/version.c:4:
build/build.h:10:32: error: 'libreboot' undeclared here (not in a function)
   10 | #define COREBOOT_MAJOR_VERSION libreboot-20230625
      |                                ^~~~~~~~~
src/lib/version.c:35:46: note: in expansion of macro 'COREBOOT_MAJOR_VERSION'
   35 | const unsigned int coreboot_major_revision = COREBOOT_MAJOR_VERSION;
      |                                              ^~~~~~~~~~~~~~~~~~~~~~

This happened when a user tried to build for ThinkPad W541 on an Arch Linux system. The fix is available here:

https://browse.libreboot.org/lbmk.git/patch/?id=f34e07ae27e3e6e8508cdebcbd09fdf73fca302d

Apply this patch to your local release archive, and it should fix the issue.