Buildroot - الجزء 1 - نظرة عامة ، الحد الأدنى من بناء النظام ، إعداد القائمة

مقدمة

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

بادئ ذي بدء ، لا تخلط بين نظام البناء والتوزيع. يمكن لـ Buildroot بناء نظام من مجموعة الحزم التي يتم تقديمها إليه. تم بناء Buildroot على ملفات makefiles وبالتالي يحتوي على الكثير من خيارات التخصيص. هل تريد استبدال الحزمة بإصدار آخر ، أو إضافة الحزمة الخاصة بك ، أو تغيير قواعد إنشاء الحزمة ، أو تخصيص نظام الملفات بعد تثبيت جميع الحزم؟ كل هذا يمكن أن يبني الجذور.

في روسيا ، يتم استخدام buildroot ، لكن في رأيي هناك القليل من المعلومات باللغة الروسية للمبتدئين.

الغرض من العمل هو إنشاء مجموعة توزيع ذات تنزيل مباشر وواجهة icewm ومتصفح. النظام الأساسي المستهدف هو Virtualbox.

لماذا تبني التوزيع الخاص بك؟ غالبًا ما تحتاج إلى وظائف محدودة بموارد محدودة. في كثير من الأحيان في الأتمتة ، تحتاج إلى إنشاء برنامج ثابت. يعد تكييف توزيع للأغراض العامة عن طريق تنظيف الحزم الزائدة عن الحاجة وتحويلها إلى برامج ثابتة طريقة تستغرق وقتًا أطول من تجميع توزيع جديد. استخدام Gentoo له حدوده أيضًا.

نظام Buildroot قوي للغاية ، لكنه لن يفعل شيئًا من أجلك. يمكنه فقط تمكين وأتمتة عملية التجميع.

لا يتم النظر في أنظمة البناء البديلة (yocto ، ونظام البناء المفتوح ، وما إلى ذلك) أو مقارنتها.

من أين تحصل وكيف تبدأ

موقع المشروع - buildroot.org. يمكنك هنا تنزيل أحدث إصدار وقراءة الدليل. هناك يمكنك أيضًا الاتصال بالمجتمع ، وهناك أداة تعقب الأخطاء وقوائم البريد وقناة irc.

يعمل Buildroot مع defconfigs للوحة البناء المستهدفة. Defconfig هو ملف تكوين يحتوي فقط على الخيارات التي ليس لها قيمة افتراضية. هو الذي يحدد ماذا وكيف سيتم جمعها. في هذه الحالة ، يمكنك تكوين تكوينات busybox و linux-kernel و uglibc و u-boot و barebox bootloader بشكل منفصل ، ولكن سيتم ربطها جميعًا باللوحة الهدف.
بعد تفريغ الأرشيف الذي تم تنزيله أو الاستنساخ من git ، نجهز buildroot للعمل. يمكنك قراءة المزيد عن بنية الدليل في الدليل ، وسأخبرك بأهمها:

مجلس - دليل بملفات خاصة بكل لوحة. يمكن أن تكون هذه البرامج النصية لتصوير النظام (iso و sdcart و cpio وغيرها) ، ودليل التراكب ، وتكوين kernel ، وما إلى ذلك.
التكوينات - defconfig الفعلي للوحة. Defconfig هو تكوين لوحة غير مكتمل. يخزن فقط المعلمات بخلاف الإعدادات الافتراضية.
dl - دليل مع رموز / ملفات المصدر التي تم تنزيلها للتجميع
الإخراج / الهدف - نظام الملفات المجمع لنظام التشغيل المستلم. في المستقبل ، يتم إنشاء الصور منه للتنزيل / التثبيت
الإخراج / المضيف - المرافق المضيفة للتجميع
الإخراج / البناء - عبوات مجمعة

يتم تكوين التجميع عبر KConfig. يتم استخدام نفس النظام لبناء نواة لينكس. قائمة بالأوامر الأكثر استخدامًا (التنفيذ في دليل buildroot):

  • جعل menuconfig - استدعاء تكوين البناء. يمكنك أيضًا استخدام واجهة المستخدم الرسومية (جعل nconfig ، وجعل xconfig ، وإنشاء gconfig)
  • جعل لينكس menuconfig - استدعاء تكوين النواة.
  • جعل نتائج البناء نظيفة - نظيفة (كل ما يتم تخزينه في الإخراج)
  • جعل - بناء النظام. هذا لا يعيد بناء العمليات المبنية بالفعل.
  • make defconfig_name - تبديل التكوين إلى defconfig محدد
  • make list-defconfigs - اعرض قائمة defconfigs
  • جعل المصدر - فقط قم بتنزيل ملفات التثبيت ، بدون تجميع.
  • تقديم المساعدة - اعرض قائمة بالأوامر الممكنة

