Buildroot - beşa 2. Afirandina veavakirina panela xwe; bikaranîna dara derveyî, rootfs-overlay, nivîsarên piştî-avakirinê

Di vê beşê de ez li hin vebijarkên xwerûkirinê yên ku ez hewce dikim dinihêrim. Ev ne navnîşek bêkêmasî ya ku buildroot pêşkêşî dike ye, lê ew pir bikêr in û ne hewceyî destwerdana pelên buildroot bixwe ne.

Bikaranîna mekanîzmaya EXTERNAL ji bo xwerûkirinê

Di gotara berê de Me li mînakek hêsan a lê zêdekirina veavakirina xwe nihêrî bi lê zêdekirina defconfig ya panelê û pelên pêwîst rasterast li pelrêça Buildroot.

Lê ev rêbaz ne pir hêsan e, nemaze dema ku buildroot nûve dike. Ji bo çareserkirina vê pirsgirêkê mekanîzmayek heye dara derve. Esasê wê ev e ku hûn dikarin panel, mîhengan, pakêtan û pelrêçekên din di pelrêçek cûda de hilînin (mînakî, ez pelrêça patches bikar tînim da ku pêçan li pakêtan bicîh bikim, hûrguliyên bêtir di beşek cûda de) û buildroot bixwe dê wan li yên di nav de zêde bike. pelrêça wê.

Nîşe: hûn dikarin bi yekcarî çend darên derveyî bixin, mînakek di manuala buildroot de heye

Ka em pelrêçek my_tree, ku li kêleka pelrêça buildroot-ê ye, biafirînin û veavakirina xwe veguhezînin wir. Divê encam strukturek pelê jêrîn be:

