Hōʻike
Ma kēia pūʻulu ʻatikala, makemake wau e nānā i ka buildroot distribution build system a kaʻana like i koʻu ʻike i ka hana maʻamau. E loaʻa kahi ʻike kūpono i ka hana ʻana i kahi OS liʻiliʻi me kahi kiʻi kiʻi a me nā hana liʻiliʻi.
ʻO ka mea mua, ʻaʻole pono ʻoe e huikau i ka ʻōnaehana kūkulu a me ka hāʻawi ʻana. Hiki iā Buildroot ke kūkulu i kahi ʻōnaehana mai kahi pūʻulu o nā pūʻolo i hāʻawi ʻia iā ia. Kūkulu ʻia ʻo Buildroot ma nā makefiles a no laila loaʻa iā ia nā mana hana maʻamau. E hoʻololi i kahi pūʻolo me kahi mana ʻē aʻe, hoʻohui i kāu pūʻolo ponoʻī, hoʻololi i nā lula no ke kūkulu ʻana i kahi pūʻolo, hoʻopilikino i ka ʻōnaehana faila ma hope o ka hoʻokomo ʻana i nā pūʻolo āpau? Hiki iā buildroot ke hana i kēia mau mea a pau.
Ma Rusia, hoʻohana ʻia ka buildroot, akā i koʻu manaʻo he liʻiliʻi ka ʻike ʻōlelo Lūkini no nā poʻe hoʻomaka.
ʻO ka pahuhopu o ka hana, ʻo ia ka hōʻuluʻulu ʻana i kahi pahu hoʻoili me ka hoʻoiho ola, icewm interface a me ka polokalamu kele pūnaewele. ʻO ka pahu pahu pahu pahu pahu pahu.
No ke aha e kūkulu ai i kāu mahele ponoʻī? Hoʻohana pinepine ʻia nā hana liʻiliʻi me nā kumuwaiwai liʻiliʻi. ʻOi aku ka pinepine i ka automation pono ʻoe e hana i ka firmware. ʻO ka hoʻololi ʻana i kahi puʻupuʻu kumu nui ma o ka hoʻomaʻemaʻe ʻana i nā pūʻolo pono ʻole a hoʻololi iā ia i firmware ʻoi aku ka ikaika ma mua o ke kūkulu ʻana i kahi mahele hou. He mau palena nō ka hoʻohana ʻana iā Gentoo.
He ikaika loa ka ʻōnaehana Buildroot, akā ʻaʻole ia e hana i kekahi mea no ʻoe. Hiki iā ia ke ho'ā a hoʻokaʻawale i ke kaʻina hana hui.
ʻAʻole noʻonoʻo ʻia a hoʻohālikelike ʻia nā ʻōnaehana kūkulu hou (yocto, open build system a me nā mea ʻē aʻe).
Ma hea e loaʻa ai a pehea e hoʻomaka ai
Paena pūnaewele papahana -
Hoʻohana ʻo Buildroot i nā defconfigs no ka papa kuhikuhi o ka hale. ʻO Defconfig kahi faila hoʻonohonoho e mālama i nā koho wale nō i loaʻa ʻole nā waiwai paʻamau. Na ia e hoʻoholo i ka mea e hōʻiliʻili ʻia a pehea. I kēia hihia, hiki iā ʻoe ke hoʻonohonoho kaʻawale i nā configs o busybox, linux-kernel, uglibc, u-boot a me barebox bootloaders, akā e nakinaki ʻia lākou āpau i ka papa kuhikuhi.
Ma hope o ka wehe ʻana i ka waihona i hoʻoiho ʻia a i ʻole cloning mai git, loaʻa iā mākou kahi buildroot mākaukau e hoʻohana. Hiki iā ʻoe ke heluhelu hou aʻe e pili ana i ka hoʻolālā papa kuhikuhi ma ka manual; E haʻi wau iā ʻoe e pili ana i nā mea nui loa:
papa - he papa kuhikuhi me nā faila kikoʻī i kēlā me kēia papa. Hiki i kēia mau palapala no ka hoʻokumu ʻana i nā kiʻi ʻōnaehana (iso, sdcart, cpio a me nā mea ʻē aʻe), kahi papa kuhikuhi overlay, kernel config, etc.
hoʻonohonoho - ka defconfig maoli o ka papa. ʻO Defconfig kahi hoʻonohonoho papa piha ʻole. Mālama ʻo ia i nā ʻāpana ʻokoʻa mai nā hoʻonohonoho paʻamau
dl — papa kuhikuhi me nā code kumu i hoʻoiho ʻia/faila no ka hui ʻana
hoʻopuka / pahu hopu - ka ʻōnaehana faila i hui ʻia o ka OS i loaʻa. A laila, hana ʻia nā kiʻi mai ia mea no ka hoʻoiho / hoʻouka ʻana
hoʻopuka / hoʻokipa - nā pono hoʻokipa no ka hui ʻana
hoʻopuka / kūkulu - nā pūʻolo i hui ʻia
Hoʻonohonoho ʻia ka hui ma o KConfig. Hoʻohana ʻia ka ʻōnaehana like e kūkulu i ka kernel Linux. Ka papa inoa o nā kauoha i hoʻohana pinepine ʻia (e hoʻokō i ka papa kuhikuhi buildroot):
- hana menuconfig - kāhea i ka hoʻonohonoho kūkulu. Hiki iā ʻoe ke hoʻohana i ka interface kiʻi (make nconfig, hana xconfig, hana gconfig)
- hana linux-menuconfig - kāhea i ka hoʻonohonoho kernel.
- e hoʻomaʻemaʻe - e hoʻomaʻemaʻe i nā hopena kūkulu (nā mea a pau i mālama ʻia i loko o nā huahana)
- hana - kūkulu i ʻōnaehana. ʻAʻole kēia e hoʻohui hou i nā kaʻina hana i hui mua ʻia.
- hana defconfig_name - hoʻololi i ka hoʻonohonoho i kahi defconfig kikoʻī
- hana papa inoa-defconfigs - hōʻike i kahi papa inoa o nā defconfigs
- hana kumu - hoʻoiho wale i nā faila hoʻonohonoho, me ka ʻole o ke kūkulu ʻana.
- hana kōkua - papa inoa i nā kauoha hiki
Nā memo koʻikoʻi a me nā ʻōlelo kōkua
ʻAʻole kūkulu hou ʻo Buildroot i nā pūʻolo i kūkulu ʻia! No laila, hiki ke kū mai kahi kūlana kahi e koi ʻia ai kahi hui hou.
Hiki iā ʻoe ke kūkulu hou i kahi pūʻolo kaʻawale me ke kauoha hana i ka inoa inoa-kūkulu hou. No ka laʻana, hiki iā ʻoe ke kūkulu hou i ka kernel Linux:
make linux-rebuild
Mālama ʻo Buildroot i ka mokuʻāina o kekahi pūʻolo ma ka hana ʻana i nā faila .stamp ma ka papa kuhikuhi puka / kūkulu/$packagename:
No laila, hiki iā ʻoe ke kūkulu hou i ka root-fs a me nā kiʻi me ka ʻole o ke kūkulu hou ʻana i nā pūʻolo:
rm output/build/host-gcc-final-*/.stamp_host_installed;rm -rf output/target;find output/ -name ".stamp_target_installed" |xargs rm -rf ; make
Nā mea hoʻololi pono
Loaʻa iā buildroot kahi hoʻonohonoho o nā mea hoʻololi no ka hoʻonohonoho maʻalahi
- $TOPDIR - papa kuhikuhi buildroot
- $BASEDIR - papa kuhikuhi OUTPUT
- $HOST_DIR, $STAGING_DIR, $TARGET_DIR — host fs, staging fs, target fs kūkulu papa kuhikuhi.
- $BUILD_DIR - papa kuhikuhi me nā pūʻolo i wehe ʻole ʻia a kūkulu ʻia
Hōʻikeʻike
Loaʻa iā buildroot kahi hiʻohiʻona hiʻohiʻona. Hiki iā ʻoe ke kūkulu i ke kiʻi hilinaʻi, ka pakuhi manawa kūkulu, a me ka pakuhi o nā nui pūʻolo i ka ʻōnaehana hope. Aia nā hopena ma ke ʻano o nā faila pdf (hiki iā ʻoe ke koho mai svn,png) i ka papa kuhikuhi puka / kiʻi.
Nā laʻana o nā kauoha ʻike maka:
make graph-depends
kūkulu lāʻau hilinaʻimake <pkg>-graph-depends
kūkulu i lāʻau hilinaʻi no kahi pūʻolo kikoʻīBR2_GRAPH_OUT=png make graph-build
hoʻolālā manawa kūkulu me ka hoʻopuka PNGmake graph-size
ka nui o ka ʻeke
Nā palapala kūpono
Aia kahi papa kuhikuhi ma ka papa kuhikuhi buildroot mea hoohana me nā palapala pono. No ka laʻana, aia kahi palapala e nānā i ka pololei o nā wehewehe ʻana o ka pūʻolo. Pono paha kēia i ka hoʻohui ʻana i kāu mau pūʻolo ponoʻī (e hana wau i kēia ma hope). Aia i loko o ka faila utils/readme.txt kahi wehewehe o kēia mau palapala.
E kūkulu kākou i ka puʻunaue waiwai
He mea nui e hoʻomanaʻo e hana ʻia nā hana āpau ma ka inoa o ka mea hoʻohana maʻamau, ʻaʻole ke kumu.
Hoʻokō ʻia nā kauoha a pau ma ka buildroot. Aia ka pūʻolo buildroot i kahi hoʻonohonoho hoʻonohonoho no nā papa maʻamau a me ka virtualization.
E nānā kākou i ka papa inoa o nā hoʻonohonoho:
E hoʻololi i ka qemu_x86_64_defconfig config
make qemu_x86_64_defconfig
A hoʻomaka mākou i ka hui
make
Hoʻopau maikaʻi ke kūkulu ʻana, e nānā i nā hopena:
Ua hōʻuluʻulu ʻo Buildroot i nā kiʻi hiki iā ʻoe ke holo ma Qemu a hōʻoia i ka hana.
qemu-system-x86_64 -kernel output/images/bzImage -hda output/images/rootfs.ext2 -append "root=/dev/sda rw" -s -S
ʻO ka hopena he ʻōnaehana e holo ana ma qemu:
Ke hana ʻana i kāu hoʻonohonoho papa ponoʻī
Hoʻohui i nā faila papa
E nānā kākou i ka papa inoa o nā hoʻonohonoho:
Ma ka papa inoa ʻike mākou i ka pc_x86_64_efi_defconfig. E hana mākou i kā mākou papa ponoʻī ma ke kope ʻana iā ia mai ka hoʻonohonoho:
cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig
E hana koke i kahi papa kuhikuhi papa e mālama i kā mākou mau palapala, rootfs-overlay a me nā faila pono ʻē aʻe:
mkdir board/my_x86_board
E hoʻololi i kēia defconfig:
make my_x86_board_defconfig
No laila, i kēia manawa ua pili ka build config (i mālama ʻia ma .config i ke kumu o ka papa kuhikuhi buildroot) me ka mīkini pahu pahu pahu x86-64 legacy(bios).
E kope i ka hoʻonohonoho linux-kernel (pono ma hope):
cp board/pc/linux.config board/my_x86_board/
Hoʻonohonoho i nā ʻāpana kūkulu ma o KConfig
E hoʻomaka kākou i ka hoʻonohonoho:
make menuconfig
E wehe ka puka makani KConfig. Hiki ke hoʻonohonoho me kahi kiʻi kiʻi (hana nconfig, hana xconfig, hana gconfig):
Hoʻokomo mākou i ka ʻāpana mua Target Options. Maʻaneʻi hiki iāʻoe ke koho i ka hoʻolālā hoʻolālā e hoʻokōʻia ai ke kūkulu.
Nā koho kūkulu - aia nā hoʻonohonoho kūkulu like ʻole ma aneʻi. Hiki iā ʻoe ke kuhikuhi i nā papa kuhikuhi me nā code kumu, ka helu o nā kaula kūkulu, nā aniani no ka hoʻoiho ʻana i nā code kumu a me nā hoʻonohonoho ʻē aʻe. E waiho mākou i nā hoʻonohonoho ma ka paʻamau.
Toolchain - ua hoʻonohonoho pono ʻia nā mea hana kūkulu ma aneʻi. E heluhelu hou e pili ana iā ia.
ʻAno mea hana - ke ʻano o ke kaulahao i hoʻohana ʻia. Hiki ke lilo i mea hana i kūkulu ʻia i loko o buildroot a i waho paha (hiki iā ʻoe ke kuhikuhi i ka papa kuhikuhi me ka mea i kūkulu ʻia a i ʻole ka url no ka hoʻoiho ʻana). Loaʻa nā koho ʻē aʻe no nā hoʻolālā like ʻole. No ka laʻana, no ka lima hiki iā ʻoe ke koho maʻalahi i ka mana Linaro o ka mea hana waho.
C hale waihona puke - koho o ka waihona C. ʻO ka hana o ka ʻōnaehana holoʻokoʻa e pili ana i kēia. ʻO ka maʻamau, hoʻohana ʻia ka glibc, e kākoʻo ana i nā hana āpau. Akā ʻoi aku paha ia no kahi ʻōnaehana i hoʻopili ʻia, no laila koho pinepine ʻia ka uglibc a i ʻole musl. E koho mākou i ka glibc (e koi ʻia kēia ma hope e hoʻohana i ka systemd).
Kernel Headers a Custom Kernel Headers series - pono e hoʻohālikelike i ka mana o ka kernel i loko o ka ʻōnaehana hui. No nā poʻomanaʻo kernel, hiki iā ʻoe ke kuhikuhi i ke ala i ka tarball a i ʻole git repository.
GCC COMPILER VERSIONS - koho i ka mana compiler e hoʻohana ʻia no ke kūkulu ʻana
E ho'ā i ke kākoʻo C++ - koho e kūkulu me ke kākoʻo no nā hale waihona puke C++ i ka ʻōnaehana. He mea pono kēia iā mākou i ka wā e hiki mai ana.
Nā koho gcc hou - hiki iā ʻoe ke hoʻonohonoho i nā koho compiler hou aʻe. ʻAʻole pono mākou i kēia manawa.
ʻAe ka hoʻonohonoho ʻōnaehana iā ʻoe e hoʻonohonoho i nā palena o ka ʻōnaehana i hana ʻia:
ʻO ka hapa nui o nā helu i maopopo mai ke poʻo. E nānā kākou i kēia mau mea:
Ala i nā papa hoʻohana - papa me nā mea hoʻohana e hana ʻia (
waihona laʻana. E hana ʻia ka mea hoʻohana me ka admin password, gid/uid aunoa, /bin/sh shell, mea hoʻohana pūʻulu paʻamau, kumu lālā lālā, ʻōlelo Foo mea hoʻohana
[alexey@alexey-pc buildroot ]$ cat board/my_x86_board/users.txt
user -1 user -1 =admin /home/user /bin/sh root Foo user
ʻO nā papa kuhikuhi waihona waihona kumu - i uhi ʻia ka papa kuhikuhi ma luna o ka target-fs i hui ʻia. Hoʻohui i nā faila hou a pani i nā faila i loaʻa.
E holo nā palapala maʻamau ma mua o ka hana ʻana i nā kiʻi ʻōnaehana waihona - Hoʻokō koke ʻia nā palapala ma mua o ka pelu ʻana i ka ʻōnaehana waihona i nā kiʻi. E waiho kā mākou i ka palapala i kēia manawa.
E hele kāua i ka ʻāpana Kernel
Hoʻonohonoho ʻia nā hoʻonohonoho kernel maanei. Hoʻonohonoho ʻia ka kernel ponoʻī ma o make linux-menuconfig.
Hiki iā ʻoe ke hoʻonohonoho i ka mana kernel ma nā ʻano like ʻole: koho mai nā mea i hāʻawi ʻia, e hoʻokomo i ka mana me ka lima, e kuhikuhi i kahi waihona a i ʻole kahi tarball i mākaukau.
ʻO ka hoʻonohonoho kernel — ala i ka kernel config. Hiki iā ʻoe ke koho i ka hoʻonohonoho paʻamau no ka hoʻolālā i koho ʻia a i ʻole defocnfig mai Linux. Aia i loko o ka punawai Linux kahi hoʻonohonoho defconfigs no nā ʻōnaehana pahuhopu like ʻole. Hiki iā ʻoe ke loaʻa ka mea āu e pono ai
ʻO ka ʻāpana ʻo Target pūʻolo e ʻae iā ʻoe e koho i nā pūʻolo e hoʻokomo ʻia ma ka ʻōnaehana i kūkulu ʻia. E waiho no keia manawa. E hoʻohui mākou i kā mākou pūʻolo i kēia papa inoa ma hope.
Nā kiʻi waihona waihona - he papa inoa o nā kiʻi ʻōnaehana waihona e hōʻiliʻili ʻia. Hoʻohui i kahi kiʻi iso
Bootloaders - koho i nā bootloaders e hōʻiliʻili. E koho kākou i ka isolinix
Ke hoʻonohonoho nei i ka Systemd
Ke lilo nei ʻo Systemd i hoʻokahi o nā pou o Linux, me ka kernel a me ka glibc. No laila, ua hoʻoneʻe au i kona hoʻonohonoho ʻana i kahi mea ʻokoʻa.
Hoʻonohonoho ʻia ma o make menuconfig, a laila ʻo nā pahu Target → System tools → systemd. Maanei hiki iā ʻoe ke kuhikuhi i nā lawelawe systemd e hoʻokomo ʻia a hoʻomaka i ka wā e hoʻomaka ai ka ʻōnaehana.
Mālama i ka hoʻonohonoho ʻōnaehana
Mālama mākou i kēia config ma o KConfig.
A laila mālama i kā mākou defconfig:
make savedefconfig
Linux Kernel Configuration
Hoʻokomo ʻia ka hoʻonohonoho kernel Linux me kēia kauoha:
make linux-menuconfig
E hoʻohui i ke kākoʻo no ke kāleka wikiō Virtualbox
E hoʻohui i ke kākoʻo hoʻohui Virtualbox Guest
E mālama a puka i waho. IMPORTANT: e mālama ʻia ka hoʻonohonoho ʻana ma ka hoʻopuka/build/linux-$version/config, akā ʻaʻole ma ka papa/my_x86_board/linux.config
No laila, pono ʻoe e kope lima i ka config i kahi wahi mālama:
cp output/build/linux-4.19.25/.config board/my_x86_board/linux.config
Ma hope o kēlā, e hana mākou i kahi hui hou o ka ʻōnaehana holoʻokoʻa. ʻAʻole kūkulu hou ʻo buildroot i nā mea i kūkulu ʻia, pono ʻoe e kuhikuhi lima i nā pūʻolo no ke kūkulu hou ʻana. I mea e pau ʻole ai ka manawa a me nā aʻalolo, ʻoi aku ka maʻalahi o ke kūkulu hou ʻana i kahi ʻōnaehana liʻiliʻi holoʻokoʻa):
make clean;make
I ka pau ʻana o ke kūkulu ʻana, e hoʻomaka i ka VirtualBox (i hoʻāʻo ʻia ma nā mana 5.2 a me 6.0) e hoʻomaka ana mai ka CD. Nā ʻāpana ʻōnaehana:
Hoʻomaka mai ka iso i hui ʻia:
Ka papa inoa o nā mea i hoʻohana ʻia
- Buildroot manual
Source: www.habr.com