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-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:
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 eraikimake <pkg>-graph-depends
pakete zehatz baten mendekotasun zuhaitza eraikiBR2_GRAPH_OUT=png make graph-build
marraztu eraikitzeko denbora grafikoa PNG irteerarekinmake 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:
Aldatu qemu_x86_64_defconfig konfiguraziora
make qemu_x86_64_defconfig
Eta eraikitzen hasi
make
Eraikuntza arrakastaz amaitu da, begiratu emaitzak:
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:
Sortu zure taularen konfigurazioa
Arbel fitxategiak gehitzea
Ikusi konfigurazioen zerrenda:
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):
Lehen atalean Target Options sartzen dugu. Hemen muntaia egingo den xede-arkitektura hauta dezakezu.
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.
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:
Puntu gehienak izenburutik argi daude. Errepara diezaiegun puntu hauei:
Erabiltzaileen tauletarako bidea - sortutako erabiltzaileekin taula (
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
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
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
Bootloaders - bildutako abiarazleen aukeraketa. Aukeratu isolinix
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.
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
Gehitu Virtualbox Guest-en integrazio-laguntza
Gorde eta irteten gara. GARRANTZITSUA: konfigurazioa output/build/linux-$version/config-en gordeko da baina ez board/my_x86_board/linux.config-en
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:
Eraikitako isotik hasita:
Erabilitako materialen zerrenda
- Buildroot eskuliburua
Iturria: www.habr.com