הטרוגניות של סביבות חישוב באמצעות קומפילציה חוצה

עם הגעת התוכנה קוד פתוח והקבלה של פתרונות אלו ביצירת מערכות מורכבות, היכולת לפתח אפליקציות שיכולות לרוץ בצורה חלקה על מספר פלטפורמות חומרה הופכת לחשובה מאוד. קיימת צורך קבוע לפתח את התוכנה על ארכיטקטורה אחת אך לקבל את היכולת להריץ אותם על ארכיטקטורות יעד אחרות. טכניקה נפוצה להשגת כך היא קריסה מרובה של האפליקציה עבור ארכיטקטורת היעד. 

קרוס-קומפילציה חשובה במערכות מוטבעות שבהן המטרה היא להריץ אפליקציות על חומרה מותאמת כמו לוחות ARM ו-PowerPC. מערכות אלה מוגבלות במשאבים ולכן קומפילציה ישירה אינה אופציה. לכן, מפתחים יעשו שימוש בארכיטקטורת x86 המקובלת כמארח וישתמשו בצרפי כלים ספציפיים לחומרה היעד, יוצרים בינאריים שתואמים את החומרה היעד.

מאמר זה מכסה מקרה מחקר אחד בו נעשתה קרוס-קומפילציה של חבילת קוד פתוח עבור PowerPC. המאמר יכסה את פרטי כלי העבודה והצרפים שנעשה בהם שימוש ומדריך שלב אחר שלב על איך הושגה קרוס-קומפילציה עבור ארכיטקטורה זו.

Tההצהרת בעיה   

בנתונה לוח מטרה עם ממשק PowerPC, הכוונה הייתה להוסיף יכולות ניתוב לשכבת L3 ללוח זה. למטרה זו, נחשב פרוטוקול ניתוב פתוח פופולרי, FRRouting (FRR). 

FRR הוא סוויטת פרוטוקולים שמאפשרת לכל מכונת Linux להתנהג כמו נתב מלא. הוא מועטר עבור amd64, arm64, armhf, ו-i386 אך לא עבור PowerPC. כל זה דרש את הקמתו של FRR באמצעות צלילה.

Build host target host

מניאת מעבד

x86_64

Powerpc(32-ביט)

מערכת הפעלה

Ubuntu 18.4

QorIQ SDK 

CPU 

12 

2 (e5500) 

RAM 

12GB 

1GB 

Table 1Difference in Build and Target platform

The Cross-Compilation Journey

ישנם שני שלבים עיקריים בצינור ההרכבה הצלבית:

הגדרת סביבת הבנייה וצינור הכלים המקדים שהורכבו מראש

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. התקנת ספריות מהחבילות

חבילות הספריות הזמינות עבור ארכיטקטורת היעד ניתן להתקין לתוך sysroot של סביבת הכלי בשתי דרכים:

  1. הדרך הראשונה משתמשת בכלי dpkg-deb המבוסס על Ubuntu/Debian כדי להתקין חבילות Debian ישירות כפי שמופיע למטה:
    Shell

     

    הערה:

    • הורד את כל חבילות התלות והתקן אותן בסדר.
    • חבילות ספריות עשויות להתקין במבנה ספריות שונה. העתק את קבצי הספריות הללו לתיקיות הנכונות כפי שנדרש על פי הכלי.
  2. בדרך השנייה, חבילות Debian/RPM נחשפות ומונחות ידנית בנתיב הספריית הכלים כפי שמוצג להלן:
    1. לחילוץ חבילת Debian, יש להשתמש בכלים ar ו-tar כפי שמוצג להלן:
      Plain Text

       

      הערה: השיטה זו שימושית למערכות ללא תמיכה ב־dpkg-deb.

    2. לחילוץ חבילת RPM, יש להשתמש בכלי rpm2cpio כפי שמופיע בפקודה הבאה:
      Plain Text

       

    3. דוגמא לחילוץ חבילות והצבת קבצים עם libcap:

      Shell

       

    4. כדי לוודא אם החבילות/ספריות הותקנו בהצלחה, יש להפעיל את הפקודה הבאה:

      Shell

       

      הערה: התקן pkg-config אם עדיין לא מותקן.

2. ספריות קרוס-קומפייל

חבילות הספריות לא זמינות עבור ארכיטקטורת היעד וממומשות מהמקור. לפני התחלת הקימופלציה, טען את קובץ הסביבה שאוחסן עם כלי הפיתוח כדי להגדיר את כל הפרמטרים הדרושים לקרוס-קומפילציה.

Shell

 

עקוב אחר השלבים לקימופלציה המצוינים בקובץ ה-README של הספרייה. בנוסף, הגדר את הפרמטרים הבאים בשלבי הנצירה:

  1. הגדר את הפרמטר --host בעת הרצת התסריט ./configure
    Shell

     

    הערה:

    • <target_host_parameter> הוא המערכת שבה הספרייה/הכלי מועברים. ניתן למצוא את המילה המשותפת בקובץ הסביבה של כלי הכלים. זוהי תחילית נפוצה הנמצאת ב-$CC, $LD וכו'
    • ישנם שני סוגי ספריות תלויות. האחד דרוש רק לתהליך ההידור, והשני הוא דרישת תלות לביצוע במארח היעד. עליך להגדיר את הפרמטר --host בהתאם.
  2. כאשר משתמשים ב־"make install" כדי לבנות ספריות תלויות, יש להגדיר את DESTDIR לתיקיית sysroot של הכלי.
    Shell

     

הסיכום

ההבדלים בארכיטקטורת המערכת, בספריות, בתלות ובצרופים של כלי הפיתוח עושים את הצלחת כיבוי מרובה להיות טכניקה מורכבת לביצוע. כדי להקל על המורכבויות, מאמר זה חושף את שלבי ההפעלה האטרקטיים. FRR ו-PowerPC נלקחו כדוגמאות לתוכנה הרצויה ולחומרת היעד, בהתאם. עם זאת, השלבים שכוספרו במאמר זה מספקים אסטרטגיה סבירה לכיבוי מרובה של כל תוכנה על חומרת מסוימת. ההגדרות של הסביבה, הצרפים והתלות עשויות להשתנות בהתאם לדרישות.

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