אני לא מבין את הנושא ברמות הטכניות הגבוהות שלו, אבל אני אנסה לעשות לך קצת סדר מתוך נסיוני המועט
קרנל מודול הוא לא כמו דרייבר ב MS. בדיוק כמו שיש דרייברים לחלונות, יש דרייברים ללינוקס, שיכולים להיות קרנל מודול, לשבת בקרנל עצמו, או אפילו כתוכנית רגילה (אם אני לא טועה).
בעת קימפול קרנל אתה יכול לבחור איזה תכונות אתה רוצה להכניס לקרנל שלך, ואיזה לא. לדוגמה, אם אתה משתמש במערכת קבצים מסוג reiserfs תרצה להוסיף לה תמיכה בקרנל, משום שאחרת לא תוכל להשתמש בה. לעומת זאת, אם אתה לא משתמש ב ext3 ואין לך שום כוונה להשתמש בה בעתיד, תוכל לבחור לא להוסיף תמיכה למערכת הקבצים הזו, פשוט מכיוון שאין לך צורך בתמיכה כזאת. לאחר שתעבור על כל האפשרויות ותקמפל את הקרנל תקבל קובץ בודד שהוא-הוא הקרנל הנטען בעת עליית המערכת.
עכשיו, נניח ויש תכונה של הקרנל שאתה רוצה להשתמש בה, אבל לא תמיד (לדוגמה, תמיכה במערכת קבצים שאתה מבצע בה שימוש נדיר, שימוש של פעם בחודש ב FireWire, וכד'). מצד אחד, אתה צריך תמיכה באפשרות הזו, שכן אחרת לא תוכל לעבוד איתה. מצד שני, אין סיבה לטעון כל פעם עם עליית המערכת דברים שהסבירות שתשתמש בהם נמוכה - הדבר מגדיל את זמן עליית המערכת ואת גודל הקרנל עצמו. כדי לפתור את הבעיה הזו קיימים kernel modules. אם תבחר לקמפל תכונה כלשהי כקרנל מודול (ולא את כולן אפשר), היא לא תתווסף לתוך הקרנל עצמו, אלא תישמר מחוצה לו כקובץ נפרד. תוכל לבחור מתי ברצונך לטעון את המודול ומתי להסירו (ע"י פקודות כמו modprobe), וברגע שהמודול נטען לתוך הקרנל הוא משמש כחלק אינטגרלי ממנו, כאילו קומפל ישירות לתוכו (מה שעונה בחיוב לשאלתך "האם קרנל מודול והקרנל עצמו חולקים אותו תחום כתובות בזכרון"). בקיצור, קרנל מודול מאפשר טעינה by demand של מודולים לתוך הקרנל, במקום ההכרח לטעון אותם תמיד.
ולמעבר קצרצר על שאר השאלות שלך:
קרנל מודול לא חייב להיות דרייבר, אלא (כמעט) כל תכונה של הקרנל. הוא נכתב ב C, כמו הקרנל עצמו (אולי אפשר גם בשפות אחרות, את זה אני לא יודע).
כדי לדעת איזה מודולים טעונים כרגע במערכת שלך, השתמש בפקודה lsmod. וכן, יכולה להיות מערכת ללא מודולים כלל.
בקשר לשאלתך האחרונה, אענה מתוך אינטואיציה ולא מתוך ניסיון, כי אין לי. קרנל מודול רץ כחלק מהקרנל עצמו, ולכן שגיאה בו זהה לשגיאה בקרנל. היתרון הוא שאם יש לך מודול שגורם לשגיאה אתה יכול לבחור לא להעלות אותו, ולנסות לאבחן ביתר קלות את הבעיה. תקנו אותי אם אני טועה.
|