פיקוד לינוקס / יוניקס:

לינוקס / Unix הפקודה INMOD מתקין מודול loadable בליבה פועל. insmod מנסה לקשר מודול לתוך הקרנל פועל על ידי פתרון כל הסמלים של הטבלה סמל לייצא של הקרנל.

אם שם קובץ המודול ניתן ללא ספריות או סיומות, insmod יחפש את המודול במספר ספריות ברירת מחדל נפוצות. משתנה הסביבה MODPATH יכול לשמש כדי לעקוף את ברירת המחדל. אם קובץ תצורת מודול כגון /etc/modules.conf קיים, הוא יעקוף את הנתיבים שהוגדרו ב- MODPATH .

המשתנה הסביבתי MODULECONF יכול לשמש גם לבחירת קובץ תצורה שונה מברירת המחדל /etc/modules.conf (או /etc/conf.modules (הוצא משימוש). משתנה סביבה זה יחליף את כל ההגדרות לעיל.

כאשר משתנה הסביבה UNAME_MACHINE מוגדר, modutils ישתמש הערך שלו במקום שדה המכונה מן syscall uname (). זה בעיקר בשימוש כאשר אתה קומפילציה 64 סיביות מודולים שטח המשתמש 32 סיביות או להיפך, להגדיר UNAME_MACHINE לסוג המודולים. המודולים הנוכחיים אינם תומכים במצב הצלב המלא עבור מודולים, הוא מוגבל לבחירה בין גרסאות 32 ו- 64 סיביות של הארכיטקטורה המארחת.

אפשרויות

-e persist_name , --persist = persist_name

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

כמו טופס קצר , הוא "" (מחרוזת ריקה) מתפרש על ידי insmod כערך persistdir כפי שהוגדר modules.conf , ואחריו שם הקובץ של המודול ביחס לנתיב החיפוש מודול זה נמצא, מינוס כל נגרר ". gz", ".o" או ".mod". אם modules.conf מציין " persistdir = " (כלומר, persistdir הוא שדה ריק) אז זה טופס קצרנות מתעלמת בשקט. (ראה modules.conf (5)).

-F , - כוח

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

-h , - עזרה

הצגת סיכום של אפשרויות ולצאת מייד.

-k , - autoclean

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

-L , - LOC

השתמש הצאן (2) כדי למנוע עומסים בו זמנית של אותו מודול.

-m , --map

פלט מפה לטעון על stdout, ובכך קל יותר באגים את המודול במקרה של פאניקה הליבה.

-n , --noload

לרוץ דמה, לעשות הכל מלבד לטעון את המודול לתוך הקרנל. אם תתבקש על ידי -m או -O , הריצה תיצור קובץ או קובץ כתום. מכיוון שהמודול אינו נטען, כתובת הטעינה האמיתית של הקרנל אינה ידועה, כך שהמפה ותמונת הבלוב מבוססים על כתובת עומס שרירותית של 0x12340000.

-O module_name , --name = module_name

ציין במפורש את המודול, במקום להפיק את השם משמו הבסיסי של קובץ אובייקט המקור.

-O blob_name , - blob = blob_name

שמור את האובייקט הבינארי ב- blob_name . התוצאה היא כתם בינארי (ללא כותרות ELF) מראה בדיוק מה נטען לתוך הקרנל לאחר מניפולציה בסעיף והעברת. אפשרות -m מומלץ לקבל מפה של האובייקט.

-p , - פרוב

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

-P קידומת , --prefix = קידומת

אפשרות זו ניתן להשתמש עם מודולים גרסאות עבור SMP או bigmem הקרנל, שכן מודולים כאלה יש קידומת נוספת שנוספו שמות הסמלים שלהם. אם הקרנל נבנה עם גרסאות סמל ואז insmod באופן אוטומטי לחלץ את הקידומת מן ההגדרה של "get_module_symbol" או "inter_module_get", שאחד מהם חייב להתקיים כל הקרנל התומך מודולים. אם הקרנל אינו מכיל גרסאות סמלים, אך המודול נבנה בגרסאות סמל ואז המשתמש חייב לספק -P .

-q , - שקט

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

-R , - שורש

חלק מהמשתמשים לקמפל מודולים תחת Userid שאינו root ואז להתקין את המודולים כמו שורש. תהליך זה יכול להשאיר את המודולים הנמצאים בבעלות המשתמש שאינו root, למרות שמדריך המודולים נמצא בבעלות השורש. אם המשתמש שאינו נמצא בשורש נמצא בסכנה, פולש יכול להחליף מודולים קיימים בבעלותו של אותו משתמש ולהשתמש בחשיפה זו ל bootstrap עד לגישת שורש.

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

שימוש ב - r כדי להשבית בדיקת שורש או הגדרת ברירת המחדל ל "ללא בדיקת שורש" בזמן התצורה מהווה חשיפת אבטחה גדולה ואינה מומלצת.

-s , syslog

פלט הכל כדי syslog (3) במקום הטרמינל.

-S , - kallsyms

כפה על המודול הטעון להחזיק בנתוני kallsyms , גם אם הקרנל אינו תומך בו. אפשרות זו היא עבור מערכות קטנות שבהם הקרנל נטען ללא נתונים kallsyms אבל מודולים נבחרים צריך kallsyms עבור באגים. אפשרות זו היא ברירת המחדל ב- Red Hat Linux.

-v , --verbose

ללא שם: להיות verbose.

-V , - גרסה

הצג את גרסת ה- insmod .

-X , --export ; -x , - לאקספורט

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

-Y , --ksymoops ; -y , - noksymoops

לעשות ואל תוסיף סמלים ksymoops כדי ksyms. סמלים אלה נמצאים בשימוש על ידי ksymoops לספק באגים טוב יותר אם יש אופס במודול זה. ברירת המחדל היא להגדיר את סמלי ksymoops . אפשרות זו אינה תלויה באפשרויות X / -x .

סמלים ksymoops להוסיף כ 260 בתים לכל מודול נטען. אלא אם כן אתה באמת קצר על שטח הקרנל ומנסים להפחית ksyms לגודל המינימלי שלה, לקחת את ברירת המחדל ולקבל יותר מדויק Oops באגים. סמלים ksymoops נדרשים לשמור נתונים מודול מתמשך.

-N , - numeric בלבד

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

פרמטרים של מודול

חלק מהמודולים מקבלים פרמטרים של זמן לטעון כדי להתאים אישית את פעולתם. פרמטרים אלה הם בדרך כלל יציאות I / O ומספרי IRQ המשתנים ממחשב למכונה ואינם ניתנים לקביעה מתוך החומרה.

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

במקרה של מספרים שלמים, כל הערכים עשויים להיות עשרוניים, אוקטליים או הקסדצימליים a la c: 17, 021 או 0x11. אלמנטים מערך הם רצף שצוין מופרדים על ידי פסיקים. ניתן לדלג על אלמנטים על ידי השמטת הערך.

ב 2.0 מודולים סדרה, ערכים שאינם מתחילים עם מספר נחשבים מחרוזות. החל מ -2.1, נתוני הסוג של הפרמטר מציינים אם לפרש את הערך כמחרוזת. אם הערך מתחיל עם מרכאות כפולות ( " ), המחרוזת מתפרשת כמו ב C, רצפים לברוח וכל.

GPL מורשה מודולים וסמלים

החל מגרעין 2.4.10, מודולים צריכים להיות מחרוזת רישיון, המוגדרת באמצעות MODULE_LICENSE () . מספר מחרוזות מוכרות כמתאימות ל- GPL; כל מחרוזת רשיון אחרת או ללא רישיון כלל פירושו שהמודול מטופל כקניין.

אם הליבה תומכת בדגל / proc / sys / kernel / tanted flag, אזי תיצור את הדגל המוטבע עם '1' בעת טעינת מודול ללא רישיון GPL. אזהרה מוצגת אם הליבה תומכת בגוון ומודול נטען ללא רישיון. אזהרה מוצגת תמיד עבור מודולים בעלי MODULE_LICENSE () שאינו תואם ל- GPL, אפילו בגרעינים ישנים יותר שאינם תומכים בטיהור. זה ממזער את האזהרות כאשר modutils חדש משמש על גרעינים ישנים.

(מצב כוח) יהיה או דגל נגוע עם "2" על גרעינים התומכים טיהור. זה תמיד מתריע.

חלק מפתחי הקרנל דורשים שסמלים המיוצאים על-ידי הקוד שלהם חייבים להיות בשימוש רק על-ידי מודולים עם רישיון תואם ל- GPL. סמלים אלה מיוצאים על ידי EXPORT_SYMBOL_GPL במקום EXPORT_SYMBOL הרגיל. GPL בלבד הסמלים המיוצגים על ידי הקרנל ועל ידי מודולים אחרים גלויים רק מודולים עם רישיון תואם GPL, סמלים אלה מופיעים / proc / ksyms עם קידומת של " GPLONLY_ ". insmod מתעלם מהקידומת GPLONLY_ בסמלים בעת טעינת מודול מורשה של GPL כך שהמודול מתייחס לשם הסימן הרגיל, ללא הקידומת. סמלים של GPL בלבד אינם זמינים למודולים ללא רישיון תואם ל- GPL, כולל מודולים ללא רישיון כלל.

סיוע של קסימפס

כדי לסייע באיתור באגים של Kernel Oops בעת שימוש במודולים, ברירת המחדל של ה- insmod להוספת כמה סמלים ל- ksyms, עיין באפשרות -Y . סמלים אלה מתחילים עם __insmod_modulename_ . Modulename נדרש כדי להפוך את הסמלים ייחודי. זה חוקי לטעון את אותו אובייקט יותר מפעם אחת תחת שמות מודולים שונים. נכון לעכשיו, הסמלים המוגדרים הם:

__insmod_modulename_Oobjectfile_Mmtime_Vversion

objectfile הוא שם הקובץ שהאובייקט נטען ממנו. זה מבטיח כי ksymoops יכול להתאים את הקוד לאובייקט הנכון. mtime הוא חותמת השינוי האחרון על קובץ זה hex, אפס אם Stat נכשלה. version הוא גרסת הליבה שהמודול נערך עבור, -1 אם אין גרסה זמינה. לסמל _O יש אותה כתובת התחלה כמו כותרת המודול.

__insmod_modulename_Ssectionname_Llength

סמל זה מופיע בתחילת קטעים נבחרים של ELF, כרגע .text, .drata, .data, .bs ו- .sbs. הוא מופיע רק אם הקטע מכיל גודל שאינו אפס. sectionname הוא שם סעיף ELF, אורך הוא אורך הקטע בעשרוני. סמלים אלה מסייעים לכתובות מפת סימופס למקטעים כאשר אין סמלים זמינים.

__insmod_modulename_Ppersistent_filename

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

הבעיה השנייה עם הליבה debugging אופס במודולים היא כי התוכן של / proc / ksyms ו / proc / מודולים יכולים להשתנות בין אופס וכאשר אתה מעבד את קובץ היומן. כדי לסייע להתגבר על בעיה זו, אם הספרייה / var / log / ksymoops קיים ואז insmod ו rmmod באופן אוטומטי להעתיק / proc / ksyms ו / proc / מודולים ל / var / log / ksymoops עם קידומת של 'תאריך +% Y% % d% H% M% S`. מנהל המערכת יכול לספר ksymoops אילו קבצי תמונה להשתמש בעת איתור באגים. אין מתג להשבית את העותק האוטומטי. אם אתה לא רוצה שזה יקרה, לא ליצור / var / log / ksymoops . אם ספריה זו קיימת, היא צריכה להיות בבעלות השורש ולהיות במצב 644 או 600 ואתה צריך להפעיל את התסריט כל יום או משהו כזה. הסקריפט שלהלן מותקן כ- insmod_ksymoops_clean .

מידע בסיסי לדעת

שֵׁם

- להתקין מודול הקרנל לטעון

תַקצִיר

inmmod [-fhkLmnpqrsSvVxXyYN] [-e persist_name ] [-o module_name ] [-O blob_name ] [-P קידומת ] מודול [ סמל = ערך ...]