Buildroot - Bagian 1 - Ihtisar, Minimal System Bangun, Menu Setup

perkenalan

Dina séri tulisan ieu, kuring hoyong ningali sistem ngawangun distribusi buildroot sareng ngabagi pangalaman kuring dina nyaluyukeunana. Bakal aya pangalaman praktis dina nyiptakeun OS leutik kalayan antarmuka grafis sareng fungsionalitas minimal.

Anu mimiti, anjeun teu kedah galau sistem ngawangun sareng distribusi. Buildroot tiasa ngawangun sistem tina sakumpulan bungkusan anu ditawarkeunana. Buildroot diwangun dina makefiles sahingga gaduh kamampuan kustomisasi anu ageung. Ganti pakét sareng versi anu sanés, tambahkeun pakét anjeun nyalira, robih aturan pikeun ngawangun pakét, ngaropea sistem file saatos masang sadaya bungkusan? buildroot tiasa ngalakukeun sadayana ieu.

Di Rusia, buildroot dianggo, tapi dina pamanggih kuring aya sakedik inpormasi basa Rusia pikeun pamula.

Tujuan tina karya nyaéta pikeun ngumpul kit distribusi sareng download live, panganteur icewm sareng browser. Platform sasaran nyaéta virtualbox.

Naha ngawangun distribusi sorangan? Mindeng fungsionalitas kawates diperlukeun kalawan sumberdaya kawates. Malah leuwih sering di automation anjeun kudu nyieun firmware. Adaptasi distribusi tujuan umum ku ngabersihan bungkusan anu teu dipikabutuh sareng ngarobih kana firmware langkung padat karya tibatan ngawangun distribusi énggal. Ngagunakeun Gentoo ogé boga watesan na.

Sistim Buildroot pisan kuat, tapi moal ngalakukeun nanaon keur anjeun. Éta ngan ukur tiasa ngaktipkeun sareng ngajadikeun otomatis prosés assembly.

Sistem ngawangun alternatif (yocto, sistem ngawangun kabuka sareng anu sanésna) henteu dianggap atanapi dibandingkeun.

Dimana kéngingkeun sareng kumaha ngamimitian

Situs wéb proyék - buildroot.org. Di dieu anjeun bisa ngundeur versi ayeuna jeung maca manual. Di dinya anjeun tiasa ngahubungi komunitas, aya tracker bug, daptar surat sareng saluran irc.

Buildroot ngoperasikeun defconfigs pikeun papan target ngawangun. Defconfig mangrupikeun file konfigurasi anu ngan ukur nyimpen pilihan anu henteu ngagaduhan nilai standar. Nya anjeunna anu nangtukeun naon anu bakal dikumpulkeun sareng kumaha. Dina hal ieu, anjeun tiasa misah ngonpigurasikeun konfigurasi busybox, linux-kernel, uglibc, u-boot sareng barebox bootloaders, tapi sadayana bakal dihijikeun kana papan target.
Saatos ngabongkar arsip anu diunduh atanapi kloning tina git, kami nampi buildroot anu siap dianggo. Anjeun tiasa maca langkung seueur ngeunaan struktur diréktori dina manual;

papan - diréktori sareng file khusus pikeun unggal dewan. Ieu tiasa janten skrip pikeun ngabentuk gambar sistem (iso, sdcart, cpio sareng anu sanésna), diréktori overlay, konfigurasi kernel, jsb.
configs - defconfig sabenerna dewan. Defconfig mangrupikeun konfigurasi dewan anu teu lengkep. Éta ngan ukur nyimpen parameter anu béda ti setélan standar
dl — diréktori sareng kode sumber anu diunduh / file pikeun rakitan
kaluaran / sasaran - sistem file anu dirakit tina OS anu dihasilkeun. Salajengna, gambar dijieun ti dinya pikeun diundeur / instalasi
kaluaran / host - Utiliti host pikeun assembly
kaluaran / ngawangun - rangkep dirakit

