Buildroot - حصو 2. توهان جي بورڊ جي جوڙجڪ ٺاهڻ؛ ٻاهرين وڻ کي استعمال ڪندي، روٽف-اوورلي، پوسٽ-بلڊ اسڪرپٽ

هن حصي ۾ آئون ڪجهه ڪسٽمائيزيشن اختيارن کي ڏسان ٿو جيڪي مون کي گهربل آهن. هي مڪمل فهرست نه آهي ته ڇا buildroot پيش ڪري ٿو، پر اهي ڪافي فنڪشنل آهن ۽ پاڻ کي buildroot جي فائلن ۾ مداخلت جي ضرورت ناهي.

ڪسٽمائيزيشن لاءِ EXTERNAL ميڪانيزم استعمال ڪندي

پوئين مضمون ۾ اسان هڪ سادي مثال تي غور ڪيو توهان جي پنهنجي ترتيب کي شامل ڪندي بورڊ جي defconfig کي شامل ڪندي ۽ ضروري فائلون سڌو سنئون بلڊروٽ ڊاريڪٽري ۾.

پر اهو طريقو بلڪل آسان ناهي، خاص طور تي جڏهن buildroot کي اپڊيٽ ڪرڻ. هن مسئلي کي حل ڪرڻ لاء هڪ ميکانيزم آهي ٻاهرين وڻ. ان جو خلاصو اهو آهي ته توهان بورڊ، ترتيب، پيڪيجز ۽ ٻيون ڊائريڪٽريون هڪ الڳ ڊاريڪٽري ۾ محفوظ ڪري سگهو ٿا (مثال طور، مان پيڪيجز تي پيچ لاڳو ڪرڻ لاءِ پيچ ڊاريڪٽري استعمال ڪريان ٿو، وڌيڪ تفصيل هڪ الڳ سيڪشن ۾) ۽ buildroot پاڻ انهن کي شامل ڪندو. ان جي ڊاريڪٽري.

نوٽ: توهان هڪ ئي وقت ڪيترن ئي ٻاهرين وڻن کي مٿي ڪري سگهو ٿا، اتي هڪ مثال آهي buildroot manual ۾

اچو ته هڪ ڊاريڪٽري ٺاهيو my_tree، جيڪو بلڊروٽ ڊاريڪٽري جي اڳيان واقع آهي ۽ اسان جي ترتيب کي اتي منتقل ڪريو. ٻاھر ڏنل فائل جي جوڙجڪ ٿيڻ گھرجي:

[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

جئين توهان ڏسي سگهو ٿا، عام طور تي ساخت تعمير جي جوڙجڪ کي ورجائي ٿو.

ڊاريڪٽري بورڊ اسان جي ڪيس ۾ هر بورڊ لاءِ مخصوص فائلون شامل آهن:

  • bef_cr_fs_img.sh هڪ اسڪرپٽ آهي جيڪو ٽارگيٽ فائل سسٽم ٺاهڻ کان پوءِ عمل ڪيو ويندو، پر ان کي تصويرن ۾ پيڪ ڪرڻ کان اڳ. اسان ان کي مستقبل ۾ استعمال ڪنداسين
  • linux.config - kernel ترتيب
  • 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. توهان جي بورڊ جي جوڙجڪ ٺاهڻ؛ ٻاهرين وڻ کي استعمال ڪندي، روٽف-اوورلي، پوسٽ-بلڊ اسڪرپٽ

هي ذيلي مينيو اسان جي خارجي وڻ مان اسان جي پيڪيجز تي مشتمل هوندو. ھي حصو ھن وقت خالي آھي.

ھاڻي اھو وڌيڪ ضروري آھي ته اسان لاءِ بيروني وڻ استعمال ڪرڻ لاءِ ضروري رستا ٻيهر لکون.

مھرباني ڪري نوٽ ڪريو ته تعمير جي اختيارن ۾ → جڳھ کي محفوظ ڪرڻ لاءِ 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 اوورلي ۾ آهي ۽ ٽارگيٽ ۾، پوء ان کي تبديل ڪيو ويندو.
پهرين، اچو ته روٽ 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. توهان جي بورڊ جي جوڙجڪ ٺاهڻ؛ ٻاهرين وڻ کي استعمال ڪندي، روٽف-اوورلي، پوسٽ-بلڊ اسڪرپٽ

سسٽم اسيمبلي جي مختلف مرحلن تي ڪسٽمائيزيشن اسڪرپٽ جي عملدرآمد

گهڻو ڪري توهان کي ٽارگيٽ فائل سسٽم اندر ڪجهه ڪم ڪرڻ جي ضرورت آهي ان کان اڳ تصويرن ۾ پيڪيج ڪيو وڃي.

اهو ٿي سگهي ٿو سسٽم جي جوڙجڪ سيڪشن ۾:

Buildroot - حصو 2. توهان جي بورڊ جي جوڙجڪ ٺاهڻ؛ ٻاهرين وڻ کي استعمال ڪندي، روٽف-اوورلي، پوسٽ-بلڊ اسڪرپٽ

پھريون ٻه اسڪرپٽ ھدف واري فائل سسٽم جي تعمير ٿيڻ کان پوء، پر ان کان اڳ تصويرن ۾ پيڪيج ٿيل آھن. فرق اهو آهي ته fakeroot اسڪرپٽ fakeroot جي حوالي سان عمل ڪيو ويو آهي، جيڪو روٽ استعمال ڪندڙ جي طور تي ڪم کي نقل ڪري ٿو.

آخري رسم الخط تي عمل ڪيو ويندو آهي بعد ۾ سسٽم تصويرون ٺاهي وينديون آهن. توھان ان ۾ اضافي ڪارناما انجام ڪري سگھو ٿا، مثال طور، ضروري فائلن کي نقل ڪريو NFS سرور ڏانھن يا پنھنجي ڊوائيس جي firmware جي تصوير ٺاھيو.

مثال طور، مان هڪ اسڪرپٽ ٺاهيندس جيڪو ورجن لکندو ۽ تاريخ ٺاهيندو /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

تبصرو شامل ڪريو