Modules and Drivers Flashcards
מה קורה לאחר הדלקת המחשב?
- קוד ה-BIOS נטען לזיכרון והמעבד מתחיל להריץ אותו
- ה-BIOS טוען את הסקטור הראשון של הדיסק (MBR) לזיכרון
- קוד ה-MBR טוען את ה-boot loader
- ה-boot loader טוען את גרעין לינוקס
- גרעין לינוקס טוען את תהליך init ומריץ אותו
מהם תפקידי ה-BIOS?
- לזהות את התקני החומרה המחוברים למערכת.
- לבדוק שההתקנים הבסיסיים (מסך, מקלדת, …) פועלים בצורה תקינה.
- לעבור על רשימה מוגדרת מראש של התקנים, ולחפש התקן המאפשר אתחול (bootable device).
- אם לא נמצא אף התקן כזה, ה-BIOS רושם הודעת שגיאה למסך ומפסיק את תהליך האיתחול.
- אם נמצא התקן כזה, ה-BIOS טוען את הסקטור הראשון של ההתקן למקום קבוע בזיכרון.
מה זה MBR (master boot record)?
אם הדיסק הוא התקן המאפשר אתחול (bootable device), אז הסקטור הראשון בדיסק נקרא MBR (master boot record).
ה-MBR מכיל קוד אסמבלי בסיסי המשמש לטעינת קוד נוסף: מנהל האתחול (boot loader).
מה זה GRUB?
ה-boot loader של לינוקס
כיצד נטען גרעין לינוקס?
- GRUB טוען לזיכרון תמונה דחוסה של הגרעין, אשר נקראת בדרך כלל bzImage או vmlinuz, ואז מחלץ אותה.
- לצד תמונת הגרעין, GRUB טוען לזיכרון גם את מערכת הקבצים הראשונית: מערכת קבצים קטנה בשם initramfs או initrd.
- גרעין לינוקס מריץ את התוכנית /init מתוך מערכת הקבצים הראשונית.
/init היא בדרך-כלל סקריפט shell.
מה תפקידה של מערכת הקבצים הראשונית ומה עושה התוכנית init\?
מערכת הקבצים הראשונית מכילה את המודולים הנחוצים עבור גרעין לינוקס כדי לחפש ולטעון את מערכת הקבצים האמיתית.
התוכנית /init טוענת את הדרייברים הנחוצים ומרכיבה (mounts) את מערכת הקבצים האמיתית במקום מערכת הקבצים הראשונית.
מה זה מודול?
מודולים מאפשרים להוסיף לגרעין לינוקס, בזמן ריצה, קטעי קוד חדשים.
מודול הוא ספריה משותפת (shared library) הנטענת (מקושרת) בזמן ריצה ופועלת במצב גרעין (כלומר CPL==0).
למה משמשים מודולים?
מודולים משמשים בעיקר על מנת להוסיף תמיכה בהתקני חומרה (devices) ע”י דרייברים (drivers):
מי יכול להוסיף מודולים למערכת?
רק משתמש root.
בעזרת איזו פקודה מוסיפים ומסירים מודולים?
הוספה - insmod
הסרה - rmmod
איך מעברים פרמטרים למודול?
Using the macro: module_param
example: int iValue=0; // 0 is the default value char *sValue; module_param(iValue, int, S_IRUGO); module_param(sValue, charp, S_IRUGO);
then we can pass parameters during module insertion: insmod ./params.ko iValue=3 sValue=“hello”
איך ניתן להעביר פרמטר אופציונלי למודול?
בעזרת מערך 0-1
מי התהליך שמריץ את טעינת המודול?
התהליך שמריץ את insmod (תהליך בן של shell).
מהו דרייבר?
דרייבר הוא שכבת תוכנה החוצצת בין ההתקן לבין האפליקציה כדי לספק אבסטרקציה לפעולת ההתקן הספציפי.
מהו התקן תוים ומהו התקן בלוקים?
התקן תווים
התקן שניגשים אליו כאל רצף של בתים.
לרוב משמשים להעברת מידע. לדוגמה: מסך, מקלדת.
בדרך כלל ניתן לגשת להתקן תווים רק באופן סדרתי (ולא אקראי).
התקן בלוקים
התקן שניתן לגשת אליו רק בכפולות של בלוק(למשל 512 בתים).
לרוב משמשים לאחסון מידע. לדוגמה: דיסק קשיח, דיסק נשלף (disk on key).
התקן בלוקים מאפשר גישה אקראית למידע שבו.
לינוקס מוסיפה שכבה נוספת (page cache) ומאפשרת לקרוא מהתקני בלוקים גם בתים בודדים.