Buildroot - gawo 2. Kupanga kasinthidwe ka bolodi lanu; pogwiritsa ntchito mtengo wakunja, rootfs-overlay, post-build scripts

Mu gawo ili ndikuyang'ana zina mwazosankha zomwe ndimafunikira. Uwu si mndandanda wathunthu wa zomwe buildroot amapereka, koma zimagwira ntchito ndipo sizifuna kulowererapo pamafayilo a buildroot palokha.

Kugwiritsa ntchito EXTERNAL limagwirira kuti musinthe mwamakonda

Munkhani yapita Tidayang'ana chitsanzo chosavuta chowonjezera masinthidwe anu powonjezera defconfig ya bolodi ndi mafayilo ofunikira mwachindunji ku bukhu la Buildroot.

Koma njira iyi si yabwino kwambiri, makamaka pokonzanso buildroot. Pali njira yothetsera vutoli mtengo wakunja. Chofunikira chake ndikuti mutha kusunga bolodi, ma configs, mapaketi ndi zolemba zina m'ndandanda ina (mwachitsanzo, ndimagwiritsa ntchito zikwatu kuti mugwiritse ntchito zigamba pamaphukusi, zambiri mugawo lina) ndipo buildroot yokha iwawonjezera iwo omwe ali mkati. chikwatu chake.

Zindikirani: mutha kuphimba mitengo ingapo nthawi imodzi, pali chitsanzo mu bukhu la buildroot

Tiyeni tipange chikwatu my_tree, chomwe chili pafupi ndi bukhu la buildroot ndikusintha kasinthidwe kwathu pamenepo. Zotulutsa ziyenera kukhala motere:

[alexey@alexey-pc my_tree]$ tree
.
├── board
│   └── my_x86_board
│       ├── bef_cr_fs_img.sh
│       ├── linux.config
│       ├── rootfs_overlay
│       └── users.txt
├── Config.in
├── configs
│   └── my_x86_board_defconfig
├── external.desc
├── external.mk
├── package
└── patches

6 directories, 7 files

Monga mukuonera, kawirikawiri kamangidwe kameneka kakubwerezanso mapangidwe a buildroot.

Directory bolodi ili ndi mafayilo okhudzana ndi bolodi lililonse kwa ife:

  • bef_cr_fs_img.sh ndi script yomwe idzaperekedwa pambuyo pomanga dongosolo la fayilo, koma musanayiike muzithunzi. Tidzagwiritsa ntchito mtsogolo
  • linux.config - kasinthidwe ka kernel
  • rootfs_overlay - chikwatu kuti chiphimbe pamwamba pa fayilo yomwe mukufuna
  • users.txt - fayilo yofotokozera ogwiritsa ntchito kuti apangidwe

Directory zopindika ili ndi defconfig ya matabwa athu. Ife tiri ndi mmodzi yekha.

phukusi - catalog ndi phukusi lathu. Poyambirira, buildroot imakhala ndi mafotokozedwe ndi malamulo opangira ma phukusi ochepa. Pambuyo pake tidzawonjezera woyang'anira zenera la icewm ndi Slim graphical login manager pano.
Mapazi - imakupatsani mwayi wosunga zigamba zanu pamapaketi osiyanasiyana. Zambiri mu gawo lina pansipa.
Tsopano tifunika kuwonjezera mafayilo ofotokozera zamtengo wathu wakunja. Pali mafayilo atatu omwe ali ndi izi: external.desc, Config.in, external.mk.

zakunja.desc lili ndi kufotokoza kwenikweni:

[alexey@alexey-pc my_tree]$ cat external.desc 
name: my_tree
desc: My simple external-tree for article

Mzere woyamba ndi mutu. M'tsogolo buildroot pangani variable $(BR2_EXTERNAL_MY_TREE_PATH), zomwe ziyenera kugwiritsidwa ntchito pokonzekera msonkhano. Mwachitsanzo, njira yopita ku fayilo ya wosuta ikhoza kukhazikitsidwa motere:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txt

