مقدمة
في هذه السلسلة من المقالات ، أرغب في مراجعة نظام إنشاء buildroot ومشاركة تجربتي في تخصيصه. ستكون هناك خبرة عملية في إنشاء نظام تشغيل صغير بواجهة رسومية وأدنى حد من الوظائف.
بادئ ذي بدء ، لا تخلط بين نظام البناء والتوزيع. يمكن لـ Buildroot بناء نظام من مجموعة الحزم التي يتم تقديمها إليه. تم بناء Buildroot على ملفات makefiles وبالتالي يحتوي على الكثير من خيارات التخصيص. هل تريد استبدال الحزمة بإصدار آخر ، أو إضافة الحزمة الخاصة بك ، أو تغيير قواعد إنشاء الحزمة ، أو تخصيص نظام الملفات بعد تثبيت جميع الحزم؟ كل هذا يمكن أن يبني الجذور.
في روسيا ، يتم استخدام buildroot ، لكن في رأيي هناك القليل من المعلومات باللغة الروسية للمبتدئين.
الغرض من العمل هو إنشاء مجموعة توزيع ذات تنزيل مباشر وواجهة icewm ومتصفح. النظام الأساسي المستهدف هو Virtualbox.
لماذا تبني التوزيع الخاص بك؟ غالبًا ما تحتاج إلى وظائف محدودة بموارد محدودة. في كثير من الأحيان في الأتمتة ، تحتاج إلى إنشاء برنامج ثابت. يعد تكييف توزيع للأغراض العامة عن طريق تنظيف الحزم الزائدة عن الحاجة وتحويلها إلى برامج ثابتة طريقة تستغرق وقتًا أطول من تجميع توزيع جديد. استخدام Gentoo له حدوده أيضًا.
نظام Buildroot قوي للغاية ، لكنه لن يفعل شيئًا من أجلك. يمكنه فقط تمكين وأتمتة عملية التجميع.
لا يتم النظر في أنظمة البناء البديلة (yocto ، ونظام البناء المفتوح ، وما إلى ذلك) أو مقارنتها.
من أين تحصل وكيف تبدأ
موقع المشروع -
يعمل 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:
لذلك ، من الممكن إعادة بناء 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
رسم بياني لوقت إنشاء المؤامرة بإخراج PNGmake graph-size
ارسم حجم الحزمة
نصوص مفيدة
يحتوي دليل buildroot على دليل فرعي تيلس مع نصوص مفيدة. على سبيل المثال ، هناك نص برمجي يتحقق من صحة أوصاف الحزمة. يمكن أن يكون هذا مفيدًا عند إضافة حزم مخصصة (سأفعل ذلك لاحقًا). يحتوي ملف utils / readme.txt على وصف لهذه البرامج النصية.
دعونا نبني توزيع الأسهم
من المهم أن نتذكر أن جميع العمليات تتم نيابة عن مستخدم عادي ، وليس نيابة عن الجذر.
يتم تنفيذ جميع الأوامر في buildroot. يحتوي توزيع buildroot بالفعل على مجموعة من التكوينات للعديد من اللوحات المشتركة والمحاكاة الافتراضية.
انظر قائمة التكوينات:
قم بالتبديل إلى qemu_x86_64_defconfig config
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_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):
ندخل القسم الأول خيارات الهدف. هنا يمكنك تحديد البنية المستهدفة التي سيتم تنفيذ التجميع من أجلها.
خيارات البناء - هناك العديد من خيارات البناء هنا. يمكنك تحديد الدلائل برموز المصدر وعدد سلاسل الإنشاء والمرايا لتنزيل أكواد المصدر والإعدادات الأخرى. دعنا نترك الإعدادات الافتراضية.
Toolchain - تم تكوين مجموعة أدوات البناء نفسها هنا. المزيد عنه.
نوع سلسلة الأدوات - نوع سلسلة الأدوات المستخدمة. يمكن تضمين ذلك في buildroot أو سلسلة أدوات خارجية (يمكنك تحديد دليل به ملف مبني بالفعل أو عنوان url للتنزيل). هناك خيارات إضافية لبنى مختلفة. على سبيل المثال ، بالنسبة إلى arm ، يمكنك ببساطة تحديد إصدار سلسلة أدوات Linaro الخارجية.
مكتبة C - اختيار مكتبة C. يعتمد تشغيل النظام بأكمله على هذا. عادةً ما يتم استخدام glibc ، والذي يدعم جميع الوظائف الممكنة. ولكن يمكن أن يكون كبيرًا جدًا بالنسبة لنظام مضمن ، لذلك غالبًا ما يتم اختيار uglibc أو musl. سنختار glibc (سيكون هذا مطلوبًا لاحقًا لاستخدام systemd).
سلسلة رؤوس Kernel و Custom Kernel Headers - يجب أن تتطابق مع إصدار kernel الذي سيتم إنشاؤه في النظام الذي يتم بناؤه. بالنسبة إلى رؤوس kernel ، يمكنك أيضًا تحديد المسار إلى Tarball أو مستودع git.
إصدارات المجمع الخليجي - حدد إصدار المترجم الذي سيتم استخدامه للبناء
تمكين دعم C ++ - حدد الإنشاء مع دعم مكتبات c ++ في النظام. سنحتاج هذا لاحقا.
خيارات إضافية لدول مجلس التعاون الخليجي - يمكنك تعيين خيارات إضافية للمترجم. لسنا بحاجة إليه الآن.
يسمح لك تكوين النظام بتعيين المعلمات المستقبلية للنظام الذي تم إنشاؤه:
معظم النقاط واضحة من العنوان. دعنا ننتبه إلى النقاط التالية:
المسار إلى جداول المستخدمين - جدول بالمستخدمين الذين تم إنشاؤهم (
مثال على ملف. سيتم إنشاء مستخدم المستخدم باستخدام مسؤول كلمة المرور ، تلقائيًا 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
هذا هو المكان الذي يتم فيه تعيين إعدادات kernel. يتم تكوين النواة نفسها عبر make linux-menuconfig.
يمكنك ضبط إصدار kernel بطرق مختلفة: اختر من بين تلك المعروضة ، أدخل الإصدار يدويًا ، حدد مستودعًا أو كرة تار جاهزة.
تكوين Kernel - المسار إلى تهيئة kernel. يمكنك اختيار التكوين الافتراضي للبنية المحددة أو defocnfig من Linux. تحتوي مصادر Linux على مجموعة من defconfigs لأنظمة هدف مختلفة. يمكنك أن تجد الشخص الذي تحتاجه
يسمح لك قسم الحزم المستهدفة بتحديد الحزم التي سيتم تثبيتها على النظام الهدف. دعنا نتركه دون تغيير الآن. لاحقًا سنضيف حزمنا إلى هذه القائمة.
صور نظام الملفات - قائمة صور نظام الملفات التي سيتم بناؤها. أضف صورة ISO
محمل الإقلاع - اختيار محمل الإقلاع المجمعة. اختر إيزولينكس
تكوين النظام د
يصبح Systemd أحد أعمدة Linux ، جنبًا إلى جنب مع kernel و glibc. لذلك ، قمت بإخراج إطارها في فقرة منفصلة.
يتم تكوينه عبر make menuconfig ، ثم الحزم المستهدفة → أدوات النظام → systemd. هنا يمكنك تحديد خدمات systemd التي سيتم تثبيتها وبدء تشغيلها عند بدء تشغيل النظام.
حفظ تكوين النظام
نحفظ هذا التكوين عبر KConfig.
ثم نحفظ defconfig الخاص بنا:
make savedefconfig
تهيئة Linux kernel
يتم استدعاء تكوين Linux kernel بواسطة الأمر التالي:
make linux-menuconfig
أضف دعمًا لبطاقة فيديو Virtualbox
أضف دعم تكامل Virtualbox Guest
حفظ وخروج. هام: سيتم حفظ التكوين في output / build / linux- $ version / config لكن ليس في اللوحة / my_x86_board / linux.config
لذلك ، تحتاج إلى نسخ التكوين يدويًا إلى موقع التخزين:
cp output/build/linux-4.19.25/.config board/my_x86_board/linux.config
بعد ذلك ، سنقوم بإعادة تجميع كاملة للنظام بأكمله. buildroot لا يعيد بناء ما تم بناؤه بالفعل ، يجب عليك تحديد الحزم يدويًا لإعادة بنائها. من أجل عدم إضاعة الوقت والأعصاب ، من الأسهل إعادة بناء جهاز صغير ككل):
make clean;make
عند الانتهاء من التجميع ، نطلق برنامج VirtualBox (تم اختباره في الإصدارين 5.2 و 6.0) مع التمهيد من القرص المضغوط. معلمات النظام:
بدءًا من ISO المدمج:
قائمة المواد المستخدمة
- دليل Buildroot
المصدر: www.habr.com