Buildroot - 2 برخه. ستاسو د بورډ ترتیب کول؛ د بهرنۍ ونې، rootfs-overlay، post-build سکریپټونو کارول

پدې برخه کې زه د اصلاح کولو ځینې اختیارونو ته ګورم چې ما ورته اړتیا درلوده. دا د هغه څه بشپړ لیست ندی چې بلډروټ وړاندیز کوي ، مګر دا خورا فعال دي او پخپله د بلډروټ فایلونو کې مداخلې ته اړتیا نلري.

د دودیز کولو لپاره د بهرني میکانیزم کارول

په تیره مقاله کې موږ د بورډ defconfig او اړین فایلونه په مستقیم ډول د Buildroot ډایرکټر ته اضافه کولو سره ستاسو د خپل تشکیلاتو اضافه کولو ساده مثال ته ګورو.

مګر دا میتود خورا اسانه ندی ، په ځانګړي توګه کله چې د buildroot تازه کول. د دې ستونزې د حل لپاره یو میکانیزم شتون لري بهرنۍ ونه. د دې جوهر دا دی چې تاسو کولی شئ بورډ ، تشکیلات ، کڅوړې او نور لارښودونه په جلا لارښود کې زیرمه کړئ (د مثال په توګه ، زه د پیچونو لارښود څخه کار اخلم ترڅو کڅوړو ته پیچ پلي کړم ، نور توضیحات په جلا برخه کې) او پخپله buildroot به دوی په هغه کې اضافه کړي. د هغه لارښود.

یادونه: تاسو کولی شئ په یوځل کې ډیری بهرنۍ ونې پوښ ​​کړئ ، د بلډروټ لارښود کې مثال شتون لري

راځئ چې یو لارښود 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

لکه څنګه چې تاسو لیدلی شئ، په عمومي توګه جوړښت د buildroot جوړښت تکراروي.

نوملړ بورډ زموږ په قضیه کې هر بورډ ته ځانګړي فایلونه لري:

  • bef_cr_fs_img.sh یو سکریپټ دی چې د هدف فایل سیسټم جوړولو وروسته به اجرا شي، مګر مخکې له دې چې په انځورونو کې بسته بندي شي. موږ به یې په راتلونکي کې وکاروو
  • linux.config - د کرنل ترتیب
  • rootfs_overlay - لارښود د هدف فایل سیسټم په سر کې د پوښلو لپاره
  • user.txt - یو فایل چې د کاروونکي رامینځته کولو تشریح کوي

نوملړ شکلونه زموږ د بورډونو defconfig لري. موږ یوازې یو لرو.

هګ - زموږ د کڅوړو سره کتلاګ. په پیل کې، buildroot د محدود شمیر کڅوړو جوړولو لپاره توضیحات او قواعد لري. وروسته به موږ دلته د icewm کړکۍ مدیر او د سلم ګرافیکي ننوتلو مدیر اضافه کړو.
ټوپونه - تاسو ته اجازه درکوي په اسانۍ سره خپل پیچونه د مختلف کڅوړو لپاره ذخیره کړئ. نور جزییات لاندې په جلا برخه کې.
اوس موږ اړتیا لرو چې زموږ د بهرنۍ ونې لپاره د توضیحاتو فایلونه اضافه کړو. د دې لپاره 3 فایلونه مسؤل دي: external.desc، Config.in، external.mk.

external.desc اصلي توضیحات لري:

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

لومړۍ کرښه عنوان دی. په راتلونکي کې جوړونکي یو متغیر جوړ کړئ $(BR2_EXTERNAL_MY_TREE_PATH)، کوم چې باید د مجلس تنظیم کولو پرمهال وکارول شي. د مثال په توګه، د کارن فایل ته لاره په لاندې ډول ټاکل کیدی شي:

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

دویمه کرښه یو لنډ، د انسان د لوستلو وړ توضیح دی.