Mzere wachiwiri ndi wofotokozera mwachidule, wowerengeka ndi anthu.

Config.in, kunja.mk - mafayilo ofotokozera mapaketi owonjezera. Ngati simuwonjezera phukusi lanu, ndiye kuti mafayilowa akhoza kusiyidwa opanda kanthu. Pakadali pano, ndi zomwe tingachite.
Tsopano tili ndi mtengo wathu wakunja wokonzeka, womwe uli ndi defconfig ya bolodi yathu ndi mafayilo omwe amafunikira. Tiyeni tipite ku bukhu la buildroot ndikufotokozerani kugwiritsa ntchito mtengo wakunja:

[alexey@alexey-pc buildroot]$ make BR2_EXTERNAL=../my_tree/ my_x86_board_defconfig
#
# configuration written to /home/alexey/dev/article/ramdisk/buildroot/.config
#
[alexey@alexey-pc buildroot]$ make menuconfig

Mu lamulo loyamba timagwiritsa ntchito mtsutso BR2_EXTERNAL=../my_tree/, kusonyeza kugwiritsa ntchito mtengo wakunja Mutha kutchula mitengo ingapo yakunja kuti mugwiritse ntchito nthawi imodzi.Panthawiyi, muyenera kuchita izi kamodzi kokha, kenako fayilo yotulutsa/.br-external.mk imapangidwa kuti imasunga zambiri za mtengo wakunja womwe wagwiritsidwa ntchito:

[alexey@alexey-pc buildroot]$ cat output/.br-external.mk 
#
# Automatically generated file; DO NOT EDIT.
#

BR2_EXTERNAL ?= /home/alexey/dev/article/ramdisk/my_small_linux/my_tree
BR2_EXTERNAL_NAMES = 
BR2_EXTERNAL_DIRS = 
BR2_EXTERNAL_MKS = 

BR2_EXTERNAL_NAMES += my_tree
BR2_EXTERNAL_DIRS += /home/alexey/dev/article/ramdisk/my_small_linux/my_tree
BR2_EXTERNAL_MKS += /home/alexey/dev/article/ramdisk/my_small_linux/my_tree/external.mk
export BR2_EXTERNAL_my_tree_PATH = /home/alexey/dev/article/ramdisk/my_small_linux/my_tree
export BR2_EXTERNAL_my_tree_DESC = My simple external-tree for article

Zofunika! Njira zomwe zili mufayiloyi zidzakhala zenizeni!

Chosankha chakunja chawonekera pamenyu:

Buildroot - gawo 2. Kupanga kasinthidwe ka bolodi lanu; pogwiritsa ntchito mtengo wakunja, rootfs-overlay, post-build scripts

submenu iyi ikhala ndi mapaketi athu kuchokera kumtengo wathu wakunja. Gawoli lilibe kanthu pakadali pano.

Tsopano ndikofunikira kwambiri kuti tilembenso njira zofunika kugwiritsa ntchito mtengo wakunja.

Chonde dziwani kuti mu Pangani zosankha → Malo kuti musungire gawo la buildroot config, padzakhala njira yokwanira yosungira defconfig. Amapangidwa panthawi yofotokozera kugwiritsa ntchito extgernal_tree.

Tidzakonzanso njira zomwe zili mu gawo la System configuration. Pa tebulo la ogwiritsa ntchito opangidwa:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txt

Mu gawo la Kernel, sinthani njira yosinthira kernel:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/linux.config

Tsopano mafayilo athu ochokera kumtengo wathu wakunja adzagwiritsidwa ntchito panthawi ya msonkhano. Mukasamukira ku bukhu lina kapena kukonzanso buildroot, tidzakhala ndi zovuta zochepa.

Kuwonjezera mizu fs pamwamba:

Makinawa amakulolani kuti muwonjezere / kusintha mafayilo mu fayilo yomwe mukufuna.
Ngati fayiloyo ili muzu fs overlay, koma osati chandamale, ndiye kuti iwonjezedwa
Ngati fayilo ili muzu fs overlay ndi chandamale, ndiye kuti idzasinthidwa.
Choyamba, tiyeni tiyike njira yopita ku root fs overlay dir. Izi zachitika mu dongosolo kasinthidwe → Mizu filesystem overlay akalozera gawo gawo:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Tsopano tiyeni kulenga awiri owona.

[alexey@alexey-pc my_small_linux]$ cat my_tree/board/my_x86_board/rootfs_overlay/etc/hosts 
127.0.0.1   localhost
127.0.1.1   my_small_linux
8.8.8.8     google-public-dns-a.google.com.
[alexey@alexey-pc my_small_linux]$ cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt 
This is new file from overlay

Fayilo yoyamba (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) idzalowa m'malo /etc/hosts fayilo pamakina omalizidwa. Fayilo yachiwiri (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) idzawonjezedwa.

Timasonkhanitsa ndikuwunika:

Buildroot - gawo 2. Kupanga kasinthidwe ka bolodi lanu; pogwiritsa ntchito mtengo wakunja, rootfs-overlay, post-build scripts

Kukonzekera zolembera makonda pamagawo osiyanasiyana a msonkhano wadongosolo

Nthawi zambiri mumayenera kugwira ntchito mkati mwa fayilo yomwe mukufuna kuyika isanapake zithunzi.

Izi zitha kuchitika mu gawo la kasinthidwe ka System:

Buildroot - gawo 2. Kupanga kasinthidwe ka bolodi lanu; pogwiritsa ntchito mtengo wakunja, rootfs-overlay, post-build scripts

Zolemba ziwiri zoyamba zimachitidwa pambuyo poti fayilo yomwe chandamale idamangidwa, koma isanapakidwe kukhala zithunzi. Kusiyana kwake ndikuti fakeroot script imachitidwa munkhani ya fakeroot, yomwe imatengera ntchito ngati mizu.

Zolemba zomaliza zimachitidwa pambuyo popanga zithunzi zamakina. Mukhoza kuchita zina mwa izo, mwachitsanzo, kukopera mafayilo ofunikira ku seva ya NFS kapena kupanga chithunzi cha firmware ya chipangizo chanu.

Mwachitsanzo, ndipanga script yomwe idzalembe mtunduwo ndikumanga tsiku kuti /etc/.
Choyamba ndikuwonetsa njira yopita ku fayiloyi mumtengo wanga wakunja:

Buildroot - gawo 2. Kupanga kasinthidwe ka bolodi lanu; pogwiritsa ntchito mtengo wakunja, rootfs-overlay, post-build scripts

Ndipo tsopano script yokha:

[alexey@alexey-pc buildroot]$ cat ../my_tree/board/my_x86_board/bef_cr_fs_img.sh 
#!/bin/sh
echo "my small linux 1.0 pre alpha" > output/target/etc/mysmalllinux-release
date >> output/target/etc/mysmalllinux-release

Mukatha kusonkhana, mutha kuwona fayiloyi padongosolo.

M'malo mwake, script imatha kukhala yayikulu. Chifukwa chake, mu polojekiti yeniyeni ndinatenga njira yapamwamba kwambiri:

  1. Ndidapanga chikwatu (my_tree/board_my_x86_board/inside_fakeroot_scripts) momwe muli zolembedwa zomwe ziyenera kuchitidwa, ndi manambala achinsinsi. Mwachitsanzo, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Ndinalemba script (my_tree/board_my_x86_board/run_inside_fakeroot.sh) yomwe imadutsa mu bukhuli ndikulemba motsatizana zolemba zomwe zili mmenemo.
  3. Tatchulani izi m'makonzedwe a board mu System configuration -> Zolemba mwamakonda kuti ziziyenda mkati mwa fakeroot chilengedwe ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh)

Source: www.habr.com

Kuwonjezera ndemanga