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

مقدمة


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


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


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


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


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


نظام Buildroot قوي للغاية ، لكنه لن يفعل أي شيء لك. يمكن فقط إعطاء الفرص وأتمتة عملية التجميع.


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


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


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


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


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


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


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

ملاحظات مهمة ونصائح


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


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


make linux-rebuild 

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



لذلك ، يمكنك إعادة إنشاء جذر الصور والصور دون إعادة إنشاء حزم:


 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 $ - الدليل الجذر للبناء
  • 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 الحزمة make graph-size الحزمة

مخطوطات مفيدة


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


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


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


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



قم بالتبديل إلى التكوين qemu_x86_64_defconfig


 make qemu_x86_64_defconfig 

ونحن نبدأ التجمع


 make 

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



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


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

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



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


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


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



في القائمة ، نرى pc_x86_64_bios_defconfig. سننشئ لوحة لدينا عن طريق نسخها من التكوين:


 cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig 

قم بإنشاء دليل اللوحة على الفور لتخزين البرامج النصية وتراكب rootfs وغيرها من الملفات الضرورية:


 mkdir board/my_x86_board 

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


 make my_x86_board_defconfig 

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


انسخ تكوين linux-kernel (مفيد في المستقبل):


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

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


قم بتشغيل الإعداد:


 make menuconfig 

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



ندخل القسم الأول من "خيارات الهدف". هنا يمكنك اختيار الهيكل المستهدف الذي سيتم إجراء التجميع له.



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


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



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


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


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


إصدارات COMPILER GCC - حدد إصدار برنامج التحويل البرمجي الذي سيتم استخدامه للتجميع
تمكين دعم C ++ - اختر للتجميع مع دعم لمكتبات c ++ في النظام. في المستقبل ، سيكون هذا مفيدًا.


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


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



معظم النقاط واضحة من الاسم. انتبه للنقاط التالية:
المسار إلى جداول المستخدمين - جدول مع المستخدمين الذين تم إنشاؤها ( 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 

الدلائل تراكب نظام الملفات الجذر - دليل تراكب على قمة الهدف تجميعها. يضيف ملفات جديدة ويحل محل الملفات الموجودة.


البرامج النصية المخصصة للتشغيل قبل إنشاء صور نظام الملفات - البرامج النصية التي يتم تنفيذها مباشرة قبل نظام الملفات مطوية في الصور. سيتم ترك البرنامج النصي فارغًا في الوقت الحالي.


دعنا ننتقل إلى قسم Kernel



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


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


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



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



تكوين النظام


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


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



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


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


ثم احفظ defconfig لدينا:


 make savedefconfig 

تكوين نواة لينكس


يتم استدعاء تكوين linux kernel باستخدام الأمر التالي:


 make linux-menuconfig 

إضافة دعم لبطاقة الرسومات Virtualbox



إضافة دعم تكامل Virtualbox Guest



حفظ والخروج. هام : سيتم حفظ التكوين في الإخراج / الإنشاء / linux- الإصدار / config $ ، ولكن ليس في اللوحة / my_x86_board / linux.config



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


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

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


 make linux-update-defconfig 

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


 make clean;make 

عند الانتهاء من الإنشاء ، قم بتشغيل VirtualBox (تم اختباره في الإصدارات 5.2 و 6.0) مع التمهيد من محرك الأقراص المضغوطة.



بدءا من ايزو تجميعها:



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


  1. دليل Buildroot

Source: https://habr.com/ru/post/ar448638/


All Articles