Buildroot - bagian 2. Nyieun konfigurasi dewan anjeun; ngagunakeun tangkal éksternal, rootfs-overlay, skrip post-build

Dina bagian ieu kuring ningali sababaraha pilihan kustomisasi anu kuring peryogikeun. Ieu sanés daptar lengkep ngeunaan naon anu ditawarkeun buildroot, tapi aranjeunna cukup fungsional sareng henteu ngabutuhkeun campur tangan dina file buildroot sorangan.

Ngagunakeun mékanisme EXTERNAL pikeun kustomisasi

Dina tulisan saméméhna Kami ningali conto saderhana pikeun nambihan konfigurasi anjeun ku cara nambihan defconfig dewan sareng file anu diperyogikeun langsung kana diréktori Buildroot.

Tapi metoda ieu teu merenah pisan, utamana lamun ngamutahirkeun buildroot. Aya mékanisme pikeun ngajawab masalah ieu tangkal éksternal. Intina nyaéta anjeun tiasa nyimpen papan, konfigurasi, bungkusan sareng diréktori sanés dina diréktori anu misah (contona, kuring nganggo diréktori patch pikeun nerapkeun patches kana bungkusan, langkung rinci dina bagian anu misah) sareng buildroot sorangan bakal nambihanana kana anu aya dina. diréktori na.

Catetan: anjeun tiasa overlay sababaraha tangkal éksternal sakaligus, aya conto dina manual buildroot

Hayu urang nyieun diréktori my_tree, ayana di gigireun diréktori buildroot sarta mindahkeun konfigurasi urang dinya. Kaluaran kedah janten struktur file ieu:

[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

Sakumaha anjeun tiasa tingali, sacara umum struktur ngulang struktur buildroot.

pitunjuk papan ngandung file husus pikeun tiap dewan dina kasus urang:

  • bef_cr_fs_img.sh nyaéta skrip anu bakal dieksekusi saatos ngawangun sistem file target, tapi sateuacan dibungkus kana gambar. Urang bakal ngagunakeun éta dina mangsa nu bakal datang
  • linux.config - konfigurasi kernel
  • rootfs_overlay - diréktori pikeun overlay dina luhureun sistem file target
  • users.txt - file ngajéntrékeun pamaké nu bakal dijieun

pitunjuk configs ngandung defconfig tina papan kami. Urang ngan boga hiji.

paket - katalog sareng bungkusan kami. Mimitina, buildroot ngandung déskripsi sareng aturan pikeun ngawangun sajumlah bungkusan terbatas. Engké urang bakal nambahan manajer jandela icewm jeung manajer login grafis Slim dieu.
Patches - ngidinan Anjeun pikeun merenah nyimpen patch anjeun pikeun bungkusan béda. Langkung rinci dina bagian misah di handap.
Ayeuna urang kedah nambihan file déskripsi pikeun tangkal éksternal urang. Aya 3 file jawab ieu: external.desc, Config.in, external.mk.

jaba.desc ngandung pedaran sabenerna:

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

Baris kahiji nyaéta judul. Dina buildroot hareup nyieun variabel $(BR2_EXTERNAL_MY_TREE_PATH), anu kedah dianggo nalika ngonpigurasikeun rakitan. Contona, jalur ka file pamaké bisa diatur kieu:

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

Baris kadua mangrupa pedaran pondok, bisa dibaca manusa.

Config.in, jaba.mk - file pikeun ngajelaskeun bungkusan tambahan. Upami anjeun henteu nambihan bungkusan anjeun nyalira, maka file ieu tiasa dikosongkeun. Pikeun ayeuna, éta anu bakal urang laksanakeun.
Ayeuna kami parantos siap-tangkal éksternal, ngandung defconfig dewan kami sareng file anu diperyogikeun. Hayu urang angkat ka diréktori buildroot sareng sebatkeun ngagunakeun tangkal éksternal:

[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

Dina paréntah kahiji kami nganggo argumen BR2_EXTERNAL=../my_tree/, nunjukkeun pamakéan hiji tangkal éksternal. Anjeun tiasa nangtukeun sababaraha éksternal-tangkal pikeun pamakéan dina waktos anu sareng. Dina hal ieu, anjeun ngan perlu ngalakukeun ieu sakali, sanggeus nu kaluaran file/.br-external.mk dijieun éta nyimpen inpormasi ngeunaan tangkal éksternal anu dianggo:

[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

Kadé! Jalur dina file ieu bakal mutlak!

Item pilihan éksternal parantos muncul dina ménu:

Buildroot - bagian 2. Nyieun konfigurasi dewan anjeun; ngagunakeun tangkal éksternal, rootfs-overlay, skrip post-build

Submenu ieu bakal ngandung bungkusan kami tina tangkal éksternal kami. Bagian ieu ayeuna kosong.

Ayeuna éta leuwih penting pikeun urang nulis ulang jalur perlu ngagunakeun external-tangkal.

Punten dicatet yén dina Pilihan Ngawangun → Lokasi pikeun ngahemat bagian config buildroot, bakal aya jalur mutlak pikeun defconfig anu disimpen. Ieu kabentuk dina momen nangtukeun pamakéan extgernal_tree.

Urang ogé bakal ngabenerkeun jalur dina bagian konfigurasi System. Pikeun tabel kalawan pamaké dijieun:

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

Dina bagian Kernel, robih jalur kana konfigurasi kernel:

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

Ayeuna file kami tina tangkal éksternal kami bakal dianggo nalika ngarakit. Nalika ngalih ka diréktori sanés atanapi ngamutahirkeun buildroot, urang bakal ngagaduhan masalah minimal.

Nambahkeun overlay root fs:

Mékanisme ieu ngamungkinkeun anjeun gampang nambihan / ngagentos file dina sistem file target.
Upami filena aya dina overlay root fs, tapi henteu dina udagan, maka éta bakal ditambah
Upami filena aya dina overlay root fs sareng dina target, maka éta bakal diganti.
Kahiji, hayu urang nyetel jalur ka root fs overlay dir. Hal ieu dilakukeun dina konfigurasi Sistim → Root filesystem overlay bagian directories:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Ayeuna hayu urang nyieun dua file.

[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

File kahiji (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) bakal ngaganti file /etc/hosts dina sistem rengse. The file kadua (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) bakal ditambahkeun.

Kami ngumpulkeun sareng pariksa:

Buildroot - bagian 2. Nyieun konfigurasi dewan anjeun; ngagunakeun tangkal éksternal, rootfs-overlay, skrip post-build

Palaksanaan skrip kustomisasi dina tahapan anu béda dina assembly sistem

Sering anjeun kedah ngalakukeun sababaraha padamelan di jero sistem file target sateuacan dibungkus kana gambar.

Ieu tiasa dilakukeun dina bagian Konfigurasi Sistem:

Buildroot - bagian 2. Nyieun konfigurasi dewan anjeun; ngagunakeun tangkal éksternal, rootfs-overlay, skrip post-build

Dua naskah munggaran dieksekusi saatos sistem file target diwangun, tapi sateuacan dibungkus kana gambar. Bédana nyaéta skrip fakeroot dieksekusi dina kontéks fakeroot, anu nyontokeun damel salaku pangguna akar.

Skrip terakhir dieksekusi saatos gambar sistem didamel. Anjeun tiasa ngalakukeun tindakan tambahan di jerona, contona, nyalin file anu diperyogikeun ka server NFS atanapi ngadamel gambar firmware alat anjeun.

Salaku conto, kuring bakal nyiptakeun naskah anu bakal nyerat vérsi sareng ngawangun tanggal ka /etc/.
Mimiti kuring bakal nunjukkeun jalur ka file ieu dina tangkal éksternal kuring:

Buildroot - bagian 2. Nyieun konfigurasi dewan anjeun; ngagunakeun tangkal éksternal, rootfs-overlay, skrip post-build

Sareng ayeuna naskahna sorangan:

[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

Saatos assembly, anjeun tiasa ningali file ieu dina sistem.

Dina prakna, naskah bisa jadi badag. Ku alatan éta, dina proyék nyata kuring nyandak jalur anu langkung maju:

  1. Kuring nyieun diréktori a (my_tree/board_my_x86_board/inside_fakeroot_scripts) nu aya naskah pikeun dieksekusi, kalawan nomer serial. Contona, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Kuring nulis naskah (my_tree/board_my_x86_board/run_inside_fakeroot.sh) nu ngaliwatan diréktori ieu sarta sequentially executes Aksara dikandung dina eta.
  3. Ditetepkeun Aksara ieu dina setélan dewan dina konfigurasi Sistim -> Aksara custom ngajalankeun jero lingkungan fakeroot ($(BR2_EXTERNAL_my_tree_PATH) / dewan / my_x86_board / run_inside_fakeroot.sh) bagian

sumber: www.habr.com

Tambahkeun komentar