ملاحظات مهمة وتلميحات مفيدة

Buildroot لا يعيد بناء الحزم المبنية بالفعل! لذلك ، قد ينشأ موقف عند الحاجة إلى إعادة تجميع كاملة.

يمكنك إعادة بناء حزمة واحدة باستخدام الأمر جعل اسم حزمة. على سبيل المثال ، يمكنك إعادة بناء نواة لينكس:

make linux-rebuild

يخزن Buildroot حالة أي حزمة عن طريق إنشاء ملفات .stamp في دليل output / build / $ packagename:

Buildroot - الجزء 1 - نظرة عامة ، الحد الأدنى من بناء النظام ، إعداد القائمة

لذلك ، من الممكن إعادة بناء root-fs والصور دون إعادة بناء الحزم:

rm output/build/host-gcc-final-*/.stamp_host_installed;rm -rf output/target;find output/ -name ".stamp_target_installed" |xargs rm -rf ; make

متغيرات مفيدة

يحتوي buildroot على مجموعة من المتغيرات لسهولة التكوين

  • $ TOPDIR - دليل جذر buildroot
  • $ BASEDIR - دليل الإخراج
  • $ HOST_DIR ، $ STAGING_DIR ، $ TARGET_DIR - مضيف fs ، مرحلي fs ، fs مستهدف بناء أدلة.
  • $ BUILD_DIR - دليل مع حزم غير معبأة ومبنية

تصور

buildroot لديه القدرة على التصور. يمكنك بناء مخطط تبعية ، بناء رسم بياني للوقت ، رسم بياني لحجم الحزمة في النظام النهائي. النتائج كملفات pdf (يمكنك الاختيار من بين svn و png) في دليل الإخراج / الرسم البياني.

أمثلة على أوامر التجسيد:

  • make graph-depends بناء شجرة التبعية
  • make <pkg>-graph-depends بناء شجرة التبعية لحزمة معينة
  • BR2_GRAPH_OUT=png make graph-build رسم بياني لوقت إنشاء المؤامرة بإخراج PNG
  • make graph-size ارسم حجم الحزمة

نصوص مفيدة

يحتوي دليل buildroot على دليل فرعي تيلس مع نصوص مفيدة. على سبيل المثال ، هناك نص برمجي يتحقق من صحة أوصاف الحزمة. يمكن أن يكون هذا مفيدًا عند إضافة حزم مخصصة (سأفعل ذلك لاحقًا). يحتوي ملف utils / readme.txt على وصف لهذه البرامج النصية.

دعونا نبني توزيع الأسهم

من المهم أن نتذكر أن جميع العمليات تتم نيابة عن مستخدم عادي ، وليس نيابة عن الجذر.
يتم تنفيذ جميع الأوامر في buildroot. يحتوي توزيع buildroot بالفعل على مجموعة من التكوينات للعديد من اللوحات المشتركة والمحاكاة الافتراضية.

انظر قائمة التكوينات:

Buildroot - الجزء 1 - نظرة عامة ، الحد الأدنى من بناء النظام ، إعداد القائمة

قم بالتبديل إلى qemu_x86_64_defconfig config

make qemu_x86_64_defconfig

وابدأ البناء

make

اكتمل البناء بنجاح ، انظر إلى النتائج:

Buildroot - الجزء 1 - نظرة عامة ، الحد الأدنى من بناء النظام ، إعداد القائمة

قام Buildroot بتجميع الصور التي يمكنك تشغيلها في Qemu ومعرفة ما إذا كانت تعمل.

qemu-system-x86_64 -kernel output/images/bzImage -hda    output/images/rootfs.ext2 -append "root=/dev/sda rw" -s -S

والنتيجة هي نظام يعمل في qemu:

Buildroot - الجزء 1 - نظرة عامة ، الحد الأدنى من بناء النظام ، إعداد القائمة

إنشاء تكوين اللوحة الخاصة بك

إضافة ملفات المجلس

انظر قائمة التكوينات:

Buildroot - الجزء 1 - نظرة عامة ، الحد الأدنى من بناء النظام ، إعداد القائمة

في القائمة نرى pc_x86_64_efi_defconfig. سننشئ مجلسنا عن طريق نسخه من التكوين:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