[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

Wekî ku hûn dikarin bibînin, bi gelemperî avahî avahiya buildroot dubare dike.

directory pêşewarî di doza me de pelên taybetî yên her panelê hene:

  • bef_cr_fs_img.sh skrîptek e ku dê piştî avakirina pergala pelan a armanc, lê berî ku wê di wêneyan de pak bike, were darve kirin. Em ê di pêşerojê de bikar bînin
  • linux.config - veavakirina kernel
  • rootfs_overlay - pelrêça ku li ser pergala pelan a mebest tê xêzkirin
  • users.txt - pelek ku bikarhênerên ku bêne afirandin vedibêje

directory vedigire defconfig ya panelên me dihewîne. Em tenê yek heye.

Pakêt - katalog bi pakêtên me. Di destpêkê de, buildroot ravekirin û qaîdeyên ji bo avakirina hejmareke sînorkirî ya pakêtan vedihewîne. Dûv re em ê rêveberê pencereya icewm û rêveberê têketina grafîkî ya Slim li vir zêde bikin.
Patches - destûrê dide te ku hûn bi rihetî pêlên xwe ji bo pakêtên cihêreng hilînin. Zêdetir hûrgulî di beşa cûda ya jêrîn de.
Naha divê em pelên danasînê ji bo dara xweya derveyî zêde bikin. Ji bo vê yekê 3 pel hene: external.desc, Config.in, external.mk.

derve.desc şiroveya rastîn dihewîne:

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

Rêza yekem sernav e. Di pêşerojê de buildroot guhêrbarek biafirîne $(BR2_EXTERNAL_MY_TREE_PATH), ku divê di dema sazkirina civînê de were bikar anîn. Mînakî, riya pelê bikarhêner dikare wekî jêrîn were danîn:

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

Rêza duyemîn ravekirinek kurt e ku mirov dikare bixwîne.

Config.in, external.mk - pelên ji bo danasîna pakêtên zêdekirî. Ger hûn pakêtên xwe zêde nekin, wê hingê ev pel dikarin vala bimînin. Ji bo niha, ya ku em ê bikin ev e.
Naha me dara xweya derveyî amade ye, ku defconfig ya panela me û pelên ku jê re hewce dike vedihewîne. Ka em biçin pelrêça buildroot-ê û diyar bikin ku dara derveyî bikar bînin:

[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

Di fermana yekem de em arguman bikar tînin BR2_EXTERNAL=../my_tree/, bikaranîna dareke derve nîşan dide. Hûn dikarin di heman demê de çend darên derveyî diyar bikin ku bikar bînin. Di vê rewşê de, hûn tenê carekê hewce ne ku hûn vê yekê bikin, piştî ku pelek encamek/.br-external.mk tê afirandin ku agahdariya li ser dara derveyî bikar tîne hilîne:

[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

Giring! Rêyên di vê pelê de dê mutleq bin!

Tiştek vebijarkên derve di menuyê de xuya bû:

Buildroot - beşa 2. Afirandina veavakirina panela xwe; bikaranîna dara derveyî, rootfs-overlay, nivîsarên piştî-avakirinê

Ev jêrmenu dê pakêtên me yên ji dara meya derveyî vehewîne. Ev beş niha vala ye.

Naha ji me re girîngtir e ku em rêyên pêwîst ji nû ve binivîsin da ku dara derveyî bikar bînin.

Ji kerema xwe bala xwe bidin ku di beşa Vebijarkên Avakirinê → Cih ji bo hilanîna mîhengê buildroot-ê de, dê rêyek bêkêmasî ya defconfig-a tomarkirî hebe. Ew di dema diyarkirina karanîna extgernal_tree de pêk tê.

Em ê di beşa veavakirina Sîstemê de jî rêyên rast bikin. Ji bo tabloyek bi bikarhênerên çêkirî:

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

Di beşa Kernel de, riya veavakirina kernelê biguherînin:

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

Naha pelên me yên ji dara meya derveyî dê di dema kombûnê de werin bikar anîn. Dema ku diçin pelrêçek din an nûvekirina buildroot-ê, em ê kêmtirîn pirsgirêkan hebin.

Zêdekirina pêvekirina root fs:

Ev mekanîzma dihêle hûn bi hêsanî pelan di pergala pelê armancê de zêde bikin / biguhezînin.
Ger pel di serpêhatiya root fs de be, lê ne di armancê de be, wê hingê ew ê were zêdekirin
Ger pel di serpêhatiya fs root de û di hedefê de be, wê hingê ew ê were guheztin.
Pêşî, ka em riya root fs overlay dir saz bikin. Ev di beşa Veavakirina Pergalê → Pergala pelan a Root de pelrêçên pelrêçandî tê kirin:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Niha em du pelan çêbikin.

[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

Pela yekem (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) dê li şûna pelê /etc/hosts li ser pergala qedandî bigire. Pela duyemîn (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) dê were zêdekirin.

Em berhev dikin û kontrol dikin:

Buildroot - beşa 2. Afirandina veavakirina panela xwe; bikaranîna dara derveyî, rootfs-overlay, nivîsarên piştî-avakirinê

Di qonaxên cihêreng ên kombûna pergalê de bicihanîna nivîsarên xwerûkirinê

Bi gelemperî hûn hewce ne ku di hundurê pergala pelê armancê de hin karan bikin berî ku ew di wêneyan de were pak kirin.

Ev dikare di beşa veavakirina pergalê de were kirin:

Buildroot - beşa 2. Afirandina veavakirina panela xwe; bikaranîna dara derveyî, rootfs-overlay, nivîsarên piştî-avakirinê

Du skrîptên yekem piştî ku pergala pelan a armanc hatî çêkirin têne darve kirin, lê berî ku ew di wêneyan de were pak kirin. Cûdahî ev e ku skrîpta fakeroot di çarçoweya fakeroot-ê de tê darve kirin, ku kar wekî bikarhênerê root simule dike.

Piştî ku wêneyên pergalê têne çêkirin, skrîpta paşîn tê darve kirin. Hûn dikarin di wê de çalakiyên din pêk bînin, mînakî, pelên pêwîst li serverek NFS kopî bikin an wêneyek firmware cîhaza xwe biafirînin.

Wek mînak, ez ê skrîptek biafirînim ku dê guhertoyê binivîsîne û tarîxa avakirina /etc/yê binivîsîne.
Pêşî ez ê riya vê pelê di dara xweya derveyî de destnîşan bikim:

Buildroot - beşa 2. Afirandina veavakirina panela xwe; bikaranîna dara derveyî, rootfs-overlay, nivîsarên piştî-avakirinê

Û niha jî senaryo bi xwe:

[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

Piştî kombûnê, hûn dikarin vê pelê li ser pergalê bibînin.

Di pratîkê de, skrîpt dikare mezin bibe. Ji ber vê yekê, di projeya rastîn de min rêyek pêşkeftî girt:

  1. Min pelrêçek çêkir (my_tree/board_my_x86_board/inside_fakeroot_scripts) ku tê de skrîptên ku bêne darvekirin hene, bi jimareyên rêzî. Mînakî, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Min skrîptek nivîsand (my_tree/board_my_x86_board/run_inside_fakeroot.sh) ku di nav vê pelrêçayê re derbas dibe û bi dû hev re skrîptên ku tê de hene bi cih tîne.
  3. Vê skrîptê di mîhengên panelê de di veavakirina Pergalê de diyar kir -> Nivîsarên xwerû ku di hundurê jîngeha fakeroot de ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) bimeşin

Source: www.habr.com

Add a comment