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 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:
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 utegemezimake <pkg>-graph-depends
jenga mti wa utegemezi kwa kifurushi maalumBR2_GRAPH_OUT=png make graph-build
wakati wa kujenga njama na matokeo ya PNGmake 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:
Badili hadi usanidi wa qemu_x86_64_defconfig
make qemu_x86_64_defconfig
Na tunaanza mkutano
make
Muundo unakamilika kwa mafanikio, angalia matokeo:
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:
Kuunda usanidi wa bodi yako mwenyewe
Kuongeza Faili za Bodi
Wacha tuangalie orodha ya usanidi:
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):
Tunaingia sehemu ya kwanza Chaguzi za Malengo. Hapa unaweza kuchagua usanifu unaolengwa ambao ujenzi utafanywa.
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.
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:
Alama nyingi ziko wazi kutoka kwa kichwa. Wacha tuzingatie mambo yafuatayo:
Njia ya meza za watumiaji - meza na watumiaji wa kuunda (
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
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
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
Bootloaders - uteuzi wa bootloaders kukusanya. Wacha tuchague isolinix
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.
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
Wacha tuongeze usaidizi wa ujumuishaji wa Virtualbox Guest
Hifadhi na uondoke. MUHIMU: usanidi utahifadhiwa katika output/build/linux-$version/config, lakini sio kwenye board/my_x86_board/linux.config
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:
Kukimbia kutoka kwa iso iliyokusanyika:
Orodha ya nyenzo zinazotumiwa
- Mwongozo wa Buidroot
Chanzo: mapenzi.com