Majelis dikonpigurasi via KConfig. Sistem anu sami dianggo pikeun ngawangun kernel Linux. Daptar paréntah anu paling sering dianggo (jalankeun dina diréktori buildroot):

  • make menuconfig - nelepon konfigurasi ngawangun. Anjeun ogé tiasa nganggo antarmuka grafis (nyieun nconfig, ngadamel xconfig, ngadamel gconfig)
  • make linux-menuconfig - nelepon konfigurasi kernel.
  • nyieun bersih - ngabersihan hasil ngawangun (sadayana disimpen dina kaluaran)
  • nyieun - ngawangun sistem. Ieu teu reassemble prosés geus dirakit.
  • make defconfig_name - pindah konfigurasi ka defconfig husus
  • nyieun daptar-defconfigs - nembongkeun daptar defconfigs
  • nyieun sumber - ngan ngundeur file instalasi, tanpa wangunan.
  • nyieun pitulung - daptar mungkin paréntah

Catetan penting jeung tips mantuan

Buildroot henteu ngawangun deui bungkusan anu parantos diwangun! Ku alatan éta, kaayaan bisa timbul dimana a reassembly lengkep diperlukeun.

Anjeun tiasa ngawangun deui pakét anu misah sareng paréntah jieun packagename-rebuild. Contona, anjeun tiasa ngawangun deui kernel Linux:

make linux-rebuild

Buildroot nyimpen kaayaan pakét naon waé ku cara nyiptakeun file .stamp dina diréktori output/build/$packagename:

Buildroot - Bagian 1 - Ihtisar, Minimal System Bangun, Menu Setup

Janten, anjeun tiasa ngawangun deui root-fs sareng gambar tanpa ngawangun deui bungkusan:

rm output/build/host-gcc-final-*/.stamp_host_installed;rm -rf output/target;find output/ -name ".stamp_target_installed" |xargs rm -rf ; make

Variabel Mangpaat

buildroot boga sakumpulan variabel pikeun konfigurasi gampang

  • $TOPDIR - diréktori buildroot
  • $BASEDIR - diréktori OUTPUT
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR - host fs, pementasan fs, target fs ngawangun diréktori.
  • $ BUILD_DIR - diréktori kalawan bungkusan unpacked tur diwangun

Visualisasi

buildroot gaduh fitur visualisasi Anjeun tiasa ngawangun diagram kagumantungan, grafik waktos ngawangun, sareng grafik ukuran pakét dina sistem ahir. Hasilna aya dina bentuk file pdf (anjeun tiasa milih ti svn,png) dina diréktori output/grafik.

Conto paréntah visualisasi:

  • make graph-depends ngawangun tangkal kagumantungan
  • make <pkg>-graph-depends ngawangun tangkal kagumantungan pikeun pakét husus
  • BR2_GRAPH_OUT=png make graph-build plot ngawangun waktos sareng kaluaran PNG
  • make graph-size ukuran pakét plot

Aksara mangpaat

Aya subdirektori dina diréktori buildroot mangpaat kalawan Aksara mangpaat. Contona, aya naskah anu mariksa kabeneran déskripsi pakét. Ieu bisa jadi mangpaat lamun nambahkeun bungkusan sorangan (Kuring gé ngalakukeun ieu engké). File utils/readme.txt ngandung pedaran ngeunaan naskah ieu.

Hayu urang ngawangun distribusi saham

Penting pikeun émut yén sadaya operasi dilaksanakeun atas nama pangguna biasa, sanés akar.
Sadaya paréntah dieksekusi dina buildroot. Paket buildroot parantos kalebet sakumpulan konfigurasi pikeun seueur papan umum sareng virtualisasi.

Hayu urang tingali daptar konfigurasi:

Buildroot - Bagian 1 - Ihtisar, Minimal System Bangun, Menu Setup

Pindah ka qemu_x86_64_defconfig config

make qemu_x86_64_defconfig

Sarta kami ngamimitian assembly

make

Wangunan parantos suksés, tingali hasilna:

Buildroot - Bagian 1 - Ihtisar, Minimal System Bangun, Menu Setup

Buildroot parantos nyusun gambar anu anjeun tiasa jalankeun di Qemu sareng pariksa yén éta tiasa dianggo.

qemu-system-x86_64 -kernel output/images/bzImage -hda    output/images/rootfs.ext2 -append "root=/dev/sda rw" -s -S

Hasilna nyaéta sistem anu dijalankeun dina qemu:

Buildroot - Bagian 1 - Ihtisar, Minimal System Bangun, Menu Setup

Nyieun konfigurasi dewan anjeun sorangan

Nambahkeun File Board

Hayu urang tingali daptar konfigurasi:

Buildroot - Bagian 1 - Ihtisar, Minimal System Bangun, Menu Setup

