تنوع بيئات الحوسبة باستخدام الترجمة المتقاطعة

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

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

تتناول هذه المقالة حالة دراسة واحدة حيث تم إجراء الترجمة المتقاطعة لحزمة مفتوحة المصدر لـ PowerPC. ستتناول المقالة تفاصيل الأدوات وسلاسل الأدوات المستخدمة ودليل خطوة بخطوة حول كيفية تحقيق الترجمة المتقاطعة لهذه البنية.

البيان المشكلة    

بفرض وجود لوحة هدفية بتقنية PowerPC، كان الهدف هو إضافة قدرات توجيه L3 إلى هذه اللوحة. لهذا الغرض، تم النظر في مجموعة بروتوكولات التوجيه مفتوحة المصدر الشهيرة، FRRouting (FRR). 

FRR هو مجموعة بروتوكولات تمكن أي آلة تعمل بنظام Linux من التصرف كـ موجه كامل الخصائص. إنه متاح حزمة لـ amd64 وarm64 وarmhf و i386 ولكن ليس لـ PowerPC. هذا استلزم إعادة تجميع FRR عبر الأنظمة.

Build host target host

معمارية المعالج 

x86_64 

Powerpc(32-bit)

نظام التشغيل

أوبونتو 18.4

QorIQ SDK 

CPU 

12 

2 (e5500) 

RAM 

12 جيجابايت 

1 جيجابايت 

جدول 1 الفرق في البناء ومنصة الهدف

رحلة التجميع المتقاطع

هناك مرحلتان رئيسيتان في الترجمة المتقاطعة:

تكوين بيئة البناء وسلسلة أدوات مُعدة مُسبقًا

1. قم بتثبيت أدوات البناء المطلوبة في البيئة. تشمل أدوات البناء الشائعة autoconf، make، cmake، build-essentials، pkg-config، libtool، إلخ.

2. قم بإعداد سلسلة الأدوات المُعدة مُسبقًا المحددة لبيئة الجهاز المستهدف. تقدم شركات المعالج/اللوحة الخاصة بها سلاسل أدوات معمارية خاصة بها. تم الحصول على سلسلة أدوات معينة للوحة الهدف من موقع المنتج للبائع.

3. تأتي سلسلة الأدوات مع ملف بيئي، يُستخدم لتعيين المتغيرات البيئية مثل CC، GCC، PKG_CONFIG_PATH، الخ، المطلوبة للترجمة المتقاطعة. قم بتحرير ملف البيئة /opt/fsl-qoriq/2.0/environment-setup-ppce5500-fsl-linux وقم بتحديث مسار المتغيرات بالنسبة لمسار دليل سلسلة الأدوات.

Shell

 

حل الاعتماديات في مجموعة أدوات ما قبل التجميع

كل برنامج له مجموعة خاصة من الاعتماديات (أدوات/مكتبات)، والتي يجب حلها قبل التجميع المتقاطع.

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

بالنسبة لتجميع FRR، يجب بناء مكتبات libpcre2 و libyang و clippy و libelf و json-c من المصدر. بخلاف ذلك، كانت حزم مكتبات protobuf و libcap متاحة لبنية PPC (PowerPC)، والتي يمكن تثبيتها مباشرة في مجموعة أدوات ما قبل التجميع.

1. تثبيت المكتبات من الحزم

يمكن تثبيت حزم المكتبات المتاحة لبنية الهدف في نظام مجموعة أدوات ما قبل التجميع باستخدام طريقتين:

  1. الطريقة الأولى تستخدم أداة dpkg-deb المعتمدة على Ubuntu/Debian لتثبيت حزم Debian مباشرة كما هو مذكور أدناه:
    شل

     

    ملاحظة:

    • قم بتنزيل جميع حزم الاعتماد وثبتها بالترتيب.
    • قد يتم تثبيت حزم المكتبة في بنية دليل مختلفة. انسخ تلك الملفات المكتبية إلى الدلائل الصحيحة وفقًا لسلسلة الأدوات.
  2. بالطريقة الثانية، يتم استخراج حزم Debian/RPM ووضعها يدويًا في مسار دليل أدوات التجميع كما هو مذكور أدناه:
    لاستخراج حزمة Debian، استخدم أدوات ar وtar كما هو مذكور أدناه:

    ملاحظة: يعتبر هذا الأسلوب مفيدًا للأنظمة التي لا تدعم dpkg-deb.

    لاستخراج حزمة rpm، استخدم أداة rpm2cpio كالأمر أدناه:

    مثال لاستخراج الحزم ووضع الملف مع مثال لـ libcap:

    للتحقق مما إذا تم تثبيت الحزم/المكتبات بنجاح، قم بتشغيل الأمر أدناه:

2. تجاوز تجميع المكتبات

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

Shell

 

اتبع خطوات التجميع المعطاة في ملف README الخاص بالمكتبة. بالإضافة إلى ذلك، ضبط المعلمات التالية في خطوات إجراء البناء:

  1. تعيين --host parameter عند تشغيل نصي ./configure
    Shell

     

    ملاحظة:

    • <target_host_parameter> هو النظام الذي يتم بناء المكتبة/الأداة من أجله. يمكن العثور عليه في ملف البيئة الخاص بسلسلة الأدوات. إنه بادئة شائعة توجد في $CC، $LD، إلخ.
    • سيكون هناك نوعان من المكتبات التابعة. الأول مطلوب فقط لعملية الجمع، والآخر هو متطلب تبعي للتنفيذ على جهاز الاستضافة المستهدف. قم بتعيين --host parameter وفقًا لذلك.
  2. عند استخدام “make install” لبناء المكتبات المعتمدة، قم بتعيين DESTDIR إلى دليل sysroot الخاص بأداة السلسلة.
    شل

     

الاستنتاج

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

Source:
https://dzone.com/articles/heterogeneity-computing-environments-cross-compilation