Buildroot - حصہ 2. اپنے بورڈ کی ترتیب بنانا؛ بیرونی درخت، روٹ ایف ایس اوورلے، پوسٹ بلڈ اسکرپٹس کا استعمال

اس سیکشن میں میں حسب ضرورت کے کچھ اختیارات کو دیکھتا ہوں جن کی مجھے ضرورت ہے۔ یہ بلڈروٹ کی پیش کش کی مکمل فہرست نہیں ہے، لیکن وہ کافی فعال ہیں اور خود بلڈروٹ کی فائلوں میں مداخلت کی ضرورت نہیں ہے۔

تخصیص کے لیے EXTERNAL میکانزم کا استعمال

پچھلے مضمون میں ہم نے بورڈ کی ڈیف کنفیگریشن اور ضروری فائلوں کو براہ راست بلڈروٹ ڈائرکٹری میں شامل کرکے آپ کی اپنی ترتیب کو شامل کرنے کی ایک سادہ مثال کو دیکھا۔

لیکن یہ طریقہ بہت آسان نہیں ہے، خاص طور پر جب 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 ونڈو مینیجر اور Slim گرافیکل لاگ ان مینیجر کو شامل کریں گے۔
پیچ - آپ کو مختلف پیکجوں کے لیے اپنے پیچ کو آسانی سے اسٹور کرنے کی اجازت دیتا ہے۔ ذیل میں ایک علیحدہ سیکشن میں مزید تفصیلات۔
اب ہمیں اپنے بیرونی درخت کے لیے تفصیلی فائلیں شامل کرنے کی ضرورت ہے۔ اس کے لیے 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 - اضافی پیکجوں کو بیان کرنے کے لیے فائلیں۔ اگر آپ اپنے پیکجز کو شامل نہیں کرتے ہیں، تو یہ فائلیں خالی رہ سکتی ہیں۔ ابھی کے لیے، ہم یہی کریں گے۔
اب ہمارے پاس اپنا ایکسٹرنل ٹری تیار ہے، جس میں ہمارے بورڈ کی ڈیف کنفیگ اور اس کی ضرورت کی فائلیں ہیں۔ آئیے بلڈروٹ ڈائرکٹری پر جائیں اور 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. اپنے بورڈ کی ترتیب بنانا؛ بیرونی درخت، روٹ ایف ایس اوورلے، پوسٹ بلڈ اسکرپٹس کا استعمال

اس ذیلی مینو میں ہمارے بیرونی درخت سے ہمارے پیکجز شامل ہوں گے۔ یہ سیکشن فی الحال خالی ہے۔

اب ہمارے لیے یہ زیادہ اہم ہے کہ بیرونی درخت کو استعمال کرنے کے لیے ضروری راستوں کو دوبارہ لکھیں۔

براہ کرم نوٹ کریں کہ Build options → Location to save buildroot config سیکشن میں، محفوظ کردہ defconfig کے لیے ایک مکمل راستہ ہوگا۔ یہ 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 اوورلے 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. اپنے بورڈ کی ترتیب بنانا؛ بیرونی درخت، روٹ ایف ایس اوورلے، پوسٹ بلڈ اسکرپٹس کا استعمال

سسٹم اسمبلی کے مختلف مراحل پر حسب ضرورت اسکرپٹس کا نفاذ

اکثر آپ کو ٹارگٹ فائل سسٹم کے اندر کچھ کام کرنے کی ضرورت ہوتی ہے اس سے پہلے کہ اسے امیجز میں پیک کیا جائے۔

یہ سسٹم کنفیگریشن سیکشن میں کیا جا سکتا ہے:

Buildroot - حصہ 2. اپنے بورڈ کی ترتیب بنانا؛ بیرونی درخت، روٹ ایف ایس اوورلے، پوسٹ بلڈ اسکرپٹس کا استعمال

پہلی دو اسکرپٹس کو ٹارگٹ فائل سسٹم بنانے کے بعد عمل میں لایا جاتا ہے، لیکن اس سے پہلے کہ اسے امیجز میں پیک کیا جائے۔ فرق یہ ہے کہ fakeroot اسکرپٹ کو fakeroot کے تناظر میں عمل میں لایا جاتا ہے، جو روٹ صارف کے طور پر کام کی نقل کرتا ہے۔

سسٹم امیجز بننے کے بعد آخری اسکرپٹ پر عمل کیا جاتا ہے۔ آپ اس میں اضافی کارروائیاں انجام دے سکتے ہیں، مثال کے طور پر، ضروری فائلوں کو NFS سرور پر کاپی کریں یا اپنے آلے کے فرم ویئر کی تصویر بنائیں۔

مثال کے طور پر، میں ایک اسکرپٹ بناؤں گا جو ورژن لکھے گا اور تاریخ کو /etc/ پر لکھے گا۔
پہلے میں اپنے بیرونی درخت میں اس فائل کے راستے کی نشاندہی کروں گا۔

Buildroot - حصہ 2. اپنے بورڈ کی ترتیب بنانا؛ بیرونی درخت، روٹ ایف ایس اوورلے، پوسٹ بلڈ اسکرپٹس کا استعمال

اور اب اسکرپٹ خود:

[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

نیا تبصرہ شامل کریں