Buildroot - Parto 1 - Superrigardo, Minimuma Sistemo-Konstruo, Menua Agordo

Enkonduko

En ĉi tiu serio de artikoloj, mi volas revizii la konstrusistemon de la buildroot-distribuo kaj dividi mian sperton pri agordado de ĝi. Estos praktika sperto pri kreado de malgranda OS kun grafika interfaco kaj minimuma funkcieco.

Antaŭ ĉio, ne konfuzu la konstrusistemon kun la distribuo. Buildroot povas konstrui sistemon el aro de pakaĵoj kiuj estas ofertitaj al ĝi. Buildroot estas konstruita sur makefiles kaj tial havas multajn personigajn elektojn. Anstataŭigi la pakaĵon per alia versio, aldoni vian propran pakaĵon, ŝanĝi la regulojn por konstrui la pakaĵon, personecigi la dosiersistemon post instalo de ĉiuj pakaĵoj? Ĉio ĉi povas konstrui radikon.

En Rusio oni uzas buildroot, sed laŭ mi estas malmulte da ruslingvaj informoj por komencantoj.

La celo de la laboro estas kunmeti distribukompleton kun viva elŝuto, icewm-interfaco kaj retumilo. La cela platformo estas virtualbox.

Kial konstrui vian propran distribuadon? Ofte vi bezonas limigitan funkciecon kun limigitaj rimedoj. Pli ofte en aŭtomatigo, vi devas krei firmware. Adapti ĝeneraluzeblan distribuon purigante superfluajn pakaĵojn kaj igante ĝin firmvaro estas pli tempopostula maniero ol kunmeti novan distribuon. Uzado de Gentoo ankaŭ havas siajn limojn.

La Buildroot-sistemo estas tre potenca, sed ĝi faros nenion por vi. Ĝi nur povas ebligi kaj aŭtomatigi la kunvenan procezon.

Alternativaj konstrusistemoj (yocto, malferma konstrusistemo, ktp.) ne estas konsiderataj aŭ komparitaj.

Kie akiri kaj kiel komenci

Projekta retejo - buildroot.org. Ĉi tie vi povas elŝuti la lastan version kaj legi la manlibron. Tie vi ankaŭ povas kontakti la komunumon, ekzistas cimspurilo, retlistoj kaj irc-kanalo.

Buildroot funkcias per defconfigs por la cela konstrutabulo. Defconfig estas agorda dosiero, kiu enhavas nur opciojn, kiuj ne havas defaŭltan valoron. Estas li kiu determinas kion kaj kiel estos kolektita. En ĉi tiu kazo, vi povas aparte agordi la agordojn de busybox, linux-kernel, uglibc, u-boot kaj barebox bootloader, sed ili ĉiuj estos ligitaj al la cela tabulo.
Post malpakado de la elŝutita arkivo aŭ klonado de git, ni pretas buildroot por labori. Vi povas legi pli pri la dosierujo-strukturo en la manlibro, mi rakontos al vi pri la plej gravaj:

tabulo — dosierujo kun dosieroj specifa por ĉiu tabulo. Ĉi tiuj povas esti sistemaj bildigaj manuskriptoj (iso, sdcart, cpio kaj aliaj), tegmenta dosierujo, kerna agordo, ktp.
konfiguroj - la reala defconfig de la tabulo. Defconfig estas nekompleta tabulo-agordo. Ĝi stokas nur parametrojn krom la defaŭltaj agordoj.
dl - dosierujo kun elŝutitaj fontkodoj / dosieroj por kunigo
eligo/celo - la kunmetita dosiersistemo de la ricevita OS. Estontece, bildoj estas kreitaj de ĝi por elŝuto / instalado
eligo/gastiganto - gastigaj iloj por kunigo
eligo/konstruo - kunmetitaj pakaĵoj

