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 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:
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 kagumantunganmake <pkg>-graph-depends
ngawangun tangkal kagumantungan pikeun pakét hususBR2_GRAPH_OUT=png make graph-build
plot ngawangun waktos sareng kaluaran PNGmake 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:
Pindah ka qemu_x86_64_defconfig config
make qemu_x86_64_defconfig
Sarta kami ngamimitian assembly
make
Wangunan parantos suksés, tingali hasilna:
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:
Nyieun konfigurasi dewan anjeun sorangan
Nambahkeun File Board
Hayu urang tingali daptar konfigurasi:
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):
Urang asupkeun bagian kahiji Target Options. Di dieu anjeun tiasa milih arsitéktur target anu bakal dilaksanakeun.
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.
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:
Kalolobaan titik jelas tina judul. Hayu urang nengetan titik di handap ieu:
Path ka tabel pamaké - tabel kalawan pamaké pikeun dijieun (
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
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
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
Bootloaders - pilihan bootloaders pikeun ngumpulkeun. Hayu urang milih isolinix
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.
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
Hayu urang tambahkeun dukungan integrasi Tamu Virtualbox
Simpen sareng kaluar. penting: konfigurasi bakal disimpen dina kaluaran / ngawangun / linux- $ Vérsi / config, tapi teu di dewan / my_x86_board / linux.config
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.
Ngajalankeun tina iso dirakit:
Daptar bahan dipaké
- Buildroot manual
sumber: www.habr.com