بدء تشغيل GNU / Linux على لوحة ARM من البداية (باستخدام Kali و iMX.6 كمثال)

ليرة تركية، والدكتور: أقوم بإنشاء صورة Kali Linux لجهاز كمبيوتر ARM في البرنامج debootstrap, linux и u-boot.

بدء تشغيل GNU / Linux على لوحة ARM من البداية (باستخدام Kali و iMX.6 كمثال)

إذا اشتريت بعض المنتجات ذات الدفع الفردي التي لا تحظى بشعبية كبيرة، فقد تواجه عدم وجود صورة لمجموعة التوزيع المفضلة لديك لها. تقريبا نفس الشيء حدث ل المخطط له فليبر وان. ببساطة لا يوجد Kali Linux لنظام IMX6 (أنا أطبخ)، لذا يجب أن أقوم بتجميعه بنفسي.

عملية التنزيل بسيطة للغاية:

  1. تمت تهيئة الأجهزة.
  2. من بعض المناطق على جهاز التخزين (بطاقة SD/eMMC/إلخ) تتم قراءة أداة تحميل التشغيل وتنفيذها.
  3. يبحث المُحمل عن نواة نظام التشغيل ويقوم بتحميلها في بعض مناطق الذاكرة وتنفيذها.
  4. تقوم النواة بتحميل بقية نظام التشغيل.

بالنسبة لمهمتي، هذا المستوى من التفاصيل يكفي، يمكنك قراءة التفاصيل في مقال آخر. تختلف "بعض" المناطق المذكورة أعلاه من لوحة إلى أخرى، مما يخلق بعض الصعوبات في التثبيت. جارٍ تحميل منصات ARM للخادم محاولة توحيد باستخدام UEFI، ولكن طالما أنه غير متاح للجميع، فسيتعين عليك جمع كل شيء بشكل منفصل.

بناء نظام الملفات الجذر

أولا تحتاج إلى إعداد الأقسام. يدعم Das U-Boot أنظمة ملفات مختلفة، وقد اخترت FAT32 له /boot و ext3 للجذر، وهذا هو ترميز الصورة القياسي لـ Kali ضمن ARM. سأستخدم GNU Parted، لكن يمكنك جعل الأمر نفسه مألوفًا أكثر fdisk. سوف تحتاج أيضا dosfstools и e2fsprogs لإنشاء نظام الملفات: apt install parted dosfstools e2fsprogs.

تقسيم بطاقة SD:

  1. قم بتمييز بطاقة SD على أنها تستخدم تقسيم MBR: parted -s /dev/mmcblk0 mklabel msdos
  2. إنشاء قسم ل /boot لـ 128 ميجابايت: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. يجب ترك أول ميغابايت ضائعة للترميز نفسه ولمحمل الإقلاع.
  3. قم بإنشاء جذر FS لبقية السعة: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. إذا لم تقم فجأة بإنشاء أو تغيير ملفات القسم، فستحتاج إلى تنفيذ "partprobe"، ثم ستتم إعادة قراءة جدول الأقسام.
  5. قم بإنشاء نظام ملفات قسم التمهيد المسمى BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. قم بإنشاء نظام ملفات جذر مع تسمية ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

عظيم، الآن يمكنك ملئه. وهذا سوف يتطلب بالإضافة إلى ذلك debootstrap، أداة مساعدة لإنشاء FS الجذر على أنظمة التشغيل المشابهة لديبيان: apt install debootstrap.

نقوم بجمع FS:

  1. قم بتثبيت القسم على /mnt/ (استخدم نقطة تثبيت أكثر ملاءمة لنفسك): mount /dev/mmcblk0p2 /mnt
  2. في الواقع نحن نملأ نظام الملفات: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. معامل --include تم تحديده لتثبيت بعض الحزم بشكل إضافي، وقد قمت بتحديد محاكي QEMU مبني بشكل ثابت. انها تسمح لك لأداء chroot لبيئة ARM. يمكن العثور على معنى الخيارات الأخرى في man debootstrap. لا تنس أنه ليس كل لوحة ARM تدعم البنية armhf.
  3. بسبب الاختلاف في البنيات debootstrap يتم تنفيذها على مرحلتين، ويتم تنفيذ الثانية على النحو التالي: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. الآن أنت بحاجة إلى الدوران: chroot /mnt /bin/bash
  5. نحن نملأ /etc/hosts и /etc/hostname الهدف FS. املأ نفس المحتوى الموجود على جهاز الكمبيوتر المحلي الخاص بك، وتذكر استبدال اسم المضيف فقط.
  6. يمكنك تخصيص كل شيء آخر. على وجه الخصوص، أقوم بتثبيت locales (مفاتيح المستودع)، وإعادة تكوين اللغات والمنطقة الزمنية (dpkg-reconfigure locales tzdata). لا تنس تعيين كلمة المرور باستخدام الأمر passwd.
  7. تعيين كلمة مرور ل root الفريق passwd.
  8. اكتمال تحضير الصورة لي بالملء /etc/fstab داخل /mnt/.

