Buildroot - sehemu ya 2. Kuunda usanidi wa bodi yako; kutumia mti wa nje, rootfs-overlay, hati za baada ya kujenga

Katika sehemu hii ninaangalia baadhi ya chaguzi za ubinafsishaji ambazo nilihitaji. Hii sio orodha kamili ya kile buildroot inatoa, lakini ni kazi kabisa na hauitaji uingiliaji kati katika faili za buildroot yenyewe.

Kwa kutumia utaratibu wa NJE kwa ajili ya kubinafsisha

Katika makala iliyopita Tuliangalia mfano rahisi wa kuongeza usanidi wako mwenyewe kwa kuongeza defconfig ya bodi na faili muhimu moja kwa moja kwenye saraka ya Buildroot.

Lakini njia hii si rahisi sana, hasa wakati uppdatering buildroot. Kuna utaratibu wa kutatua tatizo hili mti wa nje. Kiini chake ni kwamba unaweza kuhifadhi bodi, usanidi, vifurushi na saraka zingine kwenye saraka tofauti (kwa mfano, mimi hutumia saraka ya viraka kutumia viraka kwenye vifurushi, maelezo zaidi katika sehemu tofauti) na buildroot yenyewe itawaongeza kwa wale walio ndani. saraka yake.

Kumbuka: unaweza kufunika miti kadhaa ya nje mara moja, kuna mfano katika mwongozo wa ujenzi

Wacha tuunde saraka my_tree, iliyo karibu na saraka ya ujenzi na uhamishe usanidi wetu hapo. Pato linapaswa kuwa muundo wa faili ufuatao:

