Buildroot - қисми 2. Сохтани конфигуратсияи тахтаи шумо; бо истифода аз дарахти беруна, rootfs-overlay, скриптҳои пас аз сохтани

Дар ин бахш ман баъзе аз имконоти мутобиқсозӣ, ки ба ман лозим буд, назар. Ин рӯйхати пурраи он чизе, ки buildroot пешниҳод мекунад, нест, аммо онҳо хеле функсионалӣ мебошанд ва дахолатро ба файлҳои худи buildroot талаб намекунанд.

Истифодаи механизми EXTERNAL барои мутобиқсозӣ

Дар мақолаи гузашта Мо як мисоли оддии илова кардани конфигуратсияи шахсии худро тавассути илова кардани defconfig тахта ва файлҳои заруриро мустақиман ба директорияи Buildroot дида баромадем.

Аммо ин усул чандон қулай нест, махсусан ҳангоми навсозии buildroot. Механизми ҳалли ин мушкилот вуҷуд дорад дарахти беруна. Моҳияти он дар он аст, ки шумо метавонед тахтаҳо, конфигуратсияҳо, бастаҳо ва директорияҳои дигарро дар директорияи алоҳида нигоҳ доред (масалан, ман директорияи часпакҳоро барои татбиқ кардани часпакҳо ба бастаҳо истифода мебарам, тафсилоти бештар дар фасли алоҳида) ва худи buildroot онҳоро ба каталогҳои дар директорияи он.

Эзоҳ: шумо метавонед дар як вақт якчанд дарахти берунаро пӯшонед, дар дастури бунёди root мисол мавҷуд аст

Биёед директорияи my_tree эҷод кунем, ки дар паҳлӯи директорияи buildroot ҷойгир аст ва конфигуратсияи моро ба он ҷо интиқол медиҳем. Натиҷа бояд сохтори зерини файл бошад:

[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

Тавре ки шумо мебинед, дар маҷмӯъ сохтор сохтори rootrootро такрор мекунад.

директорӣ Шӯрои Дар мавриди мо файлҳои мушаххаси ҳар як тахтаро дар бар мегирад:

  • bef_cr_fs_img.sh скриптест, ки пас аз сохтани системаи файлии мақсаднок, аммо пеш аз бастабандии он ба тасвирҳо иҷро карда мешавад. Мо онро дар оянда истифода мебарем
  • linux.config - конфигуратсияи ядро
  • rootfs_overlay - директория барои қабати болоии системаи файлии мавриди ҳадаф
  • users.txt - файле, ки корбарони эҷодшавандаро тавсиф мекунад

директорӣ танзим мекунад defconfig-и тахтаҳои моро дар бар мегирад. Мо танҳо якто дорем.

бастаи - каталог бо бастаҳои мо. Дар аввал, buildroot дорои тавсиф ва қоидаҳои сохтани шумораи маҳдуди бастаҳо мебошад. Баъдтар мо мудири равзанаи icewm ва менеҷери вуруди графикии Slim-ро дар ин ҷо илова мекунем.
Забонҳо — ба шумо имкон медиҳад, ки часпакҳои худро барои бастаҳои гуногун ба осонӣ нигоҳ доред. Тафсилоти бештар дар фасли алоҳида дар зер.
Ҳоло мо бояд файлҳои тавсифиро барои дарахти берунии худ илова кунем. Барои ин 3 файл масъул аст: external.desc, Config.in, external.mk.

беруна.dec тавсифи воқеиро дар бар мегирад:

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

Сатри аввал сарлавҳа аст. Дар оянда buildroot як тағирёбанда эҷод кунед $(BR2_EXTERNAL_MY_TREE_PATH), ки бояд ҳангоми конфигуратсияи васлкунӣ истифода шавад. Масалан, роҳ ба файли корбар метавонад ба таври зерин муқаррар карда шавад:

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

Сатри дуюм тавсифи мухтасари ба одам хондан аст.

Config.in, external.mk — файлҳо барои тавсифи бастаҳои иловашуда. Агар шумо бастаҳои шахсии худро илова накунед, ин файлҳо метавонанд холӣ бошанд. Дар айни замон, мо ҳамин тавр мекунем.
Ҳоло мо дарахти берунии худро омода кардаем, ки дорои конфигуратсияи тахтаи мо ва файлҳои ба он лозим аст. Биёед ба директорияи buildroot равем ва барои истифодаи дарахти беруна муайян кунем:

[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

Дар фармони аввал мо аргументро истифода мебарем BR2_EXTERNAL=../дарахти ман/, ки истифодаи дарахти берунаро нишон медиҳад.Шумо метавонед дар як вақт якчанд дарахти беруниро барои истифода муайян кунед.Дар ин ҳолат, шумо бояд ин корро танҳо як маротиба иҷро кунед, пас аз он файли output/.br-external.mk эҷод мешавад, ки маълумотро дар бораи дарахти берунии истифодашуда нигоҳ медорад:

[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

Муҳим! Роҳҳо дар ин файл мутлақ хоҳанд буд!

Дар меню як ҷузъи имконоти беруна пайдо шуд:

Buildroot - қисми 2. Сохтани конфигуратсияи тахтаи шумо; бо истифода аз дарахти беруна, rootfs-overlay, скриптҳои пас аз сохтани

Ин зерменю бастаҳои моро аз дарахти берунии мо дар бар мегирад. Ин бахш ҳоло холӣ аст.

Ҳоло барои мо муҳимтар аст, ки роҳҳои заруриро барои истифодаи дарахти беруна дубора нависед.

Лутфан таваҷҷӯҳ намоед, ки дар имконоти Сохта → Ҷойгиршавӣ барои захира кардани конфигуратсияи buildroot, роҳи мутлақ ба танзими танзимоти захирашуда мавҷуд хоҳад буд. Он дар лаҳзаи муайян кардани истифодаи extgernal_tree ташаккул меёбад.

Мо инчунин роҳҳоро дар бахши конфигуратсияи система ислоҳ мекунем. Барои ҷадвал бо корбарони сохташуда:

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

Дар бахши ядро, роҳро ба конфигуратсияи ядро ​​тағир диҳед:

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

Акнун файлҳои мо аз дарахти берунии мо ҳангоми васлкунӣ истифода мешаванд. Ҳангоми гузаштан ба директорияи дигар ё навсозии rootroot, мо ҳадди аққал мушкилот хоҳем дошт.

Илова кардани қабати root fs:

Ин механизм ба шумо имкон медиҳад, ки файлҳоро дар системаи файлии мавриди ҳадаф ба осонӣ илова кунед/иваз кунед.
Агар файл дар қабати решаи fs бошад, аммо дар ҳадаф набошад, он илова карда мешавад
Агар файл дар қабати решаи fs ва дар ҳадаф бошад, он гоҳ иваз карда мешавад.
Аввалан, биёед роҳро ба решаи fs overlay dir гузорем. Ин дар қисмати конфигуратсияи система → каталогҳои такрории системаи файлии решавӣ анҷом дода мешавад:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Акнун биёед ду файл эҷод кунем.

[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

Файли аввал (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) файли /etc/hosts-ро дар системаи тайёр иваз мекунад. Файли дуюм (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) илова карда мешавад.

Мо ҷамъоварӣ ва тафтиш мекунем:

Buildroot - қисми 2. Сохтани конфигуратсияи тахтаи шумо; бо истифода аз дарахти беруна, rootfs-overlay, скриптҳои пас аз сохтани

Иҷрои скриптҳои мутобиқсозӣ дар марҳилаҳои гуногуни васлкунии система

Аксар вақт ба шумо лозим меояд, ки дар дохили системаи файлии мақсаднок пеш аз бастабандии он ба тасвирҳо баъзе корҳоро анҷом диҳед.

Инро дар қисмати конфигуратсияи система анҷом додан мумкин аст:

Buildroot - қисми 2. Сохтани конфигуратсияи тахтаи шумо; бо истифода аз дарахти беруна, rootfs-overlay, скриптҳои пас аз сохтани

Ду скрипти аввал пас аз сохтани системаи файлии мавриди ҳадаф иҷро карда мешаванд, аммо пеш аз он ки он ба тасвирҳо баста шавад. Фарқият дар он аст, ки скрипти fakeroot дар контексти fakeroot иҷро карда мешавад, ки корро ҳамчун корбари реша тақлид мекунад.

Скрипти охирин пас аз эҷоди тасвирҳои система иҷро карда мешавад. Шумо метавонед дар он амалҳои иловагиро иҷро кунед, масалан, файлҳои заруриро ба сервери NFS нусхабардорӣ кунед ё тасвири нармафзори дастгоҳи худро эҷод кунед.

Ҳамчун мисол, ман скрипт эҷод мекунам, ки версия ва санаи сохтани санаро ба /etc/ менависад.
Аввалан ман роҳи ин файлро дар дарахти берунии худ нишон медиҳам:

Buildroot - қисми 2. Сохтани конфигуратсияи тахтаи шумо; бо истифода аз дарахти беруна, rootfs-overlay, скриптҳои пас аз сохтани

Ва ҳоло худи скрипт:

[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

Пас аз васлкунӣ, шумо метавонед ин файлро дар система бинед.

Дар амал, скрипт метавонад калон шавад. Аз ин рӯ, дар лоиҳаи воқеӣ ман роҳи пешрафтаро пеш гирифтам:

  1. Ман як феҳрист (my_tree/board_my_x86_board/inside_fakeroot_scripts) сохтам, ки дар он скриптҳои иҷрошаванда бо рақамҳои силсилавӣ мавҷуданд. Масалан, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Ман скрипт навиштам (my_tree/board_my_x86_board/run_inside_fakeroot.sh), ки аз ин директория мегузарад ва скриптҳои дар он мавҷудбударо пайдарпай иҷро мекунад
  3. Ин скриптро дар танзимоти панел дар конфигуратсияи Система -> Скриптҳои фармоишӣ барои кор дар дохили муҳити fakeroot ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) муайян кунед

Манбаъ: will.com

Илова Эзоҳ