سأقوم بالتحميل وفقًا للعلامات التي تم إنشاؤها مسبقًا، وبالتالي سيكون المحتوى كما يلي:

LABEL=ROOTFS / الأخطاء التلقائية=remount-ro 0 1
LABEL=BOOT /التمهيد التلقائي الافتراضي 0 0

أخيرًا، يمكنك تحميل قسم التمهيد، وسنحتاج إليه للنواة: `mount /dev/mmcblk0p1 /mnt/boot/`

بناء لينكس

لبناء النواة (ثم محمل الإقلاع) على اختبار دبيان، تحتاج إلى تثبيت المجموعة القياسية من ملفات رأس مجلس التعاون الخليجي، وGNU Make، ومكتبة GNU C للبنية المستهدفة (لدي armhf)، بالإضافة إلى رؤوس OpenSSL وآلة حاسبة وحدة التحكم bc, bison и flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. نظرًا لأن المُحمل الافتراضي يبحث عن ملف zImage في نظام الملفات الخاص بقسم التمهيد، حان الوقت لكسر محرك الأقراص المحمول.

  1. إن استنساخ النواة طويل جدًا ، لذا سأقوم بتنزيل: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. قم بفك الضغط وانتقل إلى الدليل المصدر: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. التكوين قبل التجميع: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. التكوين موجود في الدليل arch/arm/configs/. إذا لم يكن هناك أي شيء، فيمكنك محاولة البحث عن ملف جاهز وتنزيله وتمرير اسم الملف في هذا الدليل إلى المعلمة KBUILD_DEFCONFIG. في الحالات القصوى، انتقل فورًا إلى الفقرة التالية.
  3. يمكنك تعديل الإعدادات بشكل اختياري: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. وقم بتجميع الصورة: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. الآن يمكنك نسخ ملف النواة: cp arch/arm/boot/zImage /mnt/boot/
  6. والملفات من DeviceTree (وصف الأجهزة المتوفرة على اللوحة): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. وقم بتثبيت الوحدات المجمعة كملفات منفصلة: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install

النواة جاهزة. يمكنك إلغاء تحميل كل شيء: umount /mnt/boot/ /mnt/

حذاء داس يو

نظرًا لأن برنامج bootloader تفاعلي ، فإن اللوحة نفسها وجهاز التخزين وجهاز USB-to-UART الاختياري كافية لاختبار تشغيلها. بمعنى أنه يمكنك تأجيل kernel و OS لوقت لاحق.

تقترح الغالبية العظمى من الشركات المصنعة استخدام Das U-Boot للتمهيد الأساسي. عادةً ما يتم تقديم الدعم الكامل في شوكة خاصة به، لكن لا تنس المساهمة في المنبع. في حالتي، يتم دعم اللوحة في الخط الرئيسيهكذا شوكة أنا تجاهل.

نقوم بتجميع أداة تحميل التشغيل نفسها:

  1. استنساخ الفرع المستقر من المستودع: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. دعنا نذهب إلى الدليل نفسه: cd u-boot
  3. إعداد تكوين البناء: make mx6ull_14x14_evk_defconfig. يعمل هذا فقط إذا كان التكوين موجودًا في Das U-Boot نفسه، وإلا فستحتاج إلى العثور على تكوين الشركة المصنعة ووضعه في جذر المستودع في الملف .config، أو مجمعة بطريقة أخرى موصى بها من قبل الشركة المصنعة.
  4. نقوم بتجميع صورة أداة تحميل التشغيل نفسها باستخدام مترجم متقاطع armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

ونتيجة لذلك، نحصل على الملف u-boot.imx، هذه صورة جاهزة يمكن كتابتها على محرك أقراص فلاش USB. نكتب على بطاقة SD، وتخطي أول 1024 بايت. لماذا اخترت الهدف u-boot.imx؟ لماذا غاب بالضبط 1024 بايت؟ وهذا ما يقترحون القيام به توثيق. بالنسبة للوحات أخرى، قد تكون عملية بناء الصور وحرقها مختلفة قليلاً.

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

بدلا من خاتمة

هل تعلم أن جبهة الدلفين ليست عظمية؟ إنها حرفيًا عين ثالثة، عدسة دهنية لتحديد الموقع بالصدى!

بدء تشغيل GNU / Linux على لوحة ARM من البداية (باستخدام Kali و iMX.6 كمثال)

بدء تشغيل GNU / Linux على لوحة ARM من البداية (باستخدام Kali و iMX.6 كمثال)

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