Dina daptar kami ningali pc_x86_64_efi_defconfig. Urang bakal nyieun dewan urang sorangan ku nyalin tina konfigurasi:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Hayu urang geura-giru nyieun diréktori dewan pikeun nyimpen skrip urang, rootfs-overlay jeung file perlu séjén:

mkdir board/my_x86_board

Pindah ka defconfig ieu:

make my_x86_board_defconfig

Ku kituna, ayeuna ngawangun config (disimpen di .config dina akar diréktori buildroot) pakait jeung x86-64 warisan (bios) mesin target boot.

Hayu urang nyalin konfigurasi linux-kernel (mangpaat engké):

cp board/pc/linux.config board/my_x86_board/

Nyetel parameter ngawangun via KConfig

Hayu urang ngamimitian setelan:

make menuconfig 

Jandéla KConfig bakal muka. Kasebut nyaéta dimungkinkeun pikeun ngonpigurasikeun sareng antarmuka grafis (nyieun nconfig, ngadamel xconfig, ngadamel gconfig):

Buildroot - Bagian 1 - Ihtisar, Minimal System Bangun, Menu Setup

Urang asupkeun bagian kahiji Target Options. Di dieu anjeun tiasa milih arsitéktur target anu bakal dilaksanakeun.

Buildroot - Bagian 1 - Ihtisar, Minimal System Bangun, Menu Setup

Pilihan ngawangun - aya sababaraha setélan ngawangun di dieu. Anjeun tiasa netepkeun diréktori nganggo kode sumber, jumlah benang ngawangun, kaca spion pikeun ngunduh kode sumber sareng setélan anu sanés. Hayu urang tinggalkeun setélan dina standar.

Toolchain - alat ngawangun sorangan dikonpigurasi di dieu. Baca leuwih seueur tentang anjeunna.

Buildroot - Bagian 1 - Ihtisar, Minimal System Bangun, Menu Setup

Jinis toolchain - jinis toolchain anu dianggo. Ieu tiasa janten toolchain anu diwangun kana buildroot atanapi éksternal (anjeun tiasa netepkeun diréktori sareng anu parantos diwangun atanapi url pikeun diunduh). Aya pilihan tambahan pikeun arsitéktur anu béda. Contona, pikeun panangan anjeun ngan saukur tiasa milih versi Linaro tina toolchain éksternal.

C library - pilihan perpustakaan C Operasi sakabéh sistem gumantung kana ieu. Biasana, glibc dianggo, anu ngadukung sadaya fungsionalitas anu mungkin. Tapi bisa jadi badag teuing pikeun sistem embedded, jadi uglibc atanapi musl mindeng dipilih. Urang bakal milih glibc (ieu bakal diperlukeun engké ngagunakeun systemd).

Kernel Headers sareng Custom Kernel Headers séri - kedah cocog sareng versi kernel anu bakal aya dina sistem anu dirakit. Pikeun lulugu kernel, anjeun ogé tiasa netepkeun jalur ka tarball atanapi git Repository.

GCC COMPILER VERSIONS - pilih versi compiler anu bakal dianggo pikeun ngawangun
Aktipkeun dukungan C ++ - pilih ngawangun kalayan dukungan pikeun perpustakaan C ++ dina sistem. Ieu bakal mangpaat pikeun urang dina mangsa nu bakal datang.

Pilihan gcc tambahan - anjeun tiasa nyetél pilihan kompiler tambahan. Kami henteu peryogi ayeuna.

Konfigurasi sistem ngidinan Anjeun pikeun nyetel parameter hareup sistem dijieun:

Buildroot - Bagian 1 - Ihtisar, Minimal System Bangun, Menu Setup

