Buildroot - māhele 1. ʻIke nui, hoʻohui i kahi ʻōnaehana liʻiliʻi, hoʻonohonoho ma o ka papa kuhikuhi

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 - buildroot.org. Maanei hiki iā ʻoe ke hoʻoiho i ka mana o kēia manawa a heluhelu i ka manual. Ma laila hiki iā ʻoe ke hoʻokaʻaʻike i ke kaiāulu, aia kahi tracker bug, mail-lists a me kahi ala irc.

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:

Buildroot - māhele 1. ʻIke nui, hoʻohui i kahi ʻōnaehana liʻiliʻi, hoʻonohonoho ma o ka papa kuhikuhi

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ʻi
  • make <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 PNG
  • make 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:

Buildroot - māhele 1. ʻIke nui, hoʻohui i kahi ʻōnaehana liʻiliʻi, hoʻonohonoho ma o ka papa kuhikuhi

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:

Buildroot - māhele 1. ʻIke nui, hoʻohui i kahi ʻōnaehana liʻiliʻi, hoʻonohonoho ma o ka papa kuhikuhi

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:

Buildroot - māhele 1. ʻIke nui, hoʻohui i kahi ʻōnaehana liʻiliʻi, hoʻonohonoho ma o ka papa kuhikuhi

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:

Buildroot - māhele 1. ʻIke nui, hoʻohui i kahi ʻōnaehana liʻiliʻi, hoʻonohonoho ma o ka papa kuhikuhi

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):

Buildroot - māhele 1. ʻIke nui, hoʻohui i kahi ʻōnaehana liʻiliʻi, hoʻonohonoho ma o ka papa kuhikuhi

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.

Buildroot - māhele 1. ʻIke nui, hoʻohui i kahi ʻōnaehana liʻiliʻi, hoʻonohonoho ma o ka papa kuhikuhi

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.

Buildroot - māhele 1. ʻIke nui, hoʻohui i kahi ʻōnaehana liʻiliʻi, hoʻonohonoho ma o ka papa kuhikuhi

ʻ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:

Buildroot - māhele 1. ʻIke nui, hoʻohui i kahi ʻōnaehana liʻiliʻi, hoʻonohonoho ma o ka papa kuhikuhi

ʻ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 (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

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

Buildroot - māhele 1. ʻIke nui, hoʻohui i kahi ʻōnaehana liʻiliʻi, hoʻonohonoho ma o ka papa kuhikuhi

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 ma ka nana pono ana i na kumu maanei. No ka laʻana, no ka papa ʻeleʻele iwi beagle hiki iā ʻoe koho config.

ʻ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

Buildroot - māhele 1. ʻIke nui, hoʻohui i kahi ʻōnaehana liʻiliʻi, hoʻonohonoho ma o ka papa kuhikuhi

Bootloaders - koho i nā bootloaders e hōʻiliʻili. E koho kākou i ka isolinix

Buildroot - māhele 1. ʻIke nui, hoʻohui i kahi ʻōnaehana liʻiliʻi, hoʻonohonoho ma o ka papa kuhikuhi

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.

Buildroot - māhele 1. ʻIke nui, hoʻohui i kahi ʻōnaehana liʻiliʻi, hoʻonohonoho ma o ka papa kuhikuhi

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

Buildroot - māhele 1. ʻIke nui, hoʻohui i kahi ʻōnaehana liʻiliʻi, hoʻonohonoho ma o ka papa kuhikuhi

E hoʻohui i ke kākoʻo hoʻohui Virtualbox Guest

Buildroot - māhele 1. ʻIke nui, hoʻohui i kahi ʻōnaehana liʻiliʻi, hoʻonohonoho ma o ka papa kuhikuhi

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

Buildroot - māhele 1. ʻIke nui, hoʻohui i kahi ʻōnaehana liʻiliʻi, hoʻonohonoho ma o ka papa kuhikuhi

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:

Buildroot - māhele 1. ʻIke nui, hoʻohui i kahi ʻōnaehana liʻiliʻi, hoʻonohonoho ma o ka papa kuhikuhi

Hoʻomaka mai ka iso i hui ʻia:

Buildroot - māhele 1. ʻIke nui, hoʻohui i kahi ʻōnaehana liʻiliʻi, hoʻonohonoho ma o ka papa kuhikuhi

Ka papa inoa o nā mea i hoʻohana ʻia

  1. Buildroot manual

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka