Buildroot - 1. zatia - Ikuspegi orokorra, sistema gutxieneko eraikuntza, menuen konfigurazioa

Sarrera

Artikulu sorta honetan, buildroot banaketaren eraikuntza sistema berrikusi eta pertsonalizatzeko nire esperientzia partekatu nahi dut. Esperientzia praktikoa izango da OS txiki bat sortzeko interfaze grafikoa eta funtzionalitate minimoak dituena.

Lehenik eta behin, ez nahastu eraikuntza sistema banaketarekin. Buildroot-ek sistema bat eraiki dezake eskaintzen zaizkion pakete multzo batetik. Buildroot makefile-en gainean eraikita dago eta, beraz, pertsonalizazio aukera asko ditu. Ordeztu paketea beste bertsio batekin, gehitu zure paketea, aldatu paketea eraikitzeko arauak, pertsonalizatu fitxategi-sistema pakete guztiak instalatu ondoren? Horrek guztiak erroa eraiki dezake.

Errusian, buildroot erabiltzen da, baina nire ustez errusierazko informazio gutxi dago hasiberrientzat.

Lanaren helburua zuzeneko deskargarekin, icewm interfazearekin eta arakatzailearekin banaketa-kit bat eraikitzea da. Helburu-plataforma Virtualbox da.

Zergatik eraiki zure banaketa? Askotan funtzionaltasun mugatua behar duzu baliabide mugatuekin. Gehiagotan automatizazioan, firmwarea sortu behar duzu. Helburu orokorreko banaketa egokitzea pakete erredundanteak garbituz eta firmware bihurtuz banaketa berri bat osatzea baino denbora gehiago behar da. Gentoo erabiltzeak ere bere mugak ditu.

Buildroot sistema oso indartsua da, baina ez dizu ezer egingo. Muntaketa-prozesua soilik gaitu eta automatizatu dezake.

Eraikuntza-sistema alternatiboak (yocto, open build system, etab.) ez dira kontuan hartzen edo konparatzen.

Nondik heldu eta nola hasi

Proiektuaren webgunea - buildroot.org. Hemen azken bertsioa deskargatu eta eskuliburua irakur dezakezu. Bertan komunitatearekin ere harremanetan jar zaitezke, akatsen jarraipena, posta-zerrendak eta irc-kanala daude.

Buildroot-ek defconfigs-ekin funtzionatzen du helburuko eraikuntza-taularentzako. Defconfig balio lehenetsirik ez duten aukerak bakarrik dituen konfigurazio fitxategi bat da. Bera da zer eta nola bilduko den zehazten duena. Kasu honetan, bereizita konfigura ditzakezu busybox, linux-kernel, uglibc, u-boot eta barebox abio-kargagailuaren konfigurazioak, baina denak helburu-taulari lotuta egongo dira.
Deskargatutako artxiboa edo git-etik klonatu ondoren, buildroot lanerako prest egongo gara. Direktorioaren egiturari buruz gehiago irakur dezakezu eskuliburuan, garrantzitsuenei buruz esango dizut:

taula β€” taula bakoitzaren espezifikoak diren fitxategiekin direktorioa. Hauek izan daitezke sistemaren irudien scriptak (iso, sdcart, cpio eta beste batzuk), gainjartze direktorioa, nukleoaren konfigurazioa, etab.
konfigurazioak - taularen benetako defconfig. Defconfig plakaren konfigurazio osatugabea da. Ezarpen lehenetsiak ez diren beste parametroak soilik gordetzen ditu.
dl - Deskargatutako iturburu-kode/fitxategiekin muntatzeko
irteera/helmuga - Jasotako sistema eragilearen fitxategi-sistema muntatua. Etorkizunean, bertatik irudiak sortzen dira deskargatzeko / instalatzeko
irteera/ostalari - Ostalari-utilitateak muntatzeko
irteera/eraiki - bildutako paketeak

Muntaia konfigurazioa KConfig bidez egiten da. Sistema bera erabiltzen da linux nukleoa eraikitzeko. Gehien erabiltzen diren komandoen zerrenda (exekutatu buildroot direktorioa):

  • make menuconfig - deitu konfigurazio konfigurazioa. GUI ere erabil dezakezu (make nconfig, make xconfig, make gconfig)
  • make linux-menuconfig - deitu nukleoaren konfigurazioa.
  • garbitu - garbitu eraikuntza-emaitzak (irteeran gordetzen den guztia)
  • egin - sistema eraiki. Honek ez ditu jada eraikitako prozesuak berreraikitzen.
  • make defconfig_name - aldatu konfigurazioa defconfig zehatzera
  • make list-defconfigs - defconfigs zerrenda bat erakutsi
  • egin iturburua - instalazio-fitxategiak bakarrik deskargatu, muntaketarik ez.
  • make help - komando posibleen zerrenda bistaratu

