Buildroot - pati 2. Kreye konfigirasyon tablo ou a; lè l sèvi avèk pye bwa ekstèn, rootfs-overlay, post-build scripts

Nan seksyon sa a mwen gade kèk nan opsyon personnalisation ke mwen te bezwen. Sa a se pa yon lis konplè sou sa buildroot ofri, men yo byen fonksyonèl epi yo pa bezwen entèvansyon nan dosye yo nan buildroot tèt li.

Sèvi ak mekanis EXTERNAL pou personnalisation

Nan atik anvan an Nou te gade yon egzanp senp pou ajoute pwòp konfigirasyon ou lè nou ajoute defconfig tablo a ak dosye ki nesesè yo dirèkteman nan anyè Buildroot la.

Men, metòd sa a pa trè pratik, sitou lè mete ajou buildroot. Gen yon mekanis pou rezoud pwoblèm sa a pye bwa ekstèn. Sans li se ke ou ka estoke tablo, konfigirasyon, pakè ak lòt repèrtwar nan yon anyè separe (pa egzanp, mwen itilize anyè patch yo pou aplike patch nan pakè, plis detay nan yon seksyon separe) ak buildroot tèt li pral ajoute yo nan sa yo ki nan anyè li yo.

Remak: ou ka kouvri plizyè pye bwa ekstèn nan yon fwa, gen yon egzanp nan manyèl la buildroot

Ann kreye yon anyè my_tree, ki chita bò kote anyè buildroot epi transfere konfigirasyon nou an la. Pwodiksyon an ta dwe estrikti dosye sa a:

[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

Kòm ou ka wè, an jeneral estrikti a repete estrikti nan buildroot.

Anyè tablo gen dosye espesifik pou chak tablo nan ka nou an:

  • bef_cr_fs_img.sh se yon script ki pral egzekite apre bati sistèm fichye sib la, men anvan anbalaj li nan imaj. Nou pral sèvi ak li nan tan kap vini an
  • linux.config - konfigirasyon nwayo
  • rootfs_overlay - anyè pou kouvri anlè sistèm fichye sib la
  • users.txt - yon dosye ki dekri itilizatè yo dwe kreye

Anyè konfig gen defconfig nan tablo nou yo. Nou gen youn sèlman.

Pake - katalòg ak pakè nou yo. Okòmansman, buildroot gen deskripsyon ak règ pou bati yon kantite limite pakè. Pita nou pral ajoute manadjè fenèt icewm ak manadjè Slim grafik login isit la.
Korèktif — pèmèt ou byen estoke plak ou yo pou diferan pakè. Plis detay nan yon seksyon separe anba a.
Koulye a, nou bezwen ajoute dosye yo deskripsyon pou ekstèn-pyebwa nou an. Gen 3 fichye ki responsab pou sa: external.desc, Config.in, external.mk.

ekstèn.desc gen deskripsyon aktyèl la:

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

Premye liy lan se tit la. Nan fiti buildroot kreye yon varyab $(BR2_EXTERNAL_MY_TREE_PATH), ki ta dwe itilize lè konfigirasyon asanble a. Pou egzanp, chemen an nan dosye itilizatè a ka mete jan sa a:

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

Dezyèm liy lan se yon deskripsyon kout, lizib pou moun.

Config.in, external.mk — dosye pou dekri pakè te ajoute. Si ou pa ajoute pakè pwòp ou yo, Lè sa a, dosye sa yo ka rete vid. Pou kounye a, se sa nou pral fè.
Koulye a, nou gen eksteryè-pyebwa nou an pare, ki gen defconfig tablo nou an ak dosye li bezwen yo. Ann ale nan anyè buildroot la epi presize pou nou itilize external-tree:

[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

Nan premye kòmandman an nou itilize agiman an BR2_EXTERNAL=../my_tree/, ki endike itilizasyon yon pye bwa ekstèn. Ou ka presize plizyè pye bwa ekstèn pou itilize an menm tan. Nan ka sa a, ou sèlman bezwen fè sa yon fwa, apre sa yo kreye yon fichye output/.br-external.mk ki estoke enfòmasyon sou pye bwa ekstèn yo itilize:

[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

Enpòtan! Chemen yo nan dosye sa a pral absoli!

Yon atik opsyon ekstèn parèt nan meni an:

Buildroot - pati 2. Kreye konfigirasyon tablo ou a; lè l sèvi avèk pye bwa ekstèn, rootfs-overlay, post-build scripts

Sou-menu sa a pral genyen pakè nou yo ki soti nan pye bwa ekstèn nou an. Seksyon sa a vid kounye a.

Koulye a, li pi enpòtan pou nou reekri chemen ki nesesè yo sèvi ak ekstèn-pyebwa.

Tanpri sonje ke nan seksyon Opsyon Konstwi → Kote pou konsève pou konfigirasyon buildroot, pral gen yon chemen absoli nan defconfig ki te sove a. Li fòme nan moman sa a nan espesifye itilizasyon extgernal_tree.

Nou pral korije tou chemen yo nan seksyon konfigirasyon Sistèm. Pou yon tab ak itilizatè kreye:

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

Nan seksyon Kernel la, chanje chemen an nan konfigirasyon Kernel la:

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

Koulye a, dosye nou yo ki soti nan pye bwa ekstèn nou yo pral itilize pandan asanble a. Lè w ap deplase nan yon lòt anyè oswa mete ajou buildroot la, nou pral gen yon minimòm de pwoblèm.

Ajoute rasin fs kouvri:

Mekanis sa a pèmèt ou fasil ajoute / ranplase dosye nan sistèm dosye sib la.
Si fichye a se nan rasin fs kouvri, men se pa nan sib, Lè sa a, li pral ajoute
Si fichye a se nan rasin fs kouvri ak nan sib, Lè sa a, li pral ranplase.
Premyèman, se pou yo mete chemen an nan rasin fs overlay dir. Sa a se fè nan konfigirasyon sistèm nan → Rasin sistèm fichye repèrtwar seksyon:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Koulye a, an n kreye de fichiers.

[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

Premye fichye a (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) pral ranplase fichye /etc/hosts sou sistèm fini an. Dezyèm fichye a (chat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) pral ajoute.

Nou kolekte epi tcheke:

Buildroot - pati 2. Kreye konfigirasyon tablo ou a; lè l sèvi avèk pye bwa ekstèn, rootfs-overlay, post-build scripts

Egzekisyon scripts personnalisation nan diferan etap nan asanble sistèm

Souvan ou bezwen fè kèk travay andedan sistèm fichye sib la anvan li pake nan imaj.

Sa a ka fè nan seksyon konfigirasyon Sistèm:

Buildroot - pati 2. Kreye konfigirasyon tablo ou a; lè l sèvi avèk pye bwa ekstèn, rootfs-overlay, post-build scripts

De premye scripts yo egzekite apre sistèm fichye sib la bati, men anvan li pake nan imaj. Diferans lan se ke script fakeroot la egzekite nan yon kontèks fakeroot, ki simulation travay kòm itilizatè rasin lan.

Dènye script la egzekite apre yo fin kreye imaj sistèm yo. Ou ka fè lòt aksyon nan li, pou egzanp, kopye dosye ki nesesè yo nan yon sèvè NFS oswa kreye yon imaj nan firmwèr aparèy ou an.

Kòm yon egzanp, mwen pral kreye yon script ki pral ekri vèsyon an ak bati dat nan /etc/.
Premyèman, mwen pral endike chemen ki mennen nan dosye sa a nan pye bwa ekstèn mwen an:

Buildroot - pati 2. Kreye konfigirasyon tablo ou a; lè l sèvi avèk pye bwa ekstèn, rootfs-overlay, post-build scripts

Epi kounye a script nan tèt li:

[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

Apre asanble a, ou ka wè dosye sa a sou sistèm lan.

Nan pratik, script la ka vin gwo. Se poutèt sa, nan pwojè reyèl la mwen te pran yon wout ki pi avanse:

  1. Mwen te kreye yon anyè (my_tree/board_my_x86_board/inside_fakeroot_scripts) kote gen scripts yo dwe egzekite, ak nimewo seri. Pou egzanp, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Mwen te ekri yon script (my_tree/board_my_x86_board/run_inside_fakeroot.sh) ki ale nan anyè sa a epi sekans egzekite scripts ki ladan l.
  3. Espesifye script sa a nan paramèt tablo a nan konfigirasyon Sistèm -> Scripts Custom pou kouri andedan anviwònman fakeroot ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) seksyon

Sous: www.habr.com

Add nouvo kòmantè