נקודות למחשבה בעת בניית פתרון חומרה ללקוחות

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

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

להלן הנקודות:

תכין POC על דסקטופ, לא על מערכת משובצת
יצא לי להיתקבל בלא מעט מקרים שחברות ואנשים מחפשים פתרונות משובצים ופתרונות חומרה אחרים כבר בהתחלה, עוד לפני שנכתבה שורת קוד אחת למוצר/פתרון. זוהי דרך "נהדרת" לבזבז זמן ומשאבים, ולכן אני ממליץ קודם כל להשקיע בכתיבת POC של המוצר/פתרון על דסקטופ, בין אם זה Windows או לינוקס – אין זה משנה, הואיל וקל יותר להמיר את הפתרון אחר שיש משהו שרואים שרץ (גם אם יש ערימות באגים) מדסקטופ למערכת יעודית, אחרי שיש פתרון POC רץ.

מטריקות זה דבר מאוד חשוב
יש POC? מעולה, אבל לפני שרצים לחפש חומרה תואמת, ODM וכו', כדאי למדוד ביצועים ולהכין כלי Benchmark כלשהו שימדוד ביצועים, ואת הכלי, יחד עם קוד ה-POC – נריץ על פתרונות חומרה שונים בדרך – כדי לראות אם מקבלים את הביצועים שרוצים. ראיתי לצערי לא מעט כאלו שהזדרזו לרכוש לוחות עם מעבדי ARM שונים ולאחר שהקוד עבר קימפול והרצה – הביצועים הגיעו ל-10-20% ממה שהמערכת במקור נותנת על PC.

חשוב לעבוד עם יצרן חומרה
אם האיש או החברה החליטו ללכת על פתרון משובץ עם מעבדים מסויימים ושרותי ODM לתכנון לוח וכו' – חשוב לקחת את המלצות יצרן המעבד או הלוח ואם אפשר – את ה-SDK של יצרן החומרה. אחת הטעויות הנפוצות ביותר לאלו שמתחילים בעולם המערכות המשובצות – היא המחשבה שעולם הלינוקס במערכות משובצות הוא כמו עולם הלינוקס בדסקטופ. הוא בשום פנים ואופן לא ובמקרים רבים החלטה כמו "נלך על Yocto", "נלך על Open Embedded" וכו' מבלי שהיצרן אכן ממליץ ותומך באותה הפצת לינוקס – תיגמר בכי רע, הואיל ויש המון חלקים בעולם הלינוקס המשובץ שניתנים כקוד סגור, או קוד שנמצא Out of tree בהשוואה לגירסאות לינוקס שונות (ואם אין איש לינוקס שמבין בפיתוח דרייברים/קרנל – תהיה בעיה בלשלב את הקוד), או שפשוט לא ניתן יהיה להפעיל חלקים שונים בחומרה כי פשוט אין דרייברים זמינים באופן חופשי לציבור, ולכן – גם אם אתם בונים פתרון משובץ שימכר בכמה עשרות דולרים לצרכן ולכן כל סנט שנחסך הוא חשוב – צרו קשר עם יצרן הלוח או יצרן המעבד וסכמו על תמיכה וקבלת SDK.