Config.in، external.mk - د اضافه کڅوړو تشریح کولو لپاره فایلونه. که تاسو خپل کڅوړې اضافه نه کړئ، نو دا فایلونه خالي پاتې کیدی شي. د اوس لپاره، دا هغه څه دي چې موږ به یې وکړو.
اوس موږ خپل بهرنۍ ونې چمتو کوو، چې زموږ د بورډ defconfig او هغه فایلونه لري چې ورته اړتیا لري. راځئ چې د buildroot لارښود ته لاړ شو او د 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

په لومړي کمانډ کې موږ دلیل کاروو BR2_EXTERNAL=../my_tree/د بهرنۍ ونې کارول په ګوته کوي. تاسو کولی شئ په ورته وخت کې د کارولو لپاره څو بهرنۍ ونې مشخص کړئ. پدې حالت کې، تاسو اړتیا لرئ چې دا یو ځل ترسره کړئ، وروسته له دې چې یو فایل 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، post-build سکریپټونو کارول

دا فرعي مینو به زموږ د بهرنۍ ونې څخه زموږ کڅوړې ولري. دا برخه اوس مهال خالي ده.

اوس دا زموږ لپاره خورا مهم دی چې د بهرنۍ ونې کارولو لپاره اړین لارې بیا ولیکئ.

مهرباني وکړئ په یاد ولرئ چې د جوړونې اختیارونو کې → د buildroot config برخې خوندي کولو لپاره ځای ، د خوندي شوي ډیف کنفګ لپاره به مطلق لاره وي. دا د extgernal_tree کارولو مشخص کولو په وخت کې رامینځته کیږي.

موږ به د سیسټم ترتیب کولو برخه کې لارې هم سمې کړو. د جوړ شوي کاروونکو سره د میز لپاره:

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

د کرنل په برخه کې، د کرنل ترتیب ته لاره بدل کړئ:

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

اوس زموږ د بهرنۍ ونې څخه زموږ فایلونه به د مجلس پرمهال وکارول شي. کله چې بل ډایرکټر ته لاړ شو یا د بلډروټ تازه کول، موږ به لږترلږه ستونزې ولرو.

د روټ 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، post-build سکریپټونو کارول

د سیسټم اسمبلۍ په بیلابیلو مرحلو کې د اصلاح کولو سکریپټونو اجرا کول

ډیری وختونه تاسو اړتیا لرئ د هدف فایل سیسټم دننه ځینې کار ترسره کړئ مخکې لدې چې دا په عکسونو کې بسته شي.

دا د سیسټم ترتیب کولو برخه کې ترسره کیدی شي:

Buildroot - 2 برخه. ستاسو د بورډ ترتیب کول؛ د بهرنۍ ونې، rootfs-overlay، post-build سکریپټونو کارول

لومړی دوه سکریپټونه د هدف فایل سیسټم رامینځته کیدو وروسته اجرا کیږي ، مګر مخکې لدې چې دا په عکسونو کې بسته شي. توپیر دا دی چې د fakeroot سکریپټ د fakeroot په شرایطو کې اجرا کیږي، کوم چې د روټ کارونکي په توګه کار سمبالوي.

وروستی سکریپټ د سیسټم عکسونو رامینځته کیدو وروسته اجرا کیږي. تاسو کولی شئ پدې کې اضافي کړنې ترسره کړئ ، د مثال په توګه ، اړین فایلونه د NFS سرور ته کاپي کړئ یا د خپل وسیله فرم ویئر عکس رامینځته کړئ.

د مثال په توګه، زه به یو سکریپټ جوړ کړم چې نسخه به لیکي او تاریخ به /etc/ ته جوړ کړي.
لومړی زه به زما په بهرنۍ ونې کې دې فایل ته لاره په ګوته کړم:

Buildroot - 2 برخه. ستاسو د بورډ ترتیب کول؛ د بهرنۍ ونې، rootfs-overlay، post-build سکریپټونو کارول

او اوس پخپله سکریپټ:

[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. دا سکریپټ د سیسټم ترتیباتو کې د بورډ ترتیباتو کې مشخص کړئ -> د فاکیروټ چاپیریال ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) برخه کې د چلولو لپاره دودیز سکریپټونه

سرچینه: www.habr.com

Add a comment