Buildroot - sehemu ya 1. Taarifa ya jumla, kukusanya mfumo mdogo, usanidi kupitia orodha

Utangulizi

Katika safu hii ya vifungu, nataka kuangalia mfumo wa ujenzi wa usambazaji wa ujenzi na kushiriki uzoefu wangu katika kuubinafsisha. Kutakuwa na uzoefu wa vitendo katika kuunda OS ndogo na interface ya graphical na utendaji mdogo.

Kwanza kabisa, haupaswi kuchanganya mfumo wa kujenga na usambazaji. Buildroot inaweza kuunda mfumo kutoka kwa seti ya vifurushi ambavyo hutolewa kwake. Buildroot imejengwa kwenye faili za kutengeneza na kwa hivyo ina uwezo mkubwa wa kubinafsisha. Badilisha kifurushi na toleo lingine, ongeza kifurushi chako mwenyewe, ubadilishe sheria za kuunda kifurushi, ubadilishe mfumo wa faili baada ya kusanikisha vifurushi vyote? buildroot inaweza kufanya haya yote.

Katika Urusi, buildroot hutumiwa, lakini kwa maoni yangu kuna habari kidogo ya lugha ya Kirusi kwa Kompyuta.

Lengo la kazi ni kukusanya vifaa vya usambazaji na upakuaji wa moja kwa moja, kiolesura cha icewm na kivinjari. Jukwaa linalolengwa ni kisanduku halisi.

Kwa nini ujenge usambazaji wako mwenyewe? Mara nyingi utendakazi mdogo unahitajika na rasilimali chache. Hata mara nyingi zaidi katika otomatiki unahitaji kuunda firmware. Kurekebisha usambazaji wa madhumuni ya jumla kwa kusafisha vifurushi visivyo vya lazima na kugeuza kuwa programu dhibiti ni kazi kubwa kuliko kujenga usambazaji mpya. Kutumia Gentoo pia kuna mapungufu yake.

Mfumo wa Buildroot una nguvu sana, lakini hautakusaidia chochote. Inaweza tu kuwezesha na kugeuza mchakato wa mkusanyiko.

Mifumo mbadala ya kujenga (yocto, mfumo wa kujenga wazi na wengine) haizingatiwi au kulinganishwa.

Wapi kupata na jinsi ya kuanza

Tovuti ya mradi - buildroot.org. Hapa unaweza kupakua toleo la sasa na kusoma mwongozo. Huko unaweza kuwasiliana na jumuiya, kuna kifuatiliaji cha hitilafu, orodha za barua pepe na kituo cha irc.

Buildroot hufanya kazi bila usanidi kwa bodi inayolengwa ya jengo. Defconfig ni faili ya usanidi ambayo huhifadhi chaguzi tu ambazo hazina maadili ya msingi. Ni yeye anayeamua nini kitakusanywa na jinsi gani. Katika kesi hii, unaweza kusanidi kando usanidi wa kisanduku cha kazi, linux-kernel, uglibc, u-boot na vipakiaji vya sanduku-bare, lakini zote zitaunganishwa kwenye ubao unaolengwa.
Baada ya kufungua kumbukumbu iliyopakuliwa au kuunganisha kutoka kwa git, tunapata muundo ulio tayari kutumia. Unaweza kusoma zaidi juu ya muundo wa saraka kwenye mwongozo; Nitakuambia juu ya zile muhimu zaidi:

bodi - saraka iliyo na faili maalum kwa kila ubao. Hizi zinaweza kuwa maandishi ya kuunda picha za mfumo (iso, sdcart, cpio na zingine), saraka ya uwekaji, usanidi wa kernel, nk.
sanidi - defconfig halisi ya bodi. Defconfig ni usanidi wa bodi ambao haujakamilika. Inahifadhi tu vigezo vinavyotofautiana na mipangilio ya chaguo-msingi
dl β€” saraka iliyo na misimbo/faili za chanzo zilizopakuliwa za kuunganisha
pato/lengo - mfumo wa faili uliokusanyika wa OS inayosababisha. Baadaye, picha huundwa kutoka kwayo kwa kupakua / usakinishaji
pato/mwenyeji - huduma za mwenyeji kwa mkusanyiko
pato/kujenga - vifurushi vilivyokusanyika