נקודות לגבי AI, וידאו ומדיה
כדאי לשים לב כי בתחומים שונים כמו הסקה ב-AI (כלומר Inference), קידוד/פריסת וידאו/אודיו וטיפול בתכני מדיה שונים – יש מרחק רב ממה שהחומר השיווקי מציין לבין מה שמקבלים "ביד" בפועל. בתחום ההסקה לדוגמא, ישנם כמה יצרנים המציינים כי יש ברשותם שבבים ל-"AI" עם ביצועים מרשימים לביצוע הסקה, אבל בפועל (ואני בכוונה לא רוצה להזכיר שמות) התמיכה במודלים ובמטריצות – אינה מספקת או איטית. בתחום הוידאו – יש לא מעט כאלו שתומכים ב-H.264/H.265 – חלקם בפריסה בלבד וחלקם בפריסה וקידוד, אולם כמות וסוג הפרופילים שהם תומכים – היא קטנה מאוד, וברוב המקרים גם אין תמיכה ל-DRM שלקוחות רבים בתחום המדיה (כבלים, STB, וכו') דורשים, ולכן עוד לפני שמתחייבים לרכישות גדולות, כדאי לרכוש/לקבל Sample של לוחות שונים ולנסות אותם. נכון, יש צורך בהשקעה כדי לבצע Porting אבל בדרך כלל ההשקעה אינה גדולה ודי קל להמיר/לקמפל קוד למערכת ARM או X86 אחרת.

יש עוד הצעות חוץ מ-NXP
מדהים כמה שבישראל יש אחיזה ל-NXP בשוק המשובץ. בערך כמו שיש לאינטל בשוק הדסקטופ. המציאות הפשוטה היא שיש לא מעט פתרונות בחוץ ששווה לבדוק אותם – החל מחברות כמו MediaTek שמייצרת מעבדים שונים, Huawei (הסיפורים עם הריגול מתאימים לרפובליקנים, לא נכנס לכך), ויש גם חברות אמריקאיות כמו Broadcom, Samsung ועוד. לכולם יש פתרונות שמתאימים לתחומים הפופולריים וגם לסוגי נישה שונים, ולכן – אני ממליץ לחפש, לא לרוץ ולסגור אחרי שרואים פתרון אחד.

חשוב לבנות את ה"מסביב"
יש לא מעט חברות שיצרן מוצרים מעניינים לשוק ובמחירים זולים מאוד, אבל כשזה מגיע לאבטחה ועדכונים – תשכחו מזה (נסו לדוגמא לחפש עדכונים למוצרי TP-LINK או DLINK שנמכרים בארץ, אולי תמצאו עדכון אחד או 2 במשך כל חיי המדף של המוצר). כיום, כל מוצר שיוצא לשוק ונמכר במחיר זול – נפרץ די מהר, והדרך מהפריצה ועד לבעיות אבטחה שכל מיני פורצים מנצלים את המוצר כדי "לגייס" את המכשיר על מנת לתקוף מטרות שהפורצים בוחרים ב-DDoS – קצרה, ולכן חשוב עוד לפני שהמוצר בכלל יוצא – לוודא שה-Image כולל תשתית מאובטחת לקבלת עדכונים, לחתום כל עדכון, לא לאפשר לכל דכפין לנצל פלטפורמה כמו U-Boot להתקנת Images עצמאיים של הפורצים.

חושבים להשתמש בפתרון עם אנדרואיד?
אם אתם בונים פתרון המבוסס על אנדרואיד, חשוב יהיה לבנות מחדש את האנדרואיד שיתקבל מיצרן החומרה, להוסיף את התוכנות שלכם (ללא שימוש ב-root! או sudo וכו'), להכין IMAGE, ולתת את ה-Image שבניתם ליצרן החומרה. אם אתם צריכים הגנה על תכני מדיה (DRM), בקשו מהיצרן תמיכה ב-Widevine כולל הטמעת מפתחות בזמן יצור המכשיר. והקפידו על שחרור גרסאות עדכון אחת לזמן מה.

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

בהצלחה.

על בנייה ואבטחת מערכות משובצות

תחום המחשבים אצלי אינו תחום שנמצא רק כדרך להתפרנס, אלא גם כתחביב, במיוחד החלקים הקשורים לחומרה. אני מתעניין במחשבים ישנים, איך להכניס למערכות ישנות חלקי מערכות הפעלה מודרניות תוך התמודדות עם מגבלות שונות (כמות זכרון שכיום נחשבת לבדיחה, תחשבו על 1-16 מגהבייט), דיסקים קטנים ועוד. אלו דברים שמאתגרים מצד אחד ועוזרים לבנות מערכות משובצות עם הדגשה על כך שהמערכת תהיה כמה שיותר קטנה, ושתעלה כמה יותר מהר בעת Boot.

עם כניסת ה-Raspberry Pi ושלל החיקויים שלו, יותר ויותר אנשים החלו לגלות את עולם ה-SBC (כלומר Single Board Computer – לוח אחד שעליו נמצא הכל, כולל מעבד, זכרון, אחסון ושלל חיבורים לעולם החיצון) ושוק המערכות המשובצות החל לקבל "ניעור" רציני. חברות המייצרות פתרונות הכוללות מערכות משובצות ראו שניתן לרכוש בכמה עשרות דולרים מערכות SBC ל-Embedded, מה שגרם למתחרים הותיקים להוריד מחירים. למי שאינו מכיר – הכרטיסון בתמונה הוא מחשב Raspberry Pi Zero שכולל כל מה שצריך (למעט חיבור רשת קווית שאפשר להוסיף במספר דרכים). העלות? 5 דולר, וזו סתם דוגמא ל-SBC זול שיכול לבצע פרויקטים שונים.

בניתי לא מעט מערכות משובצות, החל מדברים קטנים למערכות סופר מוגבלות, מערכות אנדרואיד משובצות ועד מערכות לינוקס מוקטנות שמצריכות חיבורים פיזיים רבים. כמעט כל המערכות נבנו עם לינוקס (אחת עם QNX) והחלטתי לשתף עם הקוראים כמה תובנות מנסיוני:

  • עצמאית או C/S? אחד הדברים הראשונים החשובים הוא להחליט איך המערכת תרוץ בעצם. האם מדובר במערכת עצמאית שאין לה תקשורת לשום שרת (עצמאית) או C/S (כלומר Client Server)? אם מדובר במערכת עצמאית, אז נצטרך להתקין עליה את כל האפליקציות (תיכף ארחיב על כך), ולדאוג לכך שהיא תפעל כמעט בכל מצב אפשרי, כולל מצב חרום שבו היא יכולה להציג למפעיל אם יש תקלה, מה התקלה ומה קוד התקלה כדי שיצרן הפתרון יוכל לטפל בכך.
    אם מדובר ב-C/S לעומת זאת, אז יהיה כדאי לבנות מערכת כמה שיותר רזה (לא להתקין הפצת לינוקס על המערכת אלא להשתמש ב-Yocto לדוגמא) וכל אפליקציה נחוצה תרוץ על השרת וביניהם התקשורת תעבור ב-TCP/IP, שימוש ב-Web Sockets וכו'.
    אם מדובר במערכת שיש לה תקשורת לשרת אך התקשורת אינה קבועה (אחת לשעה, אחת ליום וכו') אז כדאי יהיה לבנות אותה למצב אחסון זמני כך שברגע שהתקשורת מבוצעת, כל הנתונים מועברים לשרת, מתבצעת בדיקה שהנתונים נשמרו על השרת באופן תקני (אפשר להשתמש במגוון שיטות checksum) ולאחר מכן הנתונים ימחקו מהמערכת המשובצת. מבחינת אפליקציות להתקנה, נצטרך למצוא מה ניתן עדיין להריץ על השרת הרחוק ומה צריך לרוץ מקומית.
  • לא לדסקטופ: יש לא מעט מפתחי מערכות משובצות, שברגע שהם מקבלים מערכת משובצת עם 4 ליבות, 1-4 ג'יגהבייט זכרון ו-64 ג'יגה אחסון eMMC – בונים מערכת כאילו זה לינוקס דסקטופ. זה לא רעיון טוב הואיל וכל מעבד PC פשוט עוקף בסיבוב כל מעבד של מערכת משובצת. בנוסף, מערכות משובצות בקושי מקבלות עדכונים אם בכלל כך שיש סיכוי לא קטן שמערכת כזו בסופו של דבר תיפרץ ומכיוון שמערכות כאלו לא מעודכנות כמעט, הפורץ יכול להיכנס ולהשתמש ברשת הפנימית ובמערכת המשובצת כפי שירצה.
  • דיאטה: מערכת צריכה להיות כמה שיותר קטנה על מנת להקטין את וקטור התקיפה ולאפשר תחזוקה (אם צריך) קלה, ולכן לא מומלץ להתקין עליה מערכות אפליקציות שרת רגילות. צריכים לדוגמא SQL? תכירו את SQLite. צריכים שרת HTTP? יש מספר אפשרויות שמתאימות למערכות משובצות או httpd שמגיע כחלק מ-BusyBox או שימוש בשרת Web מובנה שקיים בפייתון/GO.
  • שפות כתיבת קוד: אם הפתרון הולך לרוץ כ-C/S, אז אתם יכולים לכתוב באיזו שפה שבא לכם ולהריץ את הקוד על השרת. אם זו מערכת עצמאית, אז אני ממליץ לכתוב בפייתון, Go או PERL (לוותיקים שביניכם) וסקריפטים ניתן ב-Bash או Python. יהיו כמובן חברות שירצו לכתוב קוד ב-JAVA או DOT NET (אפשר להריץ Dot Net Core על לינוקס), אבל חשוב לזכור שאם המערכת מבוססת על ARM ותרוץ עצמאית, אפליקציות כמו Wildfly או runtime של Dot Net Core לוקחות לא מעט משאבים ובלא מעט מקרים גורמות למערכת להגיב בצורה איטית.
    חשוב: לא לכתוב קוד אסמבלר יעודי למעבד. נכון, קוד אסמבלר זה נחמד ונותן מהירות (היום זה פחות רלוונטי, GCC מוציא קוד אסמבלי מעולה!) אבל פעם הבאה שהחברה תחליט להחליף מעבד, מישהו יצטרך לשכתב המון קוד אסמבלר מחדש ולכן אני ממליץ לא להיכנס לביצה הזו.
  • רדו מ-Windows: אתם בוודאי נתקלתם בזה בעבר – כספומטים שמגיבים באיטיות, מערכות מידע שלא מגיבות או שפשוט תקועות, קופות רושמות שנתקעות באמצע העברת מוצרים אצל הקופאית ועוד ועוד. מדוע ישנם הרבה פתרונות מבוססי Windows? כי מיקרוסופט מספרת כמה ה-Windows (כולל גירסת ה-Embedded) "יציבה", חברות גדולות עד לפני מס' שנים כתבו קוד שרץ רק על Windows, בנו "פתרון" שמורכב על PC פשוט והרי לכם מערכת שגם עם מיטב המומחים עדיין מצליחה להיות בלתי יציבה ואיטית פתאום.
    כיום ניתן לבנות מערכת משובצת מבוססת לינוקס שלא תתפוס יותר מ-80 מגהבייט אחסון (בערך) ותרוץ יפה על 1 ג'יגהבייט זכרון והמערכת תכלול דפדפן ותמיכה במסך מגע וכל המערכת תעלה מרגע החיבור לחשמל תוך 8-12 שניות עם הצגת לוגו לקוח בשניה הראשונה ולאחר 10-12 שניות הלקוח האנושי יכול להשתמש במערכת בתוך דפדפן סגור (כך שניתן להציג גרפיקה, OpenGL, אנימציה וכו' וגם לחבר את המערכת לציודים אחרים אם צריך).
    מדוע לא עוברים למערכת כזו? בחלק מהמקרים יהיה צורך לכתוב קוד חדש (במקרים כמו קופות), בחלק מהמקרים מדובר בחששות לא מבוססים, ובחלק מהמקרים עקב אי ידיעה או אי הכרת הדברים. אני מקווה בקרוב לקבל כמה מערכות משובצות, לבנות כמה מערכות דמה ולהוציא קליפים להדגמה ביוטיוב..
  • אבטחת מידע: זוכרים שאמרתי שלא כדאי להתקין הפצת לינוקס על מערכת משובצת? זה אחד הדברים הראשונים שפורץ ינסה להשתמש לטובתו, ולכן מומלץ לעבוד עם Busy Box סופר מצומצם במכונה שיכלול אך ורק פקודות הכרחיות, לצמצם הרשאות, לא להריץ הכל כ-root, ואם אפשר – לעבוד עם מפתחות והצפנה, בשביל זה כמעט כל מערכת משובצת מכילה רכיב TPM (לחובבי Raspberry Pi – יש חלק שניתן לרכוש, להרכיב ולהשתמש מבלי להלחים חוטים). אם המכשיר הולך להיבנות בסין, קחו בחשבון שינסו לגנוב לכם את הקוד ולכן הצפנה היא מאוד חשובה.
  • פשוט זה חכםתכירו את אחד החתולים הביתיים שלי – זהו נימי. מדוע אני מציג אותו? כי רמת המשכל של נימי שווה בערך לרמת המשכל של חלק מהאנשים בסין שיבנו ויקימו את המערכת ללקוח ובחלק מהמקרים – זו גם תהיה רמת המשכל של אלו שישתמשו במערכת (כבר ראיתי מישהו שמנסה להכניס בכח את כרטיס האשראי שלו לחור ממנו יוצאת הפתקית בכספומט!).
    לכן – אם המערכת שלכם כוללת אחסון (eMMC, SSD, לא מומלץ דיסק קשיח מכני, SSD הרבה יותר אמין) ואתם צריכים להקים Installer שירוץ על PC ויתקין את המערכת שלכם על הלוח SBC, תשתמשו בכמה שיותר אוטומציה ותנסו לצפות ולפתור כל תקלה אפשרית. אם המערכת נמסרה וישנה תקלה במערכת, תעלו אותה מחדש אוטומטית כך שברגע שהמשתמש יכנס דרך הדפדפן, התקלה תוצג והלקוח יוכל לשלוח לכם צילום מסך שלה.
    חשוב לנסות (אם התקציב מאפשר) לבנות מערכת Dual Boot (מערכת u-boot תומכת בכך) כך שניתן יהיה לשדרג מרחוק את המערכת עם Image תקין, ואפשר להשתמש בגירסת SystemD האחרונה כדי לעלות למערכת חרום אם המערכת הנוכחית לא עולה (אפשר לקרוא על כך כאן).
  • דלת אחורית/כניסה מרחוק: לא תמיד אתם יודעים היכן המערכת תרוץ ואתם לא יודעים מתי ומאיפה תקבלו בקשת תמיכה, ולכן חשוב לבנות זאת כחלק מהמערכת. אל תצפו ממשתמש קצה להקיש פקודות או שתקבלו בלא מעט מקרים – תוצאות מביכות.

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

מערכות משובצות ומצבי "קיוסק"

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

אחת השיטות שהיתה נהוגה בעבר היתה להכניס PC קטנטן (עם מעבד Atom או Celeron) ועליו להריץ Windows ועליו את האפליקציות הדרושות, להקשיח את המערכות ולמכור אותה. הבעיות בדרך כלל הן:

  • עדכוני אבטחה – קשה להתקין עדכוני אבטחה ל-Windows כשאין לך תקשורת חיצונית, ומה לעשות ש-Windows דורש המון עדכוני אבטחה.
  • מחיר רשיון – 150-200$ לרשיון Windows Pro (מחיר שונה ל-Windows Embedded אבל כיום המוצר מאבד פופולריות במהירות לטובת פתרונות מבוססי Linux).
  • קבלת Latency נמוך – לא חשוב כמה תכוונן את Windows, תמיד יהיו "קפיצות" שישבשו את ה-Latency.

לכן הרוב עוברים למערכות מבוססות ARM.

לוחות מבוססי מעבדי ARM כדוגמת I.MX6/7/8 ומעבדים אחרים קיימים בשוק זמן רב ובשנים האחרונות המחירים צונחים (בעיקר עקב פופולריות של Raspberry Pi). מחשב קטן שרק לפני כמה שנים היה עולה מאות דולרים, צנח למחירים שכיום נמדדים בעשרות דולרים (כולל אחסון קבוע כמו eMMC). פאנלים ללוחות כאלו קל לחבר (דרך LVDS לדוגמא) והתוספת ל-Touch היא דולרים בודדים, ולכן יש רצון מצד חברות שונות לבנות פתרונות שאותם הם משלבים במוצריהם – הכוללים מעבדי ARM, עם צג מגע וחוויית משתמש טובה. יש אפילו חברה מסויימת שמייצרת Appliance בגודל 1U .. .עם מסך מגע נשלף. לאן הגענו….

לקוח כזה בסופו של דבר צריך לבנות Image שיוכנס ב-eMMC של הלוח. ה-Image אמור לכלול את כל חלקי התוכנה ויש מספר אפשרויות:

  • לינוקס "רגיל" – אפשרות אחת היא לקחת הפצת לינוקס רגילה (Debian, CentOS וכו') עם Kernel שמגיע מיצרן (או שהאינטגרטור מקמפל תוך שימוש ב-BSP, Cross compiler וכו') ופשוט מקימים לינוקס עם התקנת התוכנות הנדרשות (בשימוש yum/apt) וההגדרות הכרוכות בכך, ולבסוף מכינים Image. יש כלים כמו kickstart (ל-CentOS) או Preseed (ל-Debian) כדי להכין Image כזה.
    הבעיה בשיטה זו היא שיש צורך בידע רציני להגדיר את הסביבה הגרפית (Xorg, Wayland, שימוש ב-OpenGL וכו') מכיוון שאין אוטומציה שניתן להשאיל מ-X86 ויש צורך להשקיע מאמצים מרובים להגדיר את הכל.
    חסרון נוסף: אבטחה. במקרים רבים החבילות המגיעות עם תלויות שאין בהן צורך עבור אותה מערכת משובצת ולכן יש לקמפל את החבילות מחדש ללא אותן תלויות או במקרה היותר קשה – לבטל/להחליף תלויות באחרות. חבילות מיותרות ופונקציונאליות שאינה דרושה, גם אם אינן מופעלות יכולות פוטנציאלית לגרום לחורי אבטחה במערכת.
  • Yocto – אחד הכלים הכי פופולריים. עם Yocto אפשר ליצור Image מצומצם לדברים שאנו צריכים בלבד. מערכת Yocto בונה לנו את כל המערכת ולבסוף מכינה Image שניתן "לזרוק" על כרטיס מיקרו SD או על eMMC. המערכת מספיק חכמה בשביל לא לקמפל חבילות שכבר קומפלו ולא היה בהן שינויים, וכל יצרן לוחות ARM תומך בה.
    החסרון עם Yocto: בלא מעט מקרים תצטרך לדעת איך לבנות Recipe כדי להוסיף את החבילה שאתה רוצה ועם אלו ספריות ו-Compile Flags לעיתים. בנוסף – תצטרך להוסיף את ההגדרות לכל חבילה שתרצה בתוך ה-Yocto. בכל הקשור לגרפיקה – גם כאן, תצטרך לשבור את הראש איך להגדיר את הדברים.
  • Boot2QT – זהו מוצר של חברת TrollTech שמשתמש ב-Yocto כדי לבנות מערכת גרפית מוכנה. לא תצטרך לשבור את הראש על Touch, על הגדרות Frame Buffer או Xorg ופרמטרים אחרים. מוצר הדגל של החברה (QT Creator) נותן לך לכתוב אפליקציות גרפיות ולנסות אותן על מחשבך או ישירות על המערכת המשובצת (מבלי להכין כל פעם Image מחדש כדי לנסות את הקוד שכתבת). המערכת קטנה ועולה תוך שניות ספורות. היא גם הופכת את החיים להרבה יותר קלים מבחינת שימוש ב-Yocto והיא מסתירה לא מעט חלקים מורכבים ומטפלת בקומפילציה.
    החסרון: זו מערכת מסחרית. ישנה גירסה חופשית אך אם תשתמש בה, תצטרך לשחרר את כל הקוד שכתבת באפליקציה הגרפית.
  • Android – עוד פתרון שחברת "אגד" לדוגמא – שמחה לאמץ אותו לנהגים כמערכת קופה/כרטוס. כל יצרן מערכת ARM בדרך כלל משחרר גירסת אנדרואיד ולחברה שרוצה להשתמש בכך, ניתן לקחת את גירסת האנדרואיד ולהוריד חלקים שאין צורך בהם, ואם צריך לכתוב אפליקציות יעודיות, לא חסרים מפתחי אנדרואיד (וכן, יש גם מצב קיוסק באנדרואיד) כך שניתן לכתוב את האפליקציה ולשלב אותה ב-Android הפנימי שיווצר ל-Image שירוץ על המערכת. אם צריכים חבילות לינוקס, אפשר להרים מערכת כמו Linux Deploy שתרוץ ברקע, להקים הפצת לינוקס מינימלית שצריכים עם החבילות הדרושות ואז מהאפליקציה שלכם לתקשר דרך Socket או דרך TCP אל האפליקציה (אישית עשיתי זאת פעמיים וזה הציל פעם אחת פרויקט מביטול מאחר והאפשרויות האחרונות לא אפשרו התקנת חבילות מסויימות).
    החסרון: אם מחפשים Boot של 3-5 שניות – תשכחו מזה. בנוסף, קימפול קרנל למערכת אנדרואיד אינו עניין פשוט הואיל ויש לא מעט חלקים שאנדרואיד כן צריך והפצות לינוקס רגילות לא צריכות.

כפי שניתן לראות – יש מספר אופציות לבניית מערכת מבוססת ARM. לכל דרך יש יתרונות וחסרונות וגם דרישות זכרון שונות. כך לדוגמא אם הוחלט שמערכת ה-ARM תהיה עם 512 מגהבייט זכרון בלבד, כדאי יהיה לוותר על מתודת האנדרואיד ואותו דבר אם הוחלט שלא יהיה touch. מצד שני, אם אתם צריכים להכניס 20 אפליקציות לינוקס פופולריות, אולי הדרך של בניית הפצת לינוקס תהיה עדיפה עבורכם.

לסיכום: מערכות ARM קיימות היום במחירים מאוד תחרותיים ובניית Image עם הדברים שאתם רוצים ניתנת לביצוע. כדאי לבדוק קודם כל מה אתם רוצים להריץ ורק אז לבדוק את האפשרויות לעיל. אם יש לכם צורך ביעוץ בנידון – אתם מוזמנים ליצור קשר.

על מערכות משובצות ועל המעבד המתחרה החדש מ-AMD

בואו נדבר מעט על מערכות חומרה משובצות (Embedded). מה הן בעצם? אלו בעצם מערכות שמיועדות ללקוחות קצה ואמורות להיות סגורות ולהחזיק זמן רב. הנה מספר דוגמאות כלליות: תחשבו על המכשיר שיש לנהגי אוטובוסים לקרוא ולעדכן כרטיסי רב קו, תחשבו על נתבים, תחשבו על פתרונות Firewall, על פתרונות CDN כקופסאות שמיועדים לשבת ב"קצה" (Edge), תחשבו על פתרונות סטורג' קנייניים, על כספומטים, על שלטי חוצות דיגיטליים ועוד המון דברים.

לכל הדברים שהזכרתי יש מס' דברים משותפים:

  • הם מגיעים כקופסא סגורה עם תוכנה שאתה אמור להשתמש בה ולא להתקין עליה שום דבר חיצוני.
  • הם אמורים לעבוד 5 שנים ומעלה ללא תקלות או תחזוקה (מבחינת חומרה).
  • בדרך כלל הם לא מאפשרים גישה למערכת ההפעלה שרצה והם אוסרים "חיטוטים" במערכת.
  • הם לא ניתנים לשדרוג חומרה.

בעולם הקופסאות המשובצות, יש חשיבות גדולה לאיזו חומרה מכניסים, החל ברמת לוח אם, וכלה בשבבים, יציאות, קירור וכו'. במקרים מסויימים יצרנים פשוט ירכשו לוחות אם Mini ITX ומטה (Nano-ITX, Pico-ITX,Mini-STX) עם מעבדים מולחמים ללוח האם והיצרן יוסיף ללוח זכרון, SATA DOM בשביל התוכנה וידאג לפתרון קירור/איוורור מספק + ספק כח קטן מובנה. במקרים אחרים היצרן יעצב לוח אם עם השבבים שהוא בוחר, כניסות/יציאות, פתרון אחסון, קירור, ספק כח וכו' ויצור קשר עם יצרן לוח מטיוואן (Compal, Quanta, Pegasus, FoxConn ועוד) שיקבל את כל השבבים והחלקים, ידפיס לוח אם, ירכיב את החלקים, יבדוק וימשיך בשרשרת האופציות (הרכבה בקופסאות, בדיקות QA/QC וכו'). השיטה הזו לדוגמא מתאימה ליצרנים שצריכים כמות גדולה מאוד של אותו פתרון Embedded (מינימום הזמנה: 10,000 חתיכות). הדברים מעט שונים אצל ספקי ענן ציבורי – הם מתכננים לוח אם, שולחים לייצור ומקבלים את הלוחות בחזרה, ההרכבה וכו' נעשית מקומית אצל ספק הענן.

מבחינת ה"שחקנים" בשוק המעבדים לציוד משובץ, ברוב המקרים אם צריכים מערכת קטנה שאין לה צורך עיבוד רציני, אז סוגרים עיסקה עם יצרן מעבד ARM כלשהו. אם צריך משהו שמצריך עיבוד תקשורת רציני, יסגרו עיסקה על מעבדים כאלו עם חברות כמו Broadcom ואחרים, ואם צריך מעבדים X86-64 – הולכים כמובן לאינטל. לאינטל יש את סידרת Xeon-D וסידרת ATOM CXXX לצרכים הללו.

כל הסידור הזה ידוע לכל יצרן מערכות משובצות. הבעיות מתחילות כשמתגלות תקלות הקשורות למעבד.

בתחילת 2017 התגלה באג קריטי במשפחת מעבדי Atom C2000 למערכות משובצות. מי שרוצה לקרוא על הבאג יכול לקרוא כאן אולם אם נקצר את הדברים, אז יוצא כך: המערכת תעבוד יפה במשך שנה וחצי אבל יום אחד היא יכולה ליפול ולא לקום עקב באג רציני במעבד. מכיוון שאלו מערכות משובצות, בהן אין תושבת המאפשרת החלפת מעבד (המעבד מולחם בשיטה שנקראת BGA – Ball Grid Array), הפתרון הוא להחליף את כל לוח האם. אבל מה קורה אם היצרן החליט להכניס שבבי SSD/Flash על לוח האם? כאן זה נהיה יותר מורכב. תכפילו את המורכבות הזו באלפי מערכות שנמצאות מסביב לעולם – ותקבלו היסטריה רבתי! היצרן צריך לייצר מחדש לוחות אם עם מעבד מתוקן, עם כל השבבים הנוספים (יצרני השבבים הנוספים בהחלט נהנים מהרכישה הכפולה), לשלוח טכנאים על חשבון היצרן, להעביר איכשהו את הגדרות הלקוח, וכמובן לסבול מכל לקוח צעקות על השבתה ארוכה ואולי גם תביעות בדרך מאותם לקוחות. בקיצור – היסטריה רבתי.

בקיצור, לאחר הבעיה המהותית הזו, יצרני קופסאות גדולים החלו לחפש פתרונות אלטרנטיביים שיתנו תאימות X86-64 והעיקר שיהיו עם כמה שפחות באגים כאלו. אחד מיצרני הקופסאות ביקש יצור של לוח אם מיוחד עם מעבד Desktop מסוג Ryzen של AMD ושיהיה עם תושבת – לקופסאות שלו. אב הטיפוס של הלוח נראה כך (המאוורר משמאל מסתיר GPU זמני שיוחלף במעבד ARM של ASPEED לשם שליטה מרחוק):

השאלה שעתה כמעט כל יצרן שואל – יש אלטרנטיבה למעבדי CXXX ו-Xeon-D שיתנו תואמות מלאה?

כן

ב-AMD לאחרונה החליטו להוציא סידרה חדשה של מעבדי EPYC: סידרה 3000 המיועדת כולה למערכות משובצות. היתרונות של המעבדים החדשים קשורים לתאימות מלאה, חסכון בחשמל וביצועים שווים או יותר מהמעבדים המתחרים של אינטל. בנוסף ניתן לחסוך ב-BOM כי אין צורך ב-Chipset.

להלן רשימת המעבדים במשפחת ה-EPYC (לחצו להגדלה):

כפי שאתם יכולים לראות, יש מבחר גדול, יש מספיק נתיבי PCIe (ניתן לשלב במערכת ללא שבבים נוספים עד 8 כניסות 10 ג'יגהביט), ואפשר לבחור איזה כח עיבוד שתרצו.

כמובן ששום יצרן לא יקח מעבד חדש בלי מערכת לבדיקות. לשם כך ל-AMD יש לוחות אם הכוללים מעבדי EPYC Embedded תחת השם AMD Wallaby. הלוח שונה מעט בין דגמי המעבדים השונים, כך הוא נראה עם מעבד 8 ליבות ו-16 נימים (לחצו להגדלה):

אז איך המעבדי EPYC 3000 בהשוואה לתחרות מבית אינטל? הם צורכים מעט יותר חשמל (דגם 3251 שמופיע בסקירה כאן לדוגמא) מכיל 8 ליבות אך מכיל גם 16 נימים. המעבד הכי קרוב (דגם C3758 מאינטל) מכיל רק 8 ליבות. ה-C3758 יכול להגיע למהירות שעון מקסימלית של 2.20 ג'יגהרץ ואילו ה-3251 מגיע עד 3.10 ג'יגהרץ.

ומה עם אלו שמחפשים פתרון יותר קטן הכולל חיבורים למסך/ים חיצוני/ים, שצורך פחות חשמל עם פחות ליבות? ל-AMD יש פתרון גם לזה, והוא ה-Ryzen Embedded 1XXX המכיל עד 4 כניסות Display Port, עם 2-4 ליבות, ועם 4 עד 8 נימים. חברת Sapphire מייצרת מספר לוחות כאלו וניתן לקרוא עליהם כאן. העלות של הפתרון המוכן (ללא קופסא, זכרון ואמצעי אחסון) נע בין 325-450 דולר. יש ל-Sapphire עוד מספר פתרונות והם כמובן גם ODM ומייצרים לוחות ללקוחות שרוצים לוח לפתרונות רפואיים, קופות רושמות, קיוסקים, ציוד תקשורת, שילוט חוצות ועוד. אפשר לראות עוד פרטים בוידאו הבא:

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