في هذا القسم ، أراعي بعض إمكانيات التخصيص التي أحتاجها. هذه ليست قائمة كاملة بما يقدمه 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 - ملف به وصف للمستخدمين الذين تم إنشاؤهم
يحتوي دليل configs على defconfigs للوحاتنا. لدينا واحد فقط.
حزمة - كتالوج مع حزم لدينا. في البداية ، يحتوي 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
السطر الثاني عبارة عن وصف موجز يقرأه الإنسان.
Config.in ، external.mk - ملفات لوصف الحزم المضافة. إذا لم تقم بإضافة الحزم الخاصة بك ، يمكن ترك هذه الملفات فارغة. حتى الآن سنفعل ذلك.
الآن لدينا شجرة خارجية جاهزة ، تحتوي على defconfig من مجلس الإدارة لدينا والملفات التي يحتاجها. سنذهب إلى دليل buildroot ، وسوف نحدد استخدام الشجرة الخارجية:
[alexey@alexey-pc buildroot]$ make BR2_EXTERNAL=../my_tree/ my_x86_board_defconfig
في الأمر الأول ، نستخدم الوسيطة BR2_EXTERNAL = .. / my_tree / ، والتي تشير إلى استخدام شجرة خارجية ، ويمكنك تحديد عدة أشجار خارجية في نفس الوقت للاستخدام ، ويكفي القيام بذلك مرة واحدة ، وبعد ذلك يتم إنشاء ملف الإخراج / .br-external.mk الذي يخزن معلومات حول الشجرة الخارجية المستخدمة:
[alexey@alexey-pc buildroot]$ cat output/.br-external.mk
! المهم في هذا الملف ، ستكون المسارات مطلقة!
يظهر عنصر القائمة الخيارات الخارجية:

سوف تحتوي هذه القائمة الفرعية على حزمنا من الشجرة الخارجية الخاصة بنا. الآن هذا القسم فارغ.
من المهم الآن بالنسبة لنا إعادة كتابة المسارات اللازمة لاستخدام شجرة خارجية.
لاحظ أنه في القسم خيارات البناء → الموقع لحفظ تهيئة 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 تراكب:
هذه الآلية تجعل من السهل إضافة / استبدال الملفات في نظام الملفات الهدف.
إذا كان الملف في الجذر 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).
نحن نجمع ونفحص:

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

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

والآن السيناريو نفسه:
[alexey@alexey-pc buildroot]$ cat ../my_tree/board/my_x86_board/bef_cr_fs_img.sh
بعد التجميع ، يمكنك رؤية هذا الملف في النظام.
في الممارسة العملية ، يمكن أن يصبح البرنامج النصي كبيرًا. لذلك ، في مشروع حقيقي ، ذهبت بطريقة أكثر تقدماً:
- إنشاء دليل (my_tree / board_my_x86_board / inside_fakeroot_scripts) ، تكمن فيه البرامج النصية للتنفيذ ، مع الأرقام التسلسلية. على سبيل المثال ، 0001-add-my_small_linux-version.sh ، 0002-clear-apache-root-dir.sh
- كتبت نصًا (my_tree / board_my_x86_board / run_inside_fakeroot.sh) يمر بهذا الدليل ويقوم بتشغيل البرامج النصية فيه بالتسلسل
- يشار إلى هذا البرنامج النصي في إعدادات اللوحة في تكوين النظام -> نصوص مخصصة للتشغيل داخل بيئة fakeroot ($ (BR2_EXTERNAL_my_tree_PATH) /board/my_x86_board/run_inside_fakeroot.sh)