أنشئ دليل لوحة على الفور لتخزين البرامج النصية و rootfs-overlay والملفات الضرورية الأخرى:

mkdir board/my_x86_board

قم بالتبديل إلى هذا defconfig:

make my_x86_board_defconfig

حتى الآن ، يتطابق تكوين الإنشاء (المخزن في .config في جذر دليل buildroot) مع الجهاز المستهدف x86-64 القديم (bios) عن طريق التمهيد.

انسخ تكوين Linux-kernel (مفيد لاحقًا):

cp board/pc/linux.config board/my_x86_board/

تكوين خيارات البناء عبر KConfig

لنبدأ الإعداد:

make menuconfig 

سيتم فتح نافذة KConfig. من الممكن التهيئة بواجهة رسومية (make nconfig ، make xconfig ، make gconfig):

Buildroot - الجزء 1 - نظرة عامة ، الحد الأدنى من بناء النظام ، إعداد القائمة

ندخل القسم الأول خيارات الهدف. هنا يمكنك تحديد البنية المستهدفة التي سيتم تنفيذ التجميع من أجلها.

Buildroot - الجزء 1 - نظرة عامة ، الحد الأدنى من بناء النظام ، إعداد القائمة

خيارات البناء - هناك العديد من خيارات البناء هنا. يمكنك تحديد الدلائل برموز المصدر وعدد سلاسل الإنشاء والمرايا لتنزيل أكواد المصدر والإعدادات الأخرى. دعنا نترك الإعدادات الافتراضية.

Toolchain - تم تكوين مجموعة أدوات البناء نفسها هنا. المزيد عنه.

Buildroot - الجزء 1 - نظرة عامة ، الحد الأدنى من بناء النظام ، إعداد القائمة

نوع سلسلة الأدوات - نوع سلسلة الأدوات المستخدمة. يمكن تضمين ذلك في buildroot أو سلسلة أدوات خارجية (يمكنك تحديد دليل به ملف مبني بالفعل أو عنوان url للتنزيل). هناك خيارات إضافية لبنى مختلفة. على سبيل المثال ، بالنسبة إلى arm ، يمكنك ببساطة تحديد إصدار سلسلة أدوات Linaro الخارجية.

مكتبة C - اختيار مكتبة C. يعتمد تشغيل النظام بأكمله على هذا. عادةً ما يتم استخدام glibc ، والذي يدعم جميع الوظائف الممكنة. ولكن يمكن أن يكون كبيرًا جدًا بالنسبة لنظام مضمن ، لذلك غالبًا ما يتم اختيار uglibc أو musl. سنختار glibc (سيكون هذا مطلوبًا لاحقًا لاستخدام systemd).

سلسلة رؤوس Kernel و Custom Kernel Headers - يجب أن تتطابق مع إصدار kernel الذي سيتم إنشاؤه في النظام الذي يتم بناؤه. بالنسبة إلى رؤوس kernel ، يمكنك أيضًا تحديد المسار إلى Tarball أو مستودع git.

إصدارات المجمع الخليجي - حدد إصدار المترجم الذي سيتم استخدامه للبناء
تمكين دعم C ++ - حدد الإنشاء مع دعم مكتبات c ++ في النظام. سنحتاج هذا لاحقا.

خيارات إضافية لدول مجلس التعاون الخليجي - يمكنك تعيين خيارات إضافية للمترجم. لسنا بحاجة إليه الآن.

يسمح لك تكوين النظام بتعيين المعلمات المستقبلية للنظام الذي تم إنشاؤه:

Buildroot - الجزء 1 - نظرة عامة ، الحد الأدنى من بناء النظام ، إعداد القائمة