Kalolobaan titik jelas tina judul. Hayu urang nengetan titik di handap ieu:
Path ka tabel pamaké - tabel kalawan pamaké pikeun dijieun (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

file conto. Pamaké pamaké bakal dijieun ku admin sandi, otomatis gid / uid, / bin / sh cangkang, pamaké grup standar, akar anggota grup, komentar pamaké Foo

[alexey@alexey-pc buildroot ]$ cat board/my_x86_board/users.txt 
user -1 user -1 =admin /home/user /bin/sh root Foo user

Root filesystem overlay directories - diréktori overlayed on luhureun target-fs dirakit. Nambahkeun payil anyar jeung ngagantikeun nu geus aya.

Skrip khusus pikeun dijalankeun sateuacan nyiptakeun gambar sistem file - Skrip dieksekusi langsung sateuacan ngalipetkeun sistem file kana gambar. Hayu urang ninggalkeun naskah kosong pikeun ayeuna.

Hayu urang angkat ka bagian Kernel

Buildroot - Bagian 1 - Ihtisar, Minimal System Bangun, Menu Setup

Setélan kernel diatur di dieu. Kernel sorangan dikonpigurasi via make linux-menuconfig.
Anjeun tiasa nyetél versi kernel ku sababaraha cara: pilih tina anu ditawarkeun, lebetkeun vérsi sacara manual, tangtukeun gudang atanapi tarball anu siap.

Konfigurasi kernel - jalur ka config kernel. Anjeun tiasa milih konfigurasi standar pikeun arsitéktur anu dipilih atanapi defocnfig tina Linux. Sumber Linux ngandung sakumpulan defconfigs pikeun sistem target anu béda. Anjeun tiasa mendakan anu anjeun peryogikeun ku ningali langsung sumber di dieu. Contona, pikeun dewan hideung tulang beagle Anjeun tiasa pilih config.

Bagian Paket Target ngamungkinkeun anjeun milih bungkusan mana anu bakal dipasang dina sistem anu diwangun. Hayu urang ninggalkeun eta unchanged pikeun ayeuna. Kami bakal nambihan bungkusan kami kana daptar ieu engké.
Gambar sistem file - daptar gambar sistem file anu bakal dikumpulkeun. Tambahkeun gambar iso

Buildroot - Bagian 1 - Ihtisar, Minimal System Bangun, Menu Setup

Bootloaders - pilihan bootloaders pikeun ngumpulkeun. Hayu urang milih isolinix

Buildroot - Bagian 1 - Ihtisar, Minimal System Bangun, Menu Setup

Ngonpigurasikeun Systemd

Systemd janten salah sahiji pilar Linux, sareng kernel sareng glibc. Ku alatan éta, kuring dipindahkeun setelan na ka item misah.

Ngonpigurasikeun via make menuconfig, teras Paket Target → Alat sistem → systemd. Di dieu anjeun tiasa netepkeun jasa systemd mana anu bakal dipasang sareng dimimitian nalika sistem dimimitian.

Buildroot - Bagian 1 - Ihtisar, Minimal System Bangun, Menu Setup

Nyimpen konfigurasi sistem

Urang nyimpen config ieu via KConfig.

Teras simpen defconfig kami:

make savedefconfig

Konfigurasi Kernel Linux

Konfigurasi kernel Linux didamel nganggo paréntah di handap ieu:

make linux-menuconfig

Hayu urang tambahkeun dukungan pikeun kartu vidéo Virtualbox

Buildroot - Bagian 1 - Ihtisar, Minimal System Bangun, Menu Setup

Hayu urang tambahkeun dukungan integrasi Tamu Virtualbox

Buildroot - Bagian 1 - Ihtisar, Minimal System Bangun, Menu Setup

Simpen sareng kaluar. penting: konfigurasi bakal disimpen dina kaluaran / ngawangun / linux- $ Vérsi / config, tapi teu di dewan / my_x86_board / linux.config

Buildroot - Bagian 1 - Ihtisar, Minimal System Bangun, Menu Setup

Janten, anjeun kedah nyalin config sacara manual ka lokasi panyimpenan:

cp output/build/linux-4.19.25/.config board/my_x86_board/linux.config

Sanggeus éta kami bakal ngalakukeun reassembly lengkep sakabéh sistem. buildroot henteu ngawangun deui naon anu parantos diwangun, anjeun kedah sacara manual nangtukeun bungkusan pikeun ngawangun deui. Supados teu miceunan waktos sareng saraf, langkung gampil ngawangun deui sistem alit sadayana):

make clean;make

Saatos réngsé assembly, ngajalankeun VirtualBox (diuji dina versi 5.2 jeung 6.0) booting tina parameter Sistim CD.

Buildroot - Bagian 1 - Ihtisar, Minimal System Bangun, Menu Setup

Ngajalankeun tina iso dirakit:

Buildroot - Bagian 1 - Ihtisar, Minimal System Bangun, Menu Setup

Daptar bahan dipaké

  1. Buildroot manual

sumber: www.habr.com

Tambahkeun komentar