יום שבת, 4 בפברואר 2012

Linux Embedded System




לאחרונה רכשתי לוח פיתוח עבור Linux, מבוסס על מעבדי ARM , על מנת לפתח עליו אפליקציות יעודיות, עם מסך מגע, רשת ושאר תוספות, תהליך החיפוש ענק ויש המון יצרנים שיתנו לכם כמעט כל וריאציה של לוח כמו TI , FreeScale ועוד וכמובן ה Open Hardware שמוכרים מערכות פיתוח כמעט כמו של השחקנים הרציניים בפחות כסף לדוגמה: PandaBoard ו BeagleBoard , בסופו של דבר בחרתי בחברת Technexion חברה קטנה מטיוואן שנתנה לי לוח ומסך מגע במחיר סביר.

משהו חשוב שכדאי לכם לזכור לפני שאתם רצים לקנות לוח , כדאי לבדוק את היצרן ולראות שהוא נותן את כל הכלים שצריכים בשביל לבנות את המערכת  כמו Kernel , U-Boot, FileSystem וכמובן Documentation.

מאמר זה מתאר תהליך  בסיסי של בניית מערכת Embedded על לוח של חברת Technexion , אבל התהליך משותף לכל הלוחות , בכל לוח יש מספר רכיבים קבועים עבור הפעלת המערכת, הראשון הוא ה U-Boot שיטען לנו את ה Kernel לזיכרון ולאחר מכן FileSystem שמנהל לנו את הקבצים.

המימוש של התהליך משתנה מלוח ללוח במקרה שלי נוספו לי עוד מספר תוספות בתהליך הכוללים שינוי המיתוג ע"ג הלוח על מנת לעבוד עם מסך 7 אינץ, הורדת כלי נוסף X-Loader , שיטען את ה U-Boot לזיכרון, שינוי הגדרות בקבצי הקונפיגורציה ,יצירת דרייברים נוספים עבור החומרה בזמן יצירת ה Kernel ומיקום הקבצים ב SDCard, אומנם הרבה תוספות אבל בעזרת ה User Guide של היצרן נקבל את כל המידע הדרוש בשביל השלמת התהליך ולרוב הם מפורטים מאוד.


הכנת ToolChain:

על מנת להתחיל לעבוד על הלוח יש לבצע מספר הכנות מקדימות, תחילה יש להוריד את ה ToolChain של ARM שמכיל בתוכו קבוצת כלים - ASM/Debugger/Compiler , יש 2 חברות שמספקות ToolChain עבור מעבדי ARM,הראשונה היא CodeSorcery והשנייה FSF - free software foundation.

נפרוס את ה ToolChain לאיזה תיקיה שנרצה לאחר מכן יש להגדיר את התיקיה כנתיב חיפוש חדש למערכת ההפעלה שלנו, יש לערוך את קובץ
#:  gedit root/.bash_profile

שימו לב! התהליך מבוסס על OpenSuse בחלק מה Distributions שם הקובץ שונה לדוגמה ב ubuntu הוא נקרא bashrc.

נוסיף את נתיב החיפוש בצורה הבאה:

PATH="/opt/armsystem/CodeSourcery/Sourcery_G++_Lite/bin:${PATH}"export PATH

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

כחלק מהתהליך יש עבודה עם קבצי Makefile ועבור כל כלי יש את ה Makefile שלו, צריך לדואג שמוגדרת הארכיטקטורה הנכונה וה Cross Compiler המתאים עבור יצירת הקובץ הבינארי, לכן יש לפתוח ואת הקבצים ולחפש את השורות הבאות:

ARCH  ?= arm
CROSS_COMPILE ?= arm-none-linux-gnueabi-

מגדירים את הארכיטקטורה ואת ה Compiler שנמצא ב ToolChain לדוגמא עריכה של קובץ ה Makefile של ה Kernel.



נעשה תהליך דומה בקבצי ה Makefile של ה u-boot וה x-loader.

בניית X-Loader

יש לפרוס את קובץ המקור של היצרן , ניכנס לתיקיית ה X-Loader ונכתוב את הפקודה הבאה:

make distclean && make tam3517_config && make -j 2

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


בניית U-boot 

יש לפרוס את קובץ המקור של היצרן , ניכנס לתיקיית ה U-Boot ונכתוב את הפקודה הבאה:

#: make distclean && make tam3517_config && make -j 2 tam3517

פקודה זאת מייצרת לנו קובץ u-boot.bin שמותאם ללוח Tam3517 של חברת Technexion, ניתן למצוא הגדרות ללוחות נוספים של היצרן בתיקיה Board של ה U-Boot, דבר נוסף שיש לבצע הוא להעתיק את הקובץ mkimage שנמצא בתיקיה Tools ב U-Boot לתיקית החיפוש שעשינו על מנת שנוכל ליצור ממנו uImage מה Kernel, לא לשכוח לתת הרשאות עבור הקובץ

#: chmod 775 mkimage

בניית ה Kernel

יש לפרוס את קובץ המקור של היצרן ניכנס לתיקיית ה Kernel ונכתוב את הפקודה הבאה:

 #: make distclean && make tam3517_twister_defconfig && make -j 2 uImage && make modules

פקודה זו תייצר לנו קובץ zImage של ה Kernel שיהפוך ל uImage שמתאים ל U-Boot עבור לוח Tam3517 , הגדרות ללוחות נוספים ניתן לראות בתיקיה arch/arm/configs , ה uImage נוצר לנו בתיקיה arch/arm/boot , בנוסף נוצרו דרייברים עבור הלוח שנמצאים בתיקיה Drivers שאותם נעתיק לתיקיית boot ב FileSystem , בכל שלב נוכל לערוך את ה Kernel שלנו בממשק נוח בעזרת הפקודה

#: make menuconfig





בניית BuildRoot

היצרן נותן להוריד גם את ה FileSystem שמתאים ללוח שאותו נעתיק עם שאר הקבצים הבינארים שיצרנו בכל התהליך לכרטיס SDCard שממנו הזיכרון של הלוח יטען את המערכת, המערכת של Tam3517 מבוססת על מערכת הקבצים של Angstrom Distribution , ניתן לבנות את מערכת הקבצים בעצמנו בעזרת כלי BuildRoot שמאפשר לנו לנהל בעצמנו את מערכת הקבצים.

תחילה יש להוריד את ה BuildRoot עצמו, יש להוריד מספר תוספות על מנת שנוכל לעשות Compile ל BuildRoot שלנו, הראשונה היא ספריית bison , השנייה היא ספריית ה flex והשלישית היא ספריית texinfo בעזרת הפקודה לדוגמה:

#: zypper textinfo 

ה Buildroot מגיע בעצמו עם ToolChain עבור מספר ארכיטקטורות , ניתן לערוך את ה Build Root בדומה ל Kernel, בתיקייה הפרוסה של ה Buildroot נרשום:

#: make menuconfig



בקטגוריה Package Selection for the target נוכל למצוא את כל הכלים של Linux , שנוכל לבחור בקפדנות ולייצר אותם עבור הארכיטקטורה המתאימה, בסיום הבנייה נוצרת תיקיית output שמכילה את מערך הקבצים והתיקיות של ה FileSystem.




בניית SDCard:

יצירת 2 Partitions ע"ג ה SDCard , הראשון יהיה מוגדר כ FAT ואליו נעתיק את קובץ ה MLO של X-Loader , את קובץ u-boot.bin של ה U-Boot ואת ה uImage של ה Kernel ,ה Partiton השני יהיה מוגדר כ EXT3 שאליו נעתיק את ה BuldRoot שיצרנו, למאמר בנושא יצירת Partition לחץ כאן.


סיכום:

בסופו של דבר מדובר בשיטה שמשתנה במימוש אבל דומה בתהליך עצמו, בכל לוח נצטרך לעבוד עם תוכנית שתעשה Boot ראשוני למערכת וטעינה של ה Kernel לזיכרון , אח"כ ה Kernel מתחבר ל FileSystem והמערכת תעלה, אבל כל לוח לגופו והרבה תלוי ביצרן, לא היה ניתן לסיים את התהליך ללא ה User Guide שמוביל אותך בכל הדרך בלעדיו זה גישוש באפלה ולכן חשוב לרכוש לוח שיש מאחוריו חברה שמשקיעה בתיעוד שלו.

בהצלחה.

אין תגובות:

הוסף רשומת תגובה