معظم النقاط واضحة من العنوان. دعنا ننتبه إلى النقاط التالية:
المسار إلى جداول المستخدمين - جدول بالمستخدمين الذين تم إنشاؤهم (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

مثال على ملف. سيتم إنشاء مستخدم المستخدم باستخدام مسؤول كلمة المرور ، تلقائيًا gid / uid ، / bin / sh shell ، مستخدم المجموعة الافتراضي ، عضو في جذر المجموعة ، التعليق Foo user

[alexey@alexey-pc buildroot ]$ cat board/my_x86_board/users.txt 
user -1 user -1 =admin /home/user /bin/sh root Foo user

أدلة تراكب نظام الملفات الجذر - دليل متراكب فوق target-fs المترجمة. يضيف ملفات جديدة ويحل محل الملفات الموجودة.

البرامج النصية المخصصة للتشغيل قبل إنشاء صور نظام الملفات اترك النص فارغًا الآن.

دعنا نذهب إلى قسم Kernel

Buildroot - الجزء 1 - نظرة عامة ، الحد الأدنى من بناء النظام ، إعداد القائمة

هذا هو المكان الذي يتم فيه تعيين إعدادات kernel. يتم تكوين النواة نفسها عبر make linux-menuconfig.
يمكنك ضبط إصدار kernel بطرق مختلفة: اختر من بين تلك المعروضة ، أدخل الإصدار يدويًا ، حدد مستودعًا أو كرة تار جاهزة.

تكوين Kernel - المسار إلى تهيئة kernel. يمكنك اختيار التكوين الافتراضي للبنية المحددة أو defocnfig من Linux. تحتوي مصادر Linux على مجموعة من defconfigs لأنظمة هدف مختلفة. يمكنك أن تجد الشخص الذي تحتاجه ينظر مباشرة إلى المصدر هنا. على سبيل المثال ، بالنسبة للوح الأسود من عظام البيجل ، يمكنك ذلك حدد التكوين.

يسمح لك قسم الحزم المستهدفة بتحديد الحزم التي سيتم تثبيتها على النظام الهدف. دعنا نتركه دون تغيير الآن. لاحقًا سنضيف حزمنا إلى هذه القائمة.
صور نظام الملفات - قائمة صور نظام الملفات التي سيتم بناؤها. أضف صورة ISO

Buildroot - الجزء 1 - نظرة عامة ، الحد الأدنى من بناء النظام ، إعداد القائمة

محمل الإقلاع - اختيار محمل الإقلاع المجمعة. اختر إيزولينكس

Buildroot - الجزء 1 - نظرة عامة ، الحد الأدنى من بناء النظام ، إعداد القائمة

تكوين النظام د

يصبح Systemd أحد أعمدة Linux ، جنبًا إلى جنب مع kernel و glibc. لذلك ، قمت بإخراج إطارها في فقرة منفصلة.

يتم تكوينه عبر make menuconfig ، ثم الحزم المستهدفة → أدوات النظام → systemd. هنا يمكنك تحديد خدمات systemd التي سيتم تثبيتها وبدء تشغيلها عند بدء تشغيل النظام.

Buildroot - الجزء 1 - نظرة عامة ، الحد الأدنى من بناء النظام ، إعداد القائمة

حفظ تكوين النظام

نحفظ هذا التكوين عبر KConfig.

ثم نحفظ defconfig الخاص بنا:

make savedefconfig

تهيئة Linux kernel

يتم استدعاء تكوين Linux kernel بواسطة الأمر التالي:

make linux-menuconfig

أضف دعمًا لبطاقة فيديو Virtualbox

Buildroot - الجزء 1 - نظرة عامة ، الحد الأدنى من بناء النظام ، إعداد القائمة

أضف دعم تكامل Virtualbox Guest

Buildroot - الجزء 1 - نظرة عامة ، الحد الأدنى من بناء النظام ، إعداد القائمة

حفظ وخروج. هام: سيتم حفظ التكوين في output / build / linux- $ version / config لكن ليس في اللوحة / my_x86_board / linux.config

Buildroot - الجزء 1 - نظرة عامة ، الحد الأدنى من بناء النظام ، إعداد القائمة

لذلك ، تحتاج إلى نسخ التكوين يدويًا إلى موقع التخزين:

cp output/build/linux-4.19.25/.config board/my_x86_board/linux.config

بعد ذلك ، سنقوم بإعادة تجميع كاملة للنظام بأكمله. buildroot لا يعيد بناء ما تم بناؤه بالفعل ، يجب عليك تحديد الحزم يدويًا لإعادة بنائها. من أجل عدم إضاعة الوقت والأعصاب ، من الأسهل إعادة بناء جهاز صغير ككل):

make clean;make

عند الانتهاء من التجميع ، نطلق برنامج VirtualBox (تم اختباره في الإصدارين 5.2 و 6.0) مع التمهيد من القرص المضغوط. معلمات النظام:

Buildroot - الجزء 1 - نظرة عامة ، الحد الأدنى من بناء النظام ، إعداد القائمة

بدءًا من ISO المدمج:

Buildroot - الجزء 1 - نظرة عامة ، الحد الأدنى من بناء النظام ، إعداد القائمة

قائمة المواد المستخدمة

  1. دليل Buildroot

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

إضافة تعليق