Asemblea agordo estas farita per KConfig. La sama sistemo estas uzata por konstrui la linuksan kernon. Listo de la plej ofte uzataj komandoj (ekzekutaj en la buildroot-dosierujo):

  • make menuconfig - voku la konstruan agordon. Vi ankaŭ povas uzi la GUI (fari nconfig, fari xconfig, fari gconfig)
  • make linux-menuconfig - voku kernan agordon.
  • purigi - purigi konstrurezultojn (ĉio, kio estas konservita en eligo)
  • make - konstrui la sistemon. Ĉi tio ne rekonstruas jam konstruitajn procezojn.
  • make defconfig_name - ŝanĝu agordon al specifa defconfig
  • make list-defconfigs - montru liston de defconfigs
  • faru fonton - nur elŝutu la instalajn dosierojn, neniun asembleon.
  • make help - montri liston de eblaj komandoj

Gravaj Notoj kaj Helpaj Konsiloj

Buildroot ne rekonstruas jam konstruitajn pakaĵojn! Tial, situacio povas ekesti kiam kompleta remuntado estas postulata.

Vi povas rekonstrui ununuran pakaĵon per la komando fari packagename-rebuild. Ekzemple, vi povas rekonstrui la linuksan kernon:

make linux-rebuild

Buildroot konservas la staton de iu pako kreante .stamp dosierojn en la output/build/$packagename dosierujo:

Buildroot - Parto 1 - Superrigardo, Minimuma Sistemo-Konstruo, Menua Agordo

Tial, vi povas rekonstrui root-fs kaj bildojn sen rekonstrui pakaĵojn:

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

Utilaj Variabloj

buildroot havas aron da variabloj por facila agordo

  • $TOPDIR - buildroot radika dosierujo
  • $BASEDIR - OUTPUT dosierujo
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR - gastiganto fs, staging fs, celo fs konstruaj dosierujoj.
  • $BUILD_DIR - dosierujo kun malpakitaj kaj konstruitaj pakaĵoj

Bildigo

buildroot havas la kapablon bildigi.Vi povas konstrui dependecdiagramon, konstrui tempografeon, pakgrandecan grafeon en la fina sistemo. Rezultoj kiel pdf-dosieroj (vi povas elekti el svn,png) en la eligo/grafa dosierujo.

Ekzemploj de redonaj komandoj:

  • make graph-depends konstrui dependecan arbon
  • make <pkg>-graph-depends konstrui la dependecan arbon de specifa pako
  • BR2_GRAPH_OUT=png make graph-build grafiko de konstrua tempo kun PNG-eligo
  • make graph-size grafiku la pakaĵgrandecon

Utilaj skriptoj

La buildroot-dosierujo havas subdosierujon utiloj kun utilaj skriptoj. Ekzemple, ekzistas skripto, kiu kontrolas la ĝustecon de pakaĵpriskriboj. Ĉi tio povas esti utila kiam oni aldonas kutimajn pakaĵojn (mi faros tion poste). La dosiero utils/readme.txt havas priskribon de ĉi tiuj skriptoj.

Ni konstruu akcian distribuadon

Gravas memori, ke ĉiuj operacioj estas faritaj nome de kutima uzanto, ne radiko.
Ĉiuj komandoj estas ekzekutitaj en buildroot. La buildroot-distribuo jam havas aron da agordoj por multaj komunaj tabuloj kaj virtualigo.

Vidu la liston de agordoj:

Buildroot - Parto 1 - Superrigardo, Minimuma Sistemo-Konstruo, Menua Agordo

Ŝanĝu al qemu_x86_64_defconfig agordo

make qemu_x86_64_defconfig

Kaj komencu la konstruon

make

La konstruo finiĝas sukcese, rigardu la rezultojn:

Buildroot - Parto 1 - Superrigardo, Minimuma Sistemo-Konstruo, Menua Agordo

Buildroot kunmetis bildojn, kiujn vi povas ruli en Qemu kaj vidi ĉu ili funkcias.

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

La rezulto estas sistemo kuranta en qemu:

Buildroot - Parto 1 - Superrigardo, Minimuma Sistemo-Konstruo, Menua Agordo

Kreu vian propran tabulkonfiguracion

Aldono de Estraraj Dosieroj

Vidu la liston de agordoj:

Buildroot - Parto 1 - Superrigardo, Minimuma Sistemo-Konstruo, Menua Agordo