Mkusanyiko umesanidiwa kupitia KConfig. Mfumo huo huo hutumiwa kuunda kernel ya Linux. Orodha ya amri zinazotumiwa sana (tekeleze kwenye saraka ya ujenzi):

  • tengeneza menuconfig - piga usanidi wa kujenga. Unaweza pia kutumia kiolesura cha picha (tengeneza nconfig, tengeneza xconfig, tengeneza gconfig)
  • tengeneza linux-menuconfig - piga usanidi wa kernel.
  • safisha - safisha matokeo ya ujenzi (kila kitu kilichohifadhiwa kwenye pato)
  • tengeneza - tengeneza mfumo. Hii haikusanyi tena michakato iliyokusanywa tayari.
  • fanya defconfig_name - badilisha usanidi kwa defconfig maalum
  • tengeneza orodha-defconfigs - onyesha orodha ya defconfigs
  • tengeneza chanzo - pakua tu faili za usakinishaji, bila kujenga.
  • fanya msaada - orodhesha amri zinazowezekana

Vidokezo muhimu na vidokezo muhimu

Buildroot haijengi tena vifurushi ambavyo tayari vimejengwa! Kwa hiyo, hali inaweza kutokea ambapo upyaji kamili unahitajika.

Unaweza kuunda tena kifurushi tofauti na amri tengeneza jina la kifurushi-ujenge upya. Kwa mfano, unaweza kuunda tena kinu cha Linux:

make linux-rebuild

Buildroot huhifadhi hali ya kifurushi chochote kwa kuunda faili za .stamp katika orodha ya output/build/$packagename:

Buildroot - sehemu ya 1. Taarifa ya jumla, kukusanya mfumo mdogo, usanidi kupitia orodha

Kwa hivyo, unaweza kuunda upya mizizi-fs na picha bila kuunda tena vifurushi:

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

Vigezo Muhimu

buildroot ina seti ya anuwai kwa usanidi rahisi

  • $TOPDIR - saraka ya kujenga
  • $BASEDIR - OUTPUT directory
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR - seva pangishi fs, staging fs, fs lengwa saraka za uundaji.
  • $BUILD_DIR - saraka iliyo na vifurushi vilivyofunguliwa na vilivyojengwa

Visualization

buildroot ina kipengele cha taswira. Unaweza kuunda mchoro tegemezi, jedwali la wakati wa kujenga, na grafu ya ukubwa wa kifurushi katika mfumo wa mwisho. Matokeo ni katika mfumo wa faili za pdf (unaweza kuchagua kutoka svn, png) kwenye saraka ya pato/grafu.

Mifano ya amri za taswira:

  • make graph-depends jenga mti wa utegemezi
  • make <pkg>-graph-depends jenga mti wa utegemezi kwa kifurushi maalum
  • BR2_GRAPH_OUT=png make graph-build wakati wa kujenga njama na matokeo ya PNG
  • make graph-size saizi ya pakiti ya njama

Maandishi muhimu

Kuna saraka ndogo kwenye saraka ya buildroot hutumia na maandishi muhimu. Kwa mfano, kuna hati inayokagua usahihi wa maelezo ya kifurushi. Hii inaweza kuwa muhimu wakati wa kuongeza vifurushi vyako mwenyewe (nitafanya hivi baadaye). Faili utils/readme.txt ina maelezo ya hati hizi.

Wacha tujenge usambazaji wa hisa

Ni muhimu kukumbuka kuwa shughuli zote zinafanywa kwa niaba ya mtumiaji wa kawaida, sio mzizi.
Amri zote zinatekelezwa kwenye buildroot. Kifurushi cha buildroot tayari kinajumuisha seti ya usanidi wa bodi nyingi za kawaida na uboreshaji.

Wacha tuangalie orodha ya usanidi:

Buildroot - sehemu ya 1. Taarifa ya jumla, kukusanya mfumo mdogo, usanidi kupitia orodha

Badili hadi usanidi wa qemu_x86_64_defconfig

make qemu_x86_64_defconfig

Na tunaanza mkutano

make

Muundo unakamilika kwa mafanikio, angalia matokeo:

Buildroot - sehemu ya 1. Taarifa ya jumla, kukusanya mfumo mdogo, usanidi kupitia orodha

Buildroot imekusanya picha ambazo unaweza kuendesha katika Qemu na kuthibitisha kuwa zinafanya kazi.

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

Matokeo yake ni mfumo unaoendesha qemu:

Buildroot - sehemu ya 1. Taarifa ya jumla, kukusanya mfumo mdogo, usanidi kupitia orodha

Kuunda usanidi wa bodi yako mwenyewe

Kuongeza Faili za Bodi

Wacha tuangalie orodha ya usanidi:

Buildroot - sehemu ya 1. Taarifa ya jumla, kukusanya mfumo mdogo, usanidi kupitia orodha

