Buildroot - ntu 2. Tsim koj lub rooj tsavxwm teeb tsa; siv lwm tsob ntoo, rootfs-overlay, post-build scripts

Hauv seem no kuv saib qee qhov kev xaiv customization uas kuv xav tau. Qhov no tsis yog ib daim ntawv teev tag nrho ntawm dab tsi buildroot muaj, tab sis lawv ua haujlwm tau zoo thiab tsis tas yuav muaj kev cuam tshuam hauv cov ntaub ntawv ntawm buildroot nws tus kheej.

Siv EXTERNAL mechanism rau customization

Hauv tsab xov xwm dhau los Peb saib ntawm ib qho piv txwv yooj yim ntawm kev ntxiv koj tus kheej teeb tsa los ntawm kev ntxiv lub rooj tsav xwm defconfig thiab cov ntaub ntawv tsim nyog ncaj qha rau Buildroot directory.

Tab sis txoj kev no tsis yooj yim heev, tshwj xeeb tshaj yog thaum hloov kho buildroot. Muaj ib lub tswv yim los daws qhov teeb meem no ntoo sab nrauv. Nws lub ntsiab lus yog tias koj tuaj yeem khaws lub rooj tsavxwm, teeb tsa, pob khoom thiab lwm cov npe hauv ib phau ntawv cais (piv txwv li, kuv siv daim ntawv qhia thaj ua rau thaj ua rau cov pob khoom, cov ntsiab lus ntxiv hauv ib ntu) thiab buildroot nws tus kheej yuav ntxiv rau cov hauv nws directory.

Nco tseg: koj tuaj yeem overlay ob peb tsob ntoo sab nraud ib zaug, muaj ib qho piv txwv hauv phau ntawv buildroot

Cia peb tsim ib daim ntawv teev npe my_tree, nyob ib sab ntawm cov npe buildroot thiab hloov peb cov kev teeb tsa muaj. Cov zis yuav tsum yog cov ntaub ntawv hauv qab no:

[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

Raws li koj tuaj yeem pom, feem ntau cov qauv rov ua dua cov qauv ntawm buildroot.

Directory Rooj Tswjhwm Saib cov muaj cov ntaub ntawv tshwj xeeb rau txhua pawg thawj coj hauv peb rooj plaub:

  • bef_cr_fs_img.sh yog ib tsab ntawv uas yuav raug tua tom qab tsim lub hom phiaj cov ntaub ntawv, tab sis ua ntej ntim rau hauv cov duab. Peb yuav siv nws yav tom ntej
  • linux.config - kernel configuration
  • rootfs_overlay - directory rau overlay nyob rau sab saum toj ntawm lub hom phiaj cov ntaub ntawv system
  • users.txt - ib cov ntaub ntawv piav qhia cov neeg siv los tsim

Directory configs muaj defconfig ntawm peb cov boards. Peb tsuas muaj ib qho xwb.

pob - catalog nrog peb pob. Thaum pib, buildroot muaj cov lus piav qhia thiab cov cai rau kev tsim cov pob tsawg tsawg. Tom qab ntawd peb yuav ntxiv icewm window manager thiab Slim graphical login manager ntawm no.
Patches - tso cai rau koj yooj yim khaws koj thaj ua rau thaj rau ntau pob. Xav paub ntau ntxiv nyob rau hauv ib seem hauv qab no.
Tam sim no peb yuav tsum tau ntxiv cov ntaub ntawv piav qhia rau peb cov ntoo sab nraud. Muaj 3 cov ntaub ntawv lub luag haujlwm rau qhov no: external.desc, Config.in, external.mk.

external.desc muaj cov lus piav qhia tiag tiag:

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

Thawj kab yog lub npe. Nyob rau hauv lub neej yav tom ntej buildroot tsim ib tug sib txawv $(BR2_EXTERNAL_MY_TREE_PATH), uas yuav tsum tau siv thaum configure lub rooj sib txoos. Piv txwv li, txoj kev mus rau tus neeg siv cov ntaub ntawv tuaj yeem teeb tsa raws li hauv qab no:

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

Kab thib ob yog luv luv, tib neeg nyeem tau piav qhia.

Config.in, lwm.mk - cov ntaub ntawv los piav txog pob khoom ntxiv. Yog tias koj tsis ntxiv koj cov pob khoom, ces cov ntaub ntawv no tuaj yeem tso tseg. Txog tam sim no, qhov ntawd yog qhov peb yuav ua.
Tam sim no peb muaj peb cov ntoo sab nraud npaj, muaj cov defconfig ntawm peb lub rooj tsavxwm thiab cov ntaub ntawv nws xav tau. Cia peb mus rau buildroot directory thiab qhia kom siv lwm-ntoo:

[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

Hauv thawj cov lus txib peb siv qhov kev sib cav BR2_EXTERNAL = ../my_tree/, qhia txog kev siv ib tsob ntoo sab nraud.Koj tuaj yeem hais qhia ntau yam ntoo sab nraud siv tib lub sijhawm, hauv qhov no, koj tsuas yog yuav tsum ua qhov no ib zaug, tom qab ntawd cov ntaub ntawv tso tawm / .br-external.mk yog tsim uas khaws cov ntaub ntawv hais txog cov ntoo sab nraud siv:

[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

Tseem ceeb! Txoj hauv kev hauv cov ntaub ntawv no yuav muaj tseeb!

Ib qho khoom xaiv sab nraud tau tshwm sim hauv cov ntawv qhia zaub mov:

Buildroot - ntu 2. Tsim koj lub rooj tsavxwm teeb tsa; siv lwm tsob ntoo, rootfs-overlay, post-build scripts

Cov ntawv qhia zaub mov no yuav muaj peb cov pob khoom los ntawm peb cov ntoo sab nraud. Ntu no yog tam sim no khoob.

Tam sim no nws tseem ceeb dua rau peb kom rov sau cov kev tsim nyog los siv cov ntoo sab nraud.

Thov nco ntsoov tias nyob rau hauv cov kev xaiv Tsim → Qhov chaw kom txuag tau buildroot config seem, yuav muaj ib txoj hauv kev rau qhov kev cawmdim defconfig. Nws tau tsim nyob rau lub sijhawm qhia txog kev siv extgernal_tree.

Peb kuj tseem yuav kho cov kab hauv qhov System configuration seem. Rau lub rooj nrog cov neeg siv tsim:

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

Hauv ntu Kernel, hloov txoj hauv kev mus rau qhov kev teeb tsa kernel:

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

Tam sim no peb cov ntaub ntawv los ntawm peb cov ntoo sab nraud yuav raug siv thaum sib dhos. Thaum tsiv mus rau lwm phau ntawv qhia lossis hloov kho cov buildroot, peb yuav muaj qhov tsawg kawg nkaus ntawm cov teeb meem.

Ntxiv cov hauv paus fs overlay:

Cov txheej txheem no tso cai rau koj kom yooj yim ntxiv / hloov cov ntaub ntawv hauv lub hom phiaj cov ntaub ntawv.
Yog hais tias cov ntaub ntawv nyob rau hauv lub hauv paus fs overlay, tab sis tsis nyob rau hauv lub hom phiaj, ces nws yuav muab ntxiv
Yog tias cov ntaub ntawv nyob hauv paus fs overlay thiab hauv lub hom phiaj, ces nws yuav raug hloov.
Ua ntej, cia peb teeb txoj hauv kev rau hauv paus fs overlay dir. Qhov no yog ua tiav hauv System configuration → Root filesystem overlay directories section:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Tam sim no cia peb tsim ob cov ntaub ntawv.

[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

Thawj cov ntaub ntawv (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) yuav hloov cov ntaub ntawv /etc/hosts ntawm lub kaw lus tiav. Cov ntaub ntawv thib ob (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) yuav muab ntxiv.

Peb sau thiab xyuas:

Buildroot - ntu 2. Tsim koj lub rooj tsavxwm teeb tsa; siv lwm tsob ntoo, rootfs-overlay, post-build scripts

Kev ua tiav ntawm customization scripts ntawm ntau theem ntawm kev sib dhos

Feem ntau koj yuav tsum ua qee yam haujlwm hauv lub hom phiaj cov ntaub ntawv ua ntej nws tau ntim rau hauv cov duab.

Qhov no tuaj yeem ua tiav hauv ntu System configuration:

Buildroot - ntu 2. Tsim koj lub rooj tsavxwm teeb tsa; siv lwm tsob ntoo, rootfs-overlay, post-build scripts

Thawj ob tsab ntawv raug tua tom qab lub hom phiaj cov ntaub ntawv raug tsim, tab sis ua ntej nws tau ntim rau hauv cov duab. Qhov txawv yog tias tsab ntawv fakeroot raug tua nyob rau hauv cov ntsiab lus ntawm fakeroot, uas simulates ua hauj lwm raws li tus neeg siv hauv paus.

Cov ntawv kawg raug tua tom qab tsim cov duab system. Koj tuaj yeem ua haujlwm ntxiv hauv nws, piv txwv li, luam cov ntaub ntawv tsim nyog rau NFS server lossis tsim cov duab ntawm koj lub cuab yeej firmware.

Ua piv txwv, kuv yuav tsim ib tsab ntawv uas yuav sau cov version thiab tsim hnub rau /etc/.
Ua ntej kuv yuav qhia txoj hauv kev rau cov ntaub ntawv no hauv kuv cov ntoo sab nraud:

Buildroot - ntu 2. Tsim koj lub rooj tsavxwm teeb tsa; siv lwm tsob ntoo, rootfs-overlay, post-build scripts

Thiab tam sim no tsab ntawv nws tus kheej:

[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

Tom qab sib dhos, koj tuaj yeem pom cov ntaub ntawv no ntawm lub system.

Hauv kev xyaum, tsab ntawv tuaj yeem ua loj. Yog li ntawd, nyob rau hauv qhov project tiag kuv coj ib tug ntau tshaj txoj kev:

  1. Kuv tsim ib daim ntawv teev npe (my_tree/board_my_x86_board/inside_fakeroot_scripts) uas muaj cov ntawv sau ua tiav, nrog cov lej cim. Piv txwv li, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Kuv tau sau ib tsab ntawv (my_tree/board_my_x86_board/run_inside_fakeroot.sh) uas mus los ntawm phau ntawv qhia no thiab ua raws cov ntawv sau muaj nyob hauv nws.
  3. Qhia meej tsab ntawv no nyob rau hauv lub rooj tsavxwm teeb tsa hauv System configuration -> Custom scripts to run in the fakeroot ib puag ncig ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) section

Tau qhov twg los: www.hab.com

Ntxiv ib saib