En la listo ni vidas pc_x86_64_efi_defconfig. Ni kreos nian tabulon kopiante ĝin de la agordo:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Ni tuj kreu tabuldosierujon por konservi niajn skriptojn, rootfs-overlay kaj aliajn necesajn dosierojn:

mkdir board/my_x86_board

Ŝanĝu al ĉi tiu defconfig:

make my_x86_board_defconfig

Do nun la konstrua agordo (stokita en .config ĉe la radiko de la dosierujo de buildroot) kongruas kun la celmaŝino x86-64 legacy(bios) laŭ ekkuro.

Kopiu la agordon de linuksa kerno (utila poste):

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

Agordante Konstruajn Opciojn per KConfig

Ni komencu la aranĝon:

make menuconfig 

La fenestro de KConfig malfermos. Eblas agordi per grafika interfaco (make nconfig, make xconfig, make gconfig):

Buildroot - Parto 1 - Superrigardo, Minimuma Sistemo-Konstruo, Menua Agordo

Ni eniras la unuan sekcion Celaj Opcioj. Ĉi tie vi povas elekti la celitan arkitekturon por kiu la muntado estos efektivigita.

Buildroot - Parto 1 - Superrigardo, Minimuma Sistemo-Konstruo, Menua Agordo

Konstruaj opcioj - estas diversaj konstruaj opcioj ĉi tie. Vi povas specifi dosierujojn kun fontkodoj, la nombro da konstrufadenoj, speguloj por elŝuti fontkodojn kaj aliajn agordojn. Ni lasu la defaŭltajn agordojn.

Ilĉeno - la konstrua ilaro mem estas agordita ĉi tie. Pli pri li.

Buildroot - Parto 1 - Superrigardo, Minimuma Sistemo-Konstruo, Menua Agordo

Tipo de ilĉeno - la speco de ilĉeno uzata. Ĉi tio povas esti iloĉeno konstruita en buildroot aŭ ekstera (vi povas specifi la dosierujon kun la jam konstruita aŭ la url por elŝuto). Estas pliaj opcioj por malsamaj arkitekturoj. Ekzemple, por brako, vi povas simple elekti la version de la ekstera Linaro-ilĉeno.

Biblioteko C - elekto de la biblioteko C. De tio dependas la funkciado de la tuta sistemo. Kutime oni uzas glibc, kiu subtenas ĉiujn eblajn funkciojn. Sed ĝi povas esti tro granda por enigita sistemo, do uglibc aŭ musl estas ofte elektita. Ni elektos glibc (ĉi tio estos postulata poste por uzi systemd).

Serioj Kernel Headers kaj Custom Kernel Headers - devas kongrui kun la versio de la kerno kiu estos en la konstruata sistemo. Por kernaj kaplinioj, vi ankaŭ povas specifi la vojon al la tarball aŭ la git-deponejo.

GCC-KOMPILILVERSIOJ - elektu la kompililon, kiu estos uzata por konstrui
Ebligu C++-subtenon - elektu por konstrui kun subteno por c++-bibliotekoj en la sistemo. Ni bezonos ĉi tion poste.

Pliaj opcioj de gcc - vi povas agordi pliajn opciojn de kompililo. Ni ne bezonas ĝin nuntempe.

Sistema agordo permesas vin agordi la estontajn parametrojn de la kreita sistemo:

Buildroot - Parto 1 - Superrigardo, Minimuma Sistemo-Konstruo, Menua Agordo

