כבר בכמה הזדמנויות כאן בבלוג דיברנו על העבודה שעשה אנדריי קונובלוב (מפתח גוגל) בלינוקס, מעבודתו באיתור בזמן של כשלים במנהלי ה- USB Kernel USB וגם במכשירי Wifi.
עכשיו הוא עובד כרגע על פיתוח מודול חדש לליבת הלינוקס שהוא כינה "גאדג'ט USB גולמי" המתאר כלי עזר המאפשר חיקוי התקני USB במרחב המשתמש.
חוץ מזה מזכיר כי יישום נשקל להכללת מודול זה בליבת הלינוקס הראשית. גאדג'ט גולמי של גוגל כבר נמצא בשימוש על ידי גוגל כדי לפשט את הבדיקה המטושטשת של ערימת ליבת ה- USB בעזרת ערכת הכלים syzkaller.
בתחילה השתמשתי ב- GadgetFS (יחד עם Dummy HCD / UDC) כדי לחקות התקני USB לצורך טשטוש, אך לאחר מכן הוא הועבר לממשק כתוב מותאם אישית.
התמריץ ליישום ממשק אחר היה לספק גישה ישירה וקצת גולמית לשכבת הגאדג'ט USB למרחב המשתמשים, כאשר כל בקשת USB מועברת למרחב המשתמשים לתגובה.
אודות גאדג'ט USB גולמי
המודול דואג להוספת ממשק חדש תכנות לתת מערכת הליבה נקרא "גאדג'ט USB" ואשר פותח כחלופה ל- GadgetFS.
יצירת ממשק API חדש נובעת מהצורך בגישה ישירה ונמוכה למערכת המשנה USB של גאדג'ט ממרחב המשתמש, ומאפשרת לעבד את כל בקשות ה- USB האפשריות (GadgetFS מעבד כמה בקשות בפני עצמה, מבלי להעביר אותן למרחב המשתמש).
גאדג'ט USB גולמי נשלט באמצעות מכשיר / dev / raw-gadget באנלוגיה עם / dev / gadget ב- GadgetFS, אך ממשק מבוסס ioctl () במקום פסאודו-FS משמש לאינטראקציה.
בנוסף לעיבוד ישיר של כל בקשות ה- USB על ידי תהליך במרחב המשתמש, לממשק החדש יש גם אפשרות להחזיר כל נתונים בתגובה לבקשת USB (GadgetFS בודק את נכונותם של מתארי USB ומסנן תגובות מסוימות, מה שמפריע זיהוי שגיאות במהלך בדיקת ניקוי מחסנית ה- USB).
גאדג'ט USB גולמי מאפשר לך גם לבחור התקן UDC ספציפי (מנהל התקן USB) ומנהל התקן להתחברות, בעוד GadgetFS מתחבר למכשיר ה- UDC הזמין הראשון.
עבור UDCs שונים, שמות של נקודות קצה צפויות ממופים לסוגים שונים של ערוצי תקשורת נפרדים בתוך מכשיר יחיד.
לבסוף, אם אתה רוצה לדעת יותר על זה, אתה יכול לבדוק את הפרטים, כמו גם את יומן השינויים שבוצעו בגאדג'ט USB גולמי. בקישור הבא.
כיצד להתקין את מודול ה- USB של גאדג'ט גולמי בלינוקס?
למי שמעוניין להיות מסוגל לבדוק מודול זה במערכת שלהם, הוא יכול לעשות זאת על ידי ביצוע ההוראות המפורטות כאן.
ל- Dummy HCD / UDC (מודול שמגדיר התקני USB וירטואליים ובקרי מארח המחוברים זה לזה בתוך הליבה). עלינו לפתוח מסוף ובו אנו מקלידים את הפקודה הבאה:
svn checkout https://github.com/xairy/raw-gadget/trunk/dummy_hcd
עם זאת אנו הולכים להשיג את התיקיה עם המודולים אותם אנו הולכים על ידי ביצוע הפקודה הבאה במסוף:
cd dummy_hcd make
ואנחנו ממשיכים להתקין אותם עם:
./insmod.sh
אם אנו רוצים לעדכן את המודול, אנו עושים זאת באמצעות:
./update.sh
עכשיו למי שרוצה להתקין את מודול הליבה. במסוף אנו הולכים להשיג את הקבצים הדרושים לכך על ידי ביצוע הפקודה הבאה:
svn checkout https://github.com/xairy/raw-gadget/trunk/raw_gadget
עם זאת אנו הולכים להשיג את התיקיה עם המודולים אותם אנו הולכים על ידי ביצוע הפקודה הבאה במסוף:
cd dummy_hcd make
ואנחנו ממשיכים להתקין אותם עם:
./insmod.sh
אם אנו רוצים לעדכן את המודול, אנו עושים זאת באמצעות:
./update.sh
אתה יכול לבדוק את העבודה הקישור הבא.