תרגול 4 Flashcards
למה יש מודלים
להוספת פונקציוניות חדשה לגרעין בזמן ריצה
לדוגמה דרייברים להתקנים חדשים שהכנסו למחשב
מה הבעיה עם טעינת מערכת ההפעלה בעליית המחשב
שהמחשב עולה צריך לטעון את מערכת ההפעלה מהדיסק אבל בשביל זה צריך מערכת הפעלה
Bios
ראשי תיבות
Basic input output system
מהי ביוס
מתי נטען
התוכנה הראשונה שנטענת למחשב
צרובה בהתקן חומרה ונטענת לכתובת קבועה בזכרון בעת עליית המחשב
הוא מזהה את התקני החומרה המחוברים למחשב
בודק מקלדת ועכבר תקינים
עובר כל רשימה מוגדרת מראש לחיפוש התקן מאפשר אתחולbootable device
אם לא מוצא התקן כזה מדפיס שגיאה
אם מוצא אז טועם את הסקטור הראשון שלו למקום קבוע בזכרון
איזה שינוי עבר הביוס כיום
היום בדרכ על זכרון שמאפשר כתיבה כדי לידכן אותו
יש מנגנון חדש שמועדף עליו בשם UEFI
Mbr
ראשי תיבות
Master boot record
Mbr
מה זה
סקטור ראשון של דיסק מאפשר אתחול
מיכל קוד אסמבלי בסיסי לטעינת מנהל האתחול
Boot loader
למה לא שומרית את הboot loader
ב
Mbr
לא יספיק לנו 512 בתים
באיזה boot loader
לינוקס משתמש לרוב
Grub
איך grub מצליח לגשת לדרייבריפ כמו מקלדת עכבר ודיסק?
האם זה מושלם ?
הוא מנצל את זה שהביוס כבר מימש אותם ומשתמש בהם
הדרייברים מצומצמים יחסית ןלכן לפעמים יכול לפספס דיסקים
שלבי טעינת גרעין לינוקס
וכמה שוקל כל דבר בתהליך
Grub
טוען לזיכרון תמונה דחוסה של הגרעין
bzimage/vmlinuz
ואז מחלץ אותה
שוקלת בערך 8 מגה
Grub
טוען את מערכת הקבצים הראשונית
שהיא מערכת קבצים קטנה
initramfs inital ram file system
Or
Initrd initial ram disk
כמה עשרות מגה
גרעין הלינוקס מריץ את
/init
מתוך מערכת הקבצים
בדרך כלל זהו סקריפט shell
התוכנית הזו טוענת את הדרייברים הנחוצים ועושה mount למערכת הקבצים האמיתית במקום הראשונית
גרעין הליקנוס קורא ל
/sbin/init
האם מערכת הקבצים הראשונית מכילה את כל הדרייברים במחשב?
לא
לדוגמה דרייברים של כרטיס רשת לא רלוונטים לה בכלל ויטענו עם מערכת ההפעלה האמיתית
מהי פקודת
dmesg -H
בעזרתה ניתן לראות הדפסות שהיו במהלך עליית המערכת
איזה פקודה
טוענת מודל חדש
פורקת קיים
מציגה רשימת הטעונים
insmod
Rmmod
Lsmod
האם מודלים יכולים
להוסיף קריאת מערכת חדשות
להוסיף מערכת קבצים חדשות
לשנות קריאות מערכת קיימות
כן כן כן
מה היתרונות של מודלים
משאירים את הגרעין קטן
כל משתמש טוען איזה מודלים שהוא צריך
ניתן להוסיף בעתיד תמיכה בחומרה חדשה בלי לשנות את הגרעין
יותר מהר לקמפל את הגרעין כי יותר קטן
אפשר להוסיף אותם בלי לעשות ריסט ובלי לקמפל את כל הגרעין
האם אפשר לטעון מודלים בתור משתמש לא root
No
Root only
על מה חשוב להקפיד בבניית מודל
להקפיד על אבטחה כי המודל רץ במצב גרעין
מה הקשר בין גרסת הלינוקס שבה נבנה המודל לזה שרץ בה
חייבת שהמודל שרץ יבנה על אותה מערכת הפעלה שרץ בה כדי למנוע שגיאות
בעת כתיבת מודל
מה הפונקציה שתרוץ בעת טעינת המודל
בעת מחיקת המודל
init_module(void)…
cleanup_module(void) …
איזה ספרייה צריל ליבא בקוד מודל
<linux/module.h>
מהי
modprobe
פקודה בטרמינל כמו insmod
רק שהיא טוענת גם את התלויות מודלים שיש למודל
אם יש מודלים שהוא צריך בעצמו
איך מודל מקבל פרמטר מהמשתמש
אפשר בעת טעינת המודל להעביר לו פרמטרים
בעזרת המאקרו
moudle_param(varName, int/sting…, SIRGO irrelvat)
איפה התקנים נשמרים
איך המשתמש מדבר איתם
תחת
/dev
המשתמש מדבר איתם בממשק הסטנדרטי של read write open…
מה זה דרייבר
באיזה הרשאות רץ
מה מטרתו
מנהל ההתקן
רץ בהרשאות גרעין
המטרה שלו היא לגשר בין המשתמש שמדבר עם הקובץ שמייצג את החומרה לחומרה עצמה
מה ההבדל בין מכניזם למדיניות
מכניזם זה מה אפשר לעשות לדוגמה החלפת הקשר
לזה אחראי גם הדרייבר
והמדיניות זה איך עושים את זה
לדוגמה בחירה של אופן זימון תהליכים
מה זה התקן תווים
והתקן בלוקים
התקן תווים
ניגשים אליו כרצף של בתים
לרוב ניתן לגשת אליו באופן סדרתי ולא אקראי
משמש לרוב להעברת מידע
לדוגמה מקלדת או עכבר
התקן בלוקים
ניתן לגשת אליו בכפולות של בלוק
לדוגמה 512 בתים
לרוב משמש לאחסון
אפשר לגשת אליו אקראית
איך אפשר לראות את המספר הראשי והמשני של device
ls -l /dev
X,y
X major
Y minor
Major and minor number
איך נקראים בעברית
לאיזה סוג התקנים רלוונטים
מה משמעותם
מספר ראשי ומשני
שייכים להתקני תווים
מספר ראשי - מזהה את הדרייבר המקושר להתקן
מספר משני - מזהה ספציפי לתהקן תחת דרייבר מסויים
Open
ופונקציות של הדרייבר
מי משתמש במספר המשני והראשי של הדרייבר
Open משתמשת בראשי כדי לדעת איזה דרייבר יש להתקן
המשני משומש לדוגמה לניהול של הדרייבר
מה המספר הראשי של התקנים פיקטיביים
1
איזה התקנים פיקטיבים יש ומה קראיה וכתיבה אליהם תניב
/dev/null - EOF - מצליח והמידע נזרק
/dev/zero - רצף אפסים כפי שיבוקש -
מצליח ונזרק
/dev/full
מחזיר רצף אפסים
מחזיר מיד ENOSPC
/dev/random
/dev/arandom
/dev/urandom
מחזירה רצף בתים אקראי שנוצר מרעש
כותב לרצף הבתים האקראי
מהו udev
Deamon
אשר מזהה התקנים מחוברים למערכת ומייתר בשבילם התקן ב/dev
כדי שהמשתמש לא יצטרך לעשות זאת ידנית
איך מוחקים התקן מהמערכת
מוחקים את הקובץ המתאים לו
איך מיצרים התקן חדש
בטרמינל
mknod NAme c/b major minor
בעת open
מוקצה fd בfdt
על מה הוא מצביע?
מה הקשר לדרייברים
על אובייקט מסוג struct file
שמכיל מצביע למבנה מסוג
file_operations
בשם
F_op
המימש שלו זה בעצם הדרייבר
מה זה אומר אם f_op
מצביע לnull
מימוש דיפולטי של הפעולות
שדות חשובים בfile operation
Open read write
מצביעים למימוש
Release
מצביע לפונק לשחרור ההתקן
רק כאשר כל העותקים נסגרו
Flush
מצביע לפונק לכתיבה החוצצים להתקן וניקויים
מופעלת כשתהליך סוגר את ההתקן
אם לא מומש מה לא תעשה כלום
llseek
משנה את המיקום הנוכחי בקובץ
מחזיר את המיקום החדש
ioctl
מעביר פקודות ייחודיות להתקן
רק אם אי אפשר ללממש עם השאר נשתמש בזה
מה נקבל אם נקרא לioctl
שלא מומש
EINVAL
-1
מה מקבלת ioctl
Fd
Cmd number
And …
איזה פונק גרעין רושמות ומוחקות דרייבר
ומה מקבלות
register_chrdev
מקבלת מספר ראשי
שם דרייבר
מצביע לfops
Unregister_chardev
מקבלת מספר ראשי
ושם דרייבר
ומשחררת את מספר הראשי של הדרייבר
לא מוחקת את קובץ הדרייבר ב/dev
איך ממומש דרייבר בתור מודר
In module
Init_moudle will call register_char_chrdev
Cleanup_module calls unregister_chrdev
האם רישום דרייבר מקושר ישירות להתקן?
לא
זה מקושר למספר ראשי לא להתקן מסויים
איך נקרא באנגלית מערך הדרייברים הרשומים
מה יש בכל כניסה
איך נראה
chrdevs[]
שומר את כל הדרייברים הרשומים במערכת
כל כנסיה אינדקס=מספר ראשי
כל כניסה מכילה את השם של הדרייבר ומצביע לfops
האם
Chrdev
הוא באמת מערך?
מלינוקס 4.15 הוא hash table
איפה נשמרים הדרייברים
ואיך אפשר לקרוא אותם
/proc/devices
Cat to the file
האם יכולים להיות2 דרייברים עם אותו מספר ראשי
כן
אחד להתקני בלוקים ואחד לתווים
כמה מספרים ראשיים יש בלינוקס
512
איך מבקשים מלינוקס מספר ראשי דינאמי
שולחים 0 במפר הראשי בעת רישום הדרייבר
נדע מה הוא לפי ערך החזרה מהרישום
מה יכול לקרות אם הסרנו דרייבר ללא שחרור במספר הראשי שלו
עם
Unregister_chardev?
במקרה הטוב אין דרייבר אחר שנוכל להפיות אליו את הבקשה והמערכת תקרוס
במקרה הרע
דרייבר אחר יתפוס את המספר הראשי והוא יטפל בבקשות
איך משחררים את המספר הראשי של דרייבר
Unregister_chardev(major, name)
שלהי הפעולה של
sys_open
בהקשר דרייברים
ניגשת למערכת הקבצים וקוראת את המספר הראשי והמשני של ההתקן
לפי הinode של קובץ ההתקן
מוודאת שיש דרייבר רשום להתקן לפי המספר הראשי בchedevs (אם המיקום במערך לאnull(
משנה את
file->ops
להצביע על המימוש של הדרייבר
chrdevs[M]->f_ops
אם הדרייבר מימש אתopen מעבירים לו בין היתר את המספר המשני