La plej multaj el la punktoj estas klaraj de la titolo. Ni atentu la jenajn punktojn:
Vojo al la tabeloj de uzantoj - tabelo kun kreitaj uzantoj (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Dosiera ekzemplo. La uzanto-uzanto estos kreita per pasvorta administranto, aŭtomate gid/uid, /bin/sh-ŝelo, defaŭlta grupuzanto, membro de grupradiko, komento Foo-uzanto

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

Radikaj dosiersistemoj superkovritaj dosierujoj - dosierujo supermetita sur la kunmetita cel-fs. Aldonas novajn dosierojn kaj anstataŭigas ekzistantajn.

Propraj skriptoj por ruli antaŭ krei dosiersistemajn bildojn Lasu la skripton malplena por nun.

Ni iru al la sekcio Kerno

Buildroot - Parto 1 - Superrigardo, Minimuma Sistemo-Konstruo, Menua Agordo

Ĉi tie estas agordita la kernaj agordoj. La kerno mem estas agordita per make linux-menuconfig.
Vi povas agordi la kernan version en malsamaj manieroj: elektu el tiuj ofertitaj, enigu la version permane, specifu deponejon aŭ pretan tarbulon.

Kernel-agordo - vojo al la kerna agordo. Vi povas elekti la defaŭltan agordon por la elektita arkitekturo aŭ defocnfig de Linukso. La Linukso-fontoj havas aron da defconfigs por malsamaj celsistemoj. Vi povas trovi tiun, kiun vi bezonas rigardante rekte la fonton ĉi tie. Ekzemple, por beagle osta nigra tabulo, vi povas elektu agordon.

La sekcio de Celaj pakoj permesas elekti kiuj pakoj estos instalitaj en la cela sistemo. Ni lasu ĝin senŝanĝa nuntempe. Poste ni aldonos niajn pakaĵojn al ĉi tiu listo.
Dosiersistemaj bildoj - Listo de dosiersistemaj bildoj konstruotaj. Aldonu iso-bildon

Buildroot - Parto 1 - Superrigardo, Minimuma Sistemo-Konstruo, Menua Agordo

Bootloaders - la elekto de kolektitaj ekŝargiloj. Elektu isolinix

Buildroot - Parto 1 - Superrigardo, Minimuma Sistemo-Konstruo, Menua Agordo

Agordante Systemd

Systemd iĝas unu el la kolonoj de Linukso, kune kun kerno kaj glibc. Tial mi elprenis ĝian agordon en aparta alineo.

Ĝi estas agordita per make menuconfig, tiam Cel-pakaĵoj → Sistemaj iloj → systemd. Ĉi tie vi povas specifi, kiuj systemd-servoj estos instalitaj kaj komencitaj ĉe sistema ekfunkciigo.

Buildroot - Parto 1 - Superrigardo, Minimuma Sistemo-Konstruo, Menua Agordo

Konservante la sisteman agordon

Ni konservas ĉi tiun agordon per KConfig.

Tiam ni konservas nian defconfig:

make savedefconfig

Linukso-kerna agordo

La agordo de linuksa kerno estas alvokita per la sekva komando:

make linux-menuconfig

Aldonu subtenon por Virtualbox-vidkarto

Buildroot - Parto 1 - Superrigardo, Minimuma Sistemo-Konstruo, Menua Agordo

Aldonu Virtualbox Guest-integrigan subtenon

Buildroot - Parto 1 - Superrigardo, Minimuma Sistemo-Konstruo, Menua Agordo

Konservu kaj eliru. GRAVA: agordo estos konservita en output/build/linux-$version/config sed ne en board/my_x86_board/linux.config

Buildroot - Parto 1 - Superrigardo, Minimuma Sistemo-Konstruo, Menua Agordo

Tial, vi devas mane kopii la agordon al la stoka loko:

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

Post tio, ni faros kompletan remuntadon de la tuta sistemo. buildroot ne rekonstruas tion, kio jam estis konstruita, vi devas permane specifi la pakaĵojn por rekonstrui. Por ne malŝpari tempon kaj nervojn, estas pli facile rekonstrui malgrandan sistemon entute):

make clean;make

Fininte la muntadon, ni lanĉas VirtualBox (provitan en versioj 5.2 kaj 6.0) kun ekŝargo de la cd-disko. Sistema parametroj:

Buildroot - Parto 1 - Superrigardo, Minimuma Sistemo-Konstruo, Menua Agordo

Komencante de la konstruita iso:

Buildroot - Parto 1 - Superrigardo, Minimuma Sistemo-Konstruo, Menua Agordo

Listo de uzataj materialoj

  1. Buildroot manlibro

fonto: www.habr.com

Aldoni komenton