Katika orodha tunaona pc_x86_64_efi_defconfig. Tutaunda bodi yetu kwa kuinakili kutoka kwa usanidi:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Wacha tuunde saraka ya ubao mara moja ili kuhifadhi hati zetu, ufunikaji wa mizizi na faili zingine muhimu:

mkdir board/my_x86_board

Badili hadi usanidi huu:

make my_x86_board_defconfig

Kwa hivyo, sasa usanidi wa kujenga (uliohifadhiwa katika .config katika mzizi wa saraka ya kujenga) inalingana na mashine ya lengo la urithi wa x86-64 (bios).

Wacha tunakili usanidi wa linux-kernel (muhimu baadaye):

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

Kuweka vigezo vya ujenzi kupitia KConfig

Wacha tuanze usanidi:

make menuconfig 

Dirisha la KConfig litafunguliwa. Inawezekana kusanidi na kiolesura cha picha (tengeneza nconfig, tengeneza xconfig, tengeneza gconfig):

Buildroot - sehemu ya 1. Taarifa ya jumla, kukusanya mfumo mdogo, usanidi kupitia orodha

Tunaingia sehemu ya kwanza Chaguzi za Malengo. Hapa unaweza kuchagua usanifu unaolengwa ambao ujenzi utafanywa.

Buildroot - sehemu ya 1. Taarifa ya jumla, kukusanya mfumo mdogo, usanidi kupitia orodha

Chaguzi za kujenga - kuna mipangilio mbalimbali ya kujenga hapa. Unaweza kubainisha saraka zilizo na misimbo ya chanzo, idadi ya nyuzi za ujenzi, vioo vya kupakua misimbo ya chanzo na mipangilio mingine. Wacha tuache mipangilio kwa chaguo-msingi.

Toolchain - zana za ujenzi zenyewe zimesanidiwa hapa. Soma zaidi kumhusu.

Buildroot - sehemu ya 1. Taarifa ya jumla, kukusanya mfumo mdogo, usanidi kupitia orodha

Aina ya mnyororo wa zana - aina ya mnyororo wa zana unaotumika. Hii inaweza kuwa mnyororo wa zana uliojengwa ndani ya ujenzi au wa nje (unaweza kutaja saraka na iliyojengwa tayari au url ya kupakua). Kuna chaguzi za ziada kwa usanifu tofauti. Kwa mfano, kwa mkono unaweza kuchagua tu toleo la Linaro la mnyororo wa zana wa nje.

Maktaba ya C - uteuzi wa maktaba ya C. Uendeshaji wa mfumo mzima unategemea hili. Kwa kawaida, glibc hutumiwa, ambayo inasaidia utendaji wote unaowezekana. Lakini inaweza kuwa kubwa sana kwa mfumo uliopachikwa, kwa hivyo uglibc au musl mara nyingi huchaguliwa. Tutachagua glibc (hii itahitajika baadaye ili kutumia systemd).

Vichwa vya Kernel na mfululizo wa Vichwa Maalum vya Kernel - lazima zilingane na toleo la kernel ambalo litakuwa katika mfumo uliounganishwa. Kwa vichwa vya kernel, unaweza pia kutaja njia ya tarball au hazina ya git.

GCC COMPILER VERSIONS - chagua toleo la mkusanyaji litakalotumika kujenga
Washa usaidizi wa C++ - chagua kuunda kwa usaidizi wa maktaba za C++ kwenye mfumo. Hii itakuwa na manufaa kwetu katika siku zijazo.

Chaguo za ziada za gcc - unaweza kuweka chaguzi za ziada za mkusanyaji. Hatuhitaji kwa sasa.

Usanidi wa mfumo hukuruhusu kuweka vigezo vya baadaye vya mfumo iliyoundwa:

Buildroot - sehemu ya 1. Taarifa ya jumla, kukusanya mfumo mdogo, usanidi kupitia orodha