[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

Kama unaweza kuona, kwa ujumla muundo unarudia muundo wa ujenzi.

Mbinu bodi ina faili maalum kwa kila bodi kwa upande wetu:

  • bef_cr_fs_img.sh ni hati ambayo itatekelezwa baada ya kuunda mfumo wa faili unaolengwa, lakini kabla ya kuufunga kwenye picha. Tutatumia katika siku zijazo
  • linux.config - usanidi wa kernel
  • rootfs_overlay - saraka ya kufunika juu ya mfumo wa faili unaolengwa
  • users.txt - faili inayoelezea watumiaji watakaoundwa

Mbinu sanidi ina defconfig ya bodi zetu. Tuna moja tu.

mfuko - katalogi na vifurushi vyetu. Hapo awali, buildroot ina maelezo na sheria za kuunda idadi ndogo ya vifurushi. Baadaye tutaongeza meneja wa dirisha la icewm na kidhibiti cha kuingia cha picha chembamba hapa.
Patches - hukuruhusu kuhifadhi viraka vyako kwa vifurushi tofauti kwa urahisi. Maelezo zaidi katika sehemu tofauti hapa chini.
Sasa tunahitaji kuongeza faili za maelezo za mti wetu wa nje. Kuna faili 3 zinazohusika na hili: external.desc, Config.in, external.mk.

nje.desc ina maelezo halisi:

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

Mstari wa kwanza ni kichwa. Katika ujenzi wa baadaye unda kutofautisha $(BR2_EXTERNAL_MY_TREE_PATH), ambayo inapaswa kutumika wakati wa kusanidi mkusanyiko. Kwa mfano, njia ya faili ya mtumiaji inaweza kuwekwa kama ifuatavyo:

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

Mstari wa pili ni maelezo mafupi, yanayosomeka na binadamu.

Config.in, external.mk - faili za kuelezea vifurushi vilivyoongezwa. Ikiwa hutaongeza vifurushi vyako mwenyewe, basi faili hizi zinaweza kuachwa tupu. Kwa sasa, ndivyo tutakavyofanya.
Sasa tuna mti wetu wa nje tayari, ulio na defconfig ya bodi yetu na faili zinazohitaji. Wacha tuende kwenye saraka ya ujenzi na tueleze kutumia mti wa nje:

[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

Katika amri ya kwanza tunatumia hoja BR2_EXTERNAL=../my_tree/, ikionyesha matumizi ya mti wa nje Unaweza kutaja miti kadhaa ya nje kwa matumizi kwa wakati mmoja. Katika kesi hii, unahitaji tu kufanya hivi mara moja, baada ya hapo faili output/.br-external.mk inaundwa ambayo huhifadhi habari kuhusu mti wa nje unaotumika:

[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

Muhimu! Njia katika faili hii zitakuwa kabisa!

Kipengee cha chaguo za Nje kimeonekana kwenye menyu:

Buildroot - sehemu ya 2. Kuunda usanidi wa bodi yako; kutumia mti wa nje, rootfs-overlay, hati za baada ya kujenga

Menyu ndogo hii itakuwa na vifurushi vyetu kutoka kwa mti wetu wa nje. Sehemu hii ni tupu kwa sasa.

Sasa ni muhimu zaidi kwetu kuandika upya njia muhimu za kutumia mti wa nje.

Tafadhali kumbuka kuwa katika Jenga chaguzi → Mahali pa kuhifadhi sehemu ya usanidi wa buildroot, kutakuwa na njia kamili ya defconfig iliyohifadhiwa. Inaundwa wakati wa kubainisha matumizi ya extgernal_tree.

Pia tutasahihisha njia katika sehemu ya usanidi wa Mfumo. Kwa meza iliyo na watumiaji iliyoundwa:

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

Katika sehemu ya Kernel, badilisha njia ya usanidi wa kernel:

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

Sasa faili zetu kutoka kwa mti wetu wa nje zitatumika wakati wa kusanyiko. Wakati wa kuhamia saraka nyingine au kusasisha buildroot, tutakuwa na kiwango cha chini cha matatizo.

Kuongeza safu ya fs ya mizizi:

Utaratibu huu hukuruhusu kuongeza/badilisha faili kwa urahisi katika mfumo wa faili unaolengwa.
Ikiwa faili iko kwenye safu ya fs ya mizizi, lakini sio katika lengo, basi itaongezwa
Ikiwa faili iko kwenye safu ya fs ya mizizi na katika lengo, basi itabadilishwa.
Kwanza, hebu tuweke njia ya mizizi fs overlay dir. Hii inafanywa katika usanidi wa Mfumo → sehemu ya saraka za faili za mfumo wa mizizi:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Sasa hebu tuunde faili mbili.

[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

Faili ya kwanza (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) itachukua nafasi ya /etc/hosts faili kwenye mfumo uliomalizika. Faili ya pili (paka my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) itaongezwa.

Tunakusanya na kuangalia:

Buildroot - sehemu ya 2. Kuunda usanidi wa bodi yako; kutumia mti wa nje, rootfs-overlay, hati za baada ya kujenga

Utekelezaji wa hati za ubinafsishaji katika hatua tofauti za mkusanyiko wa mfumo

Mara nyingi unahitaji kufanya kazi fulani ndani ya mfumo wa faili unaolengwa kabla ya kuunganishwa kuwa picha.

Hii inaweza kufanywa katika sehemu ya usanidi wa Mfumo:

Buildroot - sehemu ya 2. Kuunda usanidi wa bodi yako; kutumia mti wa nje, rootfs-overlay, hati za baada ya kujenga

Maandishi mawili ya kwanza yanatekelezwa baada ya mfumo wa faili lengwa kujengwa, lakini kabla ya kuunganishwa kuwa picha. Tofauti ni kwamba hati ya fakeroot inatekelezwa katika muktadha wa fakeroot, ambayo huiga kazi kama mtumiaji wa mizizi.

Hati ya mwisho inatekelezwa baada ya kuunda picha za mfumo. Unaweza kufanya vitendo vya ziada ndani yake, kwa mfano, nakala faili muhimu kwa seva ya NFS au uunda picha ya firmware ya kifaa chako.

Kama mfano, nitaunda hati ambayo itaandika toleo na kujenga tarehe kwa /etc/.
Kwanza nitaonyesha njia ya faili hii kwenye mti wangu wa nje:

Buildroot - sehemu ya 2. Kuunda usanidi wa bodi yako; kutumia mti wa nje, rootfs-overlay, hati za baada ya kujenga

Na sasa maandishi yenyewe:

[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

Baada ya kusanyiko, unaweza kuona faili hii kwenye mfumo.

Kwa mazoezi, hati inaweza kuwa kubwa. Kwa hivyo, katika mradi halisi nilichukua njia ya juu zaidi:

  1. Niliunda saraka (my_tree/board_my_x86_board/inside_fakeroot_scripts) ambayo kuna hati za kutekelezwa, zilizo na nambari za serial. Kwa mfano, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Niliandika hati (my_tree/board_my_x86_board/run_inside_fakeroot.sh) ambayo hupitia saraka hii na kutekeleza mlolongo maandishi yaliyomo.
  3. Ilibainisha hati hii katika mipangilio ya ubao katika usanidi wa Mfumo -> Hati maalum za kuendeshwa ndani ya mazingira ya fakeroot ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) sehemu

Chanzo: mapenzi.com

Kuongeza maoni