Buildroot - الجزء 2. إنشاء تكوين اللوحة الخاصة بك؛ باستخدام الشجرة الخارجية وتراكب rootfs والبرامج النصية لما بعد الإنشاء

ألقي نظرة في هذا القسم على بعض خيارات التخصيص التي أحتاجها. هذه ليست قائمة كاملة بما يقدمه buildroot، لكنها فعالة تمامًا ولا تتطلب التدخل في ملفات buildroot نفسها.

استخدام الآلية الخارجية للتخصيص

في مقال سابق لقد نظرنا إلى مثال بسيط لإضافة التكوين الخاص بك عن طريق إضافة defconfig الخاص باللوحة والملفات الضرورية مباشرة إلى دليل Buildroot.

ولكن هذه الطريقة ليست مريحة للغاية، خاصة عند تحديث 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 - دليل للتراكب أعلى نظام الملفات الهدف
  • users.txt - ملف يصف المستخدمين المراد إنشاؤهم

دليل التكوينات يحتوي على إلغاء التكوين للوحاتنا. لدينا واحد فقط.

فئة الإشتراك - كتالوج مع حزمنا. في البداية، يحتوي 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

السطر الأول هو العنوان. في buildroot المستقبلي قم بإنشاء متغير $(BR2_EXTERNAL_MY_TREE_PATH)، والتي يجب استخدامها عند تكوين التجميع. على سبيل المثال، يمكن تعيين المسار إلى ملف المستخدم على النحو التالي:

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

السطر الثاني عبارة عن وصف قصير يمكن قراءته بواسطة الإنسان.

التكوين.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=../my_tree/، للإشارة إلى استخدام شجرة خارجية. يمكنك تحديد عدة أشجار خارجية للاستخدام في نفس الوقت. في هذه الحالة، ما عليك سوى القيام بذلك مرة واحدة فقط، وبعد ذلك يتم إنشاء ملف input/.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 والبرامج النصية لما بعد الإنشاء

ستحتوي هذه القائمة الفرعية على حزمنا من شجرتنا الخارجية. هذا القسم فارغ حاليا.

الآن أصبح من المهم بالنسبة لنا إعادة كتابة المسارات اللازمة لاستخدام الشجرة الخارجية.

يرجى ملاحظة أنه في خيارات البناء → موقع حفظ قسم تكوين buildroot، سيكون هناك مسار مطلق لملف defconfig المحفوظ. يتم تشكيله في لحظة تحديد استخدام extgernal_tree.

سنقوم أيضًا بتصحيح المسارات في قسم تكوين النظام. بالنسبة لجدول مع المستخدمين الذين تم إنشاؤهم:

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

في قسم Kernel، قم بتغيير المسار إلى تكوين kernel:

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

الآن سيتم استخدام ملفاتنا من شجرتنا الخارجية أثناء التجميع. عند الانتقال إلى دليل آخر أو تحديث Buildroot، سيكون لدينا الحد الأدنى من المشاكل.

إضافة تراكب الجذر fs:

تتيح لك هذه الآلية إضافة/استبدال الملفات بسهولة في نظام الملفات الهدف.
إذا كان الملف موجودًا في تراكب root fs، ولكن ليس في الهدف، فستتم إضافته
إذا كان الملف موجودًا في تراكب root 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 والبرامج النصية لما بعد الإنشاء

تنفيذ البرامج النصية للتخصيص في مراحل مختلفة من تجميع النظام

غالبًا ما تحتاج إلى تنفيذ بعض الأعمال داخل نظام الملفات الهدف قبل تجميعه في صور.

يمكن القيام بذلك في قسم تكوين النظام:

Buildroot - الجزء 2. إنشاء تكوين اللوحة الخاصة بك؛ باستخدام الشجرة الخارجية وتراكب rootfs والبرامج النصية لما بعد الإنشاء

يتم تنفيذ أول نصين بعد إنشاء نظام الملفات الهدف، ولكن قبل تجميعه في صور. الفرق هو أن البرنامج النصي Fakeroot يتم تنفيذه في سياق Fakeroot، والذي يحاكي العمل كمستخدم جذري.

يتم تنفيذ البرنامج النصي الأخير بعد إنشاء صور النظام. يمكنك تنفيذ إجراءات إضافية فيه، على سبيل المثال، نسخ الملفات الضرورية إلى خادم NFS أو إنشاء صورة للبرنامج الثابت لجهازك.

على سبيل المثال، سأقوم بإنشاء برنامج نصي يكتب الإصدار وتاريخ البناء إلى /etc/.
أولاً سأشير إلى المسار إلى هذا الملف في شجرتي الخارجية:

Buildroot - الجزء 2. إنشاء تكوين اللوحة الخاصة بك؛ باستخدام الشجرة الخارجية وتراكب rootfs والبرامج النصية لما بعد الإنشاء

والآن البرنامج النصي نفسه:

[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)

المصدر: www.habr.com

إضافة تعليق