Alama nyingi ziko wazi kutoka kwa kichwa. Wacha tuzingatie mambo yafuatayo:
Njia ya meza za watumiaji - meza na watumiaji wa kuunda (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Mfano wa faili. Mtumiaji ataundwa na msimamizi wa nenosiri, gid/uid kiotomatiki, /bin/sh shell, mtumiaji chaguo-msingi wa kikundi, mzizi wa kikundi, maoni mtumiaji wa Foo.

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

Saraka za kuwekelea za mfumo wa faili - saraka iliyowekwa juu ya shabaha-fs zilizokusanywa. Huongeza faili mpya na kuchukua nafasi ya zilizopo.

Hati maalum za kuendeshwa kabla ya kuunda picha za mfumo wa faili - Hati hutekelezwa mara moja kabla ya kukunja mfumo wa faili kuwa picha. Wacha tuache hati tupu kwa sasa.

Wacha tuende kwenye sehemu ya Kernel

Buildroot - sehemu ya 1. Taarifa ya jumla, kukusanya mfumo mdogo, usanidi kupitia orodha

Mipangilio ya Kernel imewekwa hapa. Kernel yenyewe imeundwa kupitia make linux-menuconfig.
Unaweza kuweka toleo la kernel kwa njia tofauti: chagua kutoka kwa wale wanaotolewa, ingiza toleo kwa manually, taja hifadhi au tarball iliyopangwa tayari.

Usanidi wa Kernel - njia ya usanidi wa kernel. Unaweza kuchagua usanidi chaguo-msingi wa usanifu uliochaguliwa au defocnfig kutoka kwa Linux. Chanzo cha Linux kina seti ya defconfigs kwa mifumo tofauti lengwa. Unaweza kupata moja unayohitaji kwa kuangalia moja kwa moja vyanzo hapa. Kwa mfano, kwa bodi nyeusi ya mfupa wa beagle unaweza chagua usanidi.

Sehemu ya Vifurushi vya Lengo hukuruhusu kuchagua ni vifurushi vipi vitasakinishwa kwenye mfumo unaojengwa. Tuyaache bila kubadilika kwa sasa. Tutaongeza vifurushi vyetu kwenye orodha hii baadaye.
Picha za mfumo wa faili - orodha ya picha za mfumo wa faili ambazo zitakusanywa. Ongeza picha ya iso

Buildroot - sehemu ya 1. Taarifa ya jumla, kukusanya mfumo mdogo, usanidi kupitia orodha

Bootloaders - uteuzi wa bootloaders kukusanya. Wacha tuchague isolinix

Buildroot - sehemu ya 1. Taarifa ya jumla, kukusanya mfumo mdogo, usanidi kupitia orodha

Inasanidi Systemd

Systemd inakuwa moja ya nguzo za Linux, pamoja na kernel na glibc. Kwa hivyo, nilihamisha mpangilio wake kwa kipengee tofauti.

Imesanidiwa kupitia make menuconfig, kisha Lenga vifurushi β†’ Zana za mfumo β†’ systemd. Hapa unaweza kutaja ni huduma gani za mfumo zitawekwa na kuanza wakati mfumo unapoanza.

Buildroot - sehemu ya 1. Taarifa ya jumla, kukusanya mfumo mdogo, usanidi kupitia orodha

Inahifadhi usanidi wa mfumo

Tunahifadhi usanidi huu kupitia KConfig.

Kisha uhifadhi defconfig yetu:

make savedefconfig

Usanidi wa Kernel ya Linux

Usanidi wa kernel ya Linux unaalikwa na amri ifuatayo:

make linux-menuconfig

Hebu tuongeze usaidizi kwa kadi ya video ya Virtualbox

Buildroot - sehemu ya 1. Taarifa ya jumla, kukusanya mfumo mdogo, usanidi kupitia orodha

Wacha tuongeze usaidizi wa ujumuishaji wa Virtualbox Guest

Buildroot - sehemu ya 1. Taarifa ya jumla, kukusanya mfumo mdogo, usanidi kupitia orodha

Hifadhi na uondoke. MUHIMU: usanidi utahifadhiwa katika output/build/linux-$version/config, lakini sio kwenye board/my_x86_board/linux.config

Buildroot - sehemu ya 1. Taarifa ya jumla, kukusanya mfumo mdogo, usanidi kupitia orodha

Kwa hivyo, unahitaji kunakili usanidi kwa eneo la kuhifadhi:

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

Baada ya hapo tutafanya upyaji kamili wa mfumo mzima. buildroot haijengi tena kile ambacho tayari kimejengwa, lazima ueleze kwa mikono vifurushi vya ujenzi upya. Ili usipoteze muda na mishipa, ni rahisi kujenga upya mfumo mdogo kabisa):

make clean;make

Baada ya kukamilisha ujenzi, zindua VirtualBox (iliyojaribiwa kwenye matoleo ya 5.2 na 6.0) kutoka kwa CD. Vigezo vya mfumo:

Buildroot - sehemu ya 1. Taarifa ya jumla, kukusanya mfumo mdogo, usanidi kupitia orodha

Kukimbia kutoka kwa iso iliyokusanyika:

Buildroot - sehemu ya 1. Taarifa ya jumla, kukusanya mfumo mdogo, usanidi kupitia orodha

Orodha ya nyenzo zinazotumiwa

  1. Mwongozo wa Buidroot

Chanzo: mapenzi.com

Kuongeza maoni