Ohar garrantzitsuak eta aholku lagungarriak

Buildroot-ek ez ditu jada eraikitako paketeak berreraikitzen! Hori dela eta, egoera bat sor daiteke birmuntaketa osoa behar denean.

Komandoarekin pakete bakarra berreraiki dezakezu egin paketeizena-berreraiki. Adibidez, linux nukleoa berreraiki dezakezu:

make linux-rebuild

Buildroot-ek edozein paketeren egoera gordetzen du output/build/$packagename direktorioan .stamp fitxategiak sortuz:

Buildroot - 1. zatia - Ikuspegi orokorra, sistema gutxieneko eraikuntza, menuen konfigurazioa

Beraz, posible da root-fs eta irudiak berreraiki paketeak berreraiki gabe:

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

Aldagai erabilgarriak

buildroot-ek aldagai multzo bat dauka erraz konfiguratzeko

  • $TOPDIR - buildroot root direktorioa
  • $BASEDIR - IRTEERA direktorioa
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR - host fs, staging fs, target fs eraikitze-direktorioak.
  • $BUILD_DIR - despakitu eta eraikitako paketeen direktorioa

Bistaratzea

buildroot-ek ikusteko gaitasuna du. Mendekotasun diagrama bat eraiki dezakezu, denbora grafikoa, paketeen tamaina grafikoa azken sisteman. Emaitzak pdf fitxategi gisa (svn,png aukeratu dezakezu) irteera/grafiko direktorioan.

Errendatzeko komandoen adibideak:

  • make graph-depends mendekotasun zuhaitza eraiki
  • make <pkg>-graph-depends pakete zehatz baten mendekotasun zuhaitza eraiki
  • BR2_GRAPH_OUT=png make graph-build marraztu eraikitzeko denbora grafikoa PNG irteerarekin
  • make graph-size marraztu paketearen tamaina

Gidoi erabilgarriak

Buildroot direktorioa azpidirektorio bat du erabilgarriak gidoi erabilgarriekin. Adibidez, paketeen deskribapenen zuzentasuna egiaztatzen duen script bat dago. Hau erabilgarria izan daiteke pakete pertsonalizatuak gehitzean (geroago egingo dut). utils/readme.txt fitxategiak script hauen deskribapena du.

Eraiki dezagun stock banaketa

Garrantzitsua da gogoratzea eragiketa guztiak ohiko erabiltzaile baten izenean egiten direla, ez root.
Komando guztiak buildroot-en exekutatzen dira. Buildroot banaketak konfigurazio multzo bat du dagoeneko plaka arrunt askorentzat eta birtualizaziorako.

Ikusi konfigurazioen zerrenda:

Buildroot - 1. zatia - Ikuspegi orokorra, sistema gutxieneko eraikuntza, menuen konfigurazioa

Aldatu qemu_x86_64_defconfig konfiguraziora

make qemu_x86_64_defconfig

Eta eraikitzen hasi

make

Eraikuntza arrakastaz amaitu da, begiratu emaitzak:

Buildroot - 1. zatia - Ikuspegi orokorra, sistema gutxieneko eraikuntza, menuen konfigurazioa

Buildroot-ek Qemu-n exekutatu ditzakezun irudiak bildu ditu eta funtzionatzen duten ikusteko.

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

Emaitza qemu-n exekutatzen den sistema bat da:

Buildroot - 1. zatia - Ikuspegi orokorra, sistema gutxieneko eraikuntza, menuen konfigurazioa

Sortu zure taularen konfigurazioa

Arbel fitxategiak gehitzea

Ikusi konfigurazioen zerrenda:

Buildroot - 1. zatia - Ikuspegi orokorra, sistema gutxieneko eraikuntza, menuen konfigurazioa

Zerrendan pc_x86_64_efi_defconfig ikusiko dugu. Gure taula sortuko dugu konfiguraziotik kopiatuz:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Sortu berehala taula direktorio bat gure scriptak, rootfs-overlay eta beharrezko beste fitxategi batzuk gordetzeko:

mkdir board/my_x86_board

Aldatu defconfig honetara:

make my_x86_board_defconfig

Beraz, orain eraikitze-konfigurazioa (.config-en gordeta buildroot-en direktorioaren erroan) bat dator x86-64 legacy(bios) xede-makinarekin abiaraztez.

Kopiatu linux-kernelaren konfigurazioa (gero erabilgarria):

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

KConfig bidez eraikitzeko aukerak konfiguratzea

Hasi gaitezen konfigurazioa:

make menuconfig 

KConfig leihoa irekiko da. Interfaze grafiko batekin konfiguratu daiteke (make nconfig, make xconfig, make gconfig):

Buildroot - 1. zatia - Ikuspegi orokorra, sistema gutxieneko eraikuntza, menuen konfigurazioa

Lehen atalean Target Options sartzen dugu. Hemen muntaia egingo den xede-arkitektura hauta dezakezu.

Buildroot - 1. zatia - Ikuspegi orokorra, sistema gutxieneko eraikuntza, menuen konfigurazioa

Eraikitzeko aukerak - hemen hainbat eraikuntza aukera daude. Iturburu-kodeekin, eraikitzeko hari kopurua, iturburu-kodeak deskargatzeko ispiluak eta beste ezarpen batzuekin zehaztu ditzakezu. Utz ditzagun ezarpen lehenetsiak.

Tresna-katea - eraikitzeko tresna-kit bera konfiguratuta dago hemen. Berari buruz gehiago.

Buildroot - 1. zatia - Ikuspegi orokorra, sistema gutxieneko eraikuntza, menuen konfigurazioa

Tresna-kate mota - erabilitako tresna-kate mota. Hau buildroot-en edo kanpoko tresna-kate batean eraiki daiteke (jada eraikitako direktorio bat edo deskargatzeko url bat zehaztu dezakezu). Aukera gehigarriak daude arkitektura ezberdinetarako. Adibidez, besorako, kanpoko Linaro tresna-katearen bertsioa hauta dezakezu.

C liburutegia - C liburutegiaren hautaketa Sistema osoaren funtzionamendua horren araberakoa da. Normalean glibc erabiltzen da, funtzionalitate posible guztiak onartzen dituena. Baina handiegia izan daiteke sistema txertatu baterako, beraz, sarritan uglibc edo musl aukeratzen da. Glibc aukeratuko dugu (hau beharrezkoa izango da geroago systemd erabiltzeko).

Kernel goiburuak eta kernel goiburu pertsonalizatuak serieak - eraikitzen ari den sisteman egongo den nukleoaren bertsioarekin bat etorri behar dute. Nukleoko goiburuetarako, tarball edo git biltegirako bidea ere zehaztu dezakezu.

GCC COMPILER BERTSIOAK - hautatu eraikitzeko erabiliko den konpiladorearen bertsioa
Gaitu C++ euskarria - hautatu sistemako c++ liburutegietarako laguntzarekin eraikitzeko. Hau geroago beharko dugu.

Gcc aukera gehigarriak - konpiladorearen aukera gehigarriak ezar ditzakezu. Oraingoz ez dugu behar.

Sistemaren konfigurazioak sortutako sistemaren etorkizuneko parametroak ezartzeko aukera ematen du:

Buildroot - 1. zatia - Ikuspegi orokorra, sistema gutxieneko eraikuntza, menuen konfigurazioa

Puntu gehienak izenburutik argi daude. Errepara diezaiegun puntu hauei:
Erabiltzaileen tauletarako bidea - sortutako erabiltzaileekin taula (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Fitxategiaren adibidea. Erabiltzaile erabiltzailea pasahitz admin, automatikoki gid/uid, /bin/sh shell, taldeko erabiltzaile lehenetsiarekin, talde root kidearekin, iruzkin Foo erabiltzailearekin sortuko da

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

Erroko fitxategi-sistemaren gainjartze-direktorioak - konpilatutako target-fs-en gainean gainjarritako direktorioa. Fitxategi berriak gehitzen ditu eta lehendik daudenak ordezkatzen ditu.

Fitxategi-sistemaren irudiak sortu aurretik exekutatzeko script pertsonalizatuak Utzi gidoia hutsik oraingoz.

Goazen Kernel atalera

Buildroot - 1. zatia - Ikuspegi orokorra, sistema gutxieneko eraikuntza, menuen konfigurazioa

Hemen ezartzen dira nukleoaren ezarpenak. Nukleoa bera make linux-menuconfig bidez konfiguratuta dago.
Nukleoaren bertsioa hainbat modutan ezar dezakezu: eskaintzen direnetatik aukeratu, bertsioa eskuz sartu, biltegi bat edo prest egindako tarball bat zehaztu.

Kernelaren konfigurazioa - nukleoaren konfiguraziorako bidea. Hautatutako arkitekturarako konfigurazio lehenetsia edo Linuxetik defocnfig aukera dezakezu. Linux iturriek defconfigs multzo bat dute helburu-sistema desberdinetarako. Behar duzuna aurki dezakezu Hemen iturrira zuzenean begiratuz. Adibidez, beagle hezur-taula beltz baterako, dezakezu hautatu konfigurazioa.

Xede-paketeak atalean xede-sisteman zein pakete instalatuko diren hauta dezakezu. Utz dezagun oraingoz aldatu gabe. Geroago gure paketeak gehituko ditugu zerrenda honetara.
Fitxategi-sistemaren irudiak - Eraiki beharreko fitxategi-sistemako irudien zerrenda. Gehitu iso irudi bat

Buildroot - 1. zatia - Ikuspegi orokorra, sistema gutxieneko eraikuntza, menuen konfigurazioa

Bootloaders - bildutako abiarazleen aukeraketa. Aukeratu isolinix

Buildroot - 1. zatia - Ikuspegi orokorra, sistema gutxieneko eraikuntza, menuen konfigurazioa

Systemd konfiguratzen

Systemd linux-en zutabeetako bat bihurtzen da, kernel eta glibc-ekin batera. Horregatik, bere ezarpena aparteko paragrafo batean atera nuen.

Make menuconfig bidez konfiguratzen da, ondoren Target packages β†’ Sistema tresnak β†’ systemd. Hemen zehaztu dezakezu zein systemd zerbitzu instalatu eta abiaraziko diren sistema abiaraztean.

Buildroot - 1. zatia - Ikuspegi orokorra, sistema gutxieneko eraikuntza, menuen konfigurazioa

Sistemaren konfigurazioa gordetzen

Konfigurazio hau KConfig bidez gordetzen dugu.

Ondoren, gure defconfig gordetzen dugu:

make savedefconfig

Linux kernelaren konfigurazioa

linux nukleoaren konfigurazioa komando honen bidez deitzen da:

make linux-menuconfig

Gehitu Virtualbox bideo-txartelaren euskarria

Buildroot - 1. zatia - Ikuspegi orokorra, sistema gutxieneko eraikuntza, menuen konfigurazioa

Gehitu Virtualbox Guest-en integrazio-laguntza

Buildroot - 1. zatia - Ikuspegi orokorra, sistema gutxieneko eraikuntza, menuen konfigurazioa

Gorde eta irteten gara. GARRANTZITSUA: konfigurazioa output/build/linux-$version/config-en gordeko da baina ez board/my_x86_board/linux.config-en

Buildroot - 1. zatia - Ikuspegi orokorra, sistema gutxieneko eraikuntza, menuen konfigurazioa

Hori dela eta, eskuz kopiatu behar duzu konfigurazioa biltegiratze-kokapenean:

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

Horren ondoren, sistema osoaren muntaketa osoa egingo dugu. buildroot-ek ez du eraikitakoa berreraikitzen, eskuz zehaztu behar dituzu berreraiki beharreko paketeak. Denbora eta nerbioak ez galtzeko, errazagoa da sistema txiki bat bere osotasunean berreraikitzea):

make clean;make

Muntaia amaitutakoan, VirtualBox abiarazten dugu (5.2 eta 6.0 bertsioetan probatua) cd-diskotik abiaraziz.Sistemaren parametroak:

Buildroot - 1. zatia - Ikuspegi orokorra, sistema gutxieneko eraikuntza, menuen konfigurazioa

Eraikitako isotik hasita:

Buildroot - 1. zatia - Ikuspegi orokorra, sistema gutxieneko eraikuntza, menuen konfigurazioa

Erabilitako materialen zerrenda

  1. Buildroot eskuliburua

Iturria: www.habr.com

Gehitu iruzkin berria