יום שבת, 24 במאי 2008

הכל על Kext (האקינטוש דרייבר)


מה זה KEXT?
KEXT זה ראשי תיבות של Kernel Extension, כלומר הרחבה לליבה של מערכת ההעפלה, כל מה שצריך לחיות כל הזמן במערכת ההפעלה ולרוץ מהר ולהיות זמין מרגע העליה של המערכת (כמו דרייבר) יכתב כ KEXT, בגלל שכותבים קוד כזה כהרחבה למערכת ההפעלה, ניתן להטעין את הקוד לזיכרון ולהוריד אותו מהזיכרון אפילו כשהמערכת הפעלה למעלה (מבלי הצורך באתחול), כשרוצים לפתח או לכתוב דרייבר, מפתחים אותו כ Kext.

איפה נמצאים קבצי ה Kext?
Kext הינם קבצים עם סיומת Kext, למעשה אלה אינם קבצים אלה ספריות (כמו הרבה דברים במק), אלה ספריות עם סיומת Kext וכך מערכת ההפעלה יודעת להסתיר מהמשתמש הרגיל את הסיפריה ובעצם מציגה לו קובץ (אותו דבר אפליקציות הינם ספריות עם סיומת app), הסיפריה מכילה את כל מה שהדרייבר צריך, קובץ בינארי, ספריות, Plugins, קבצי הגדרה, תמונות טקסטים ומשאבים אחרים, הכל ארוז בתקן מוגדר מראש ע"י אפל.
כדי לראות מה יש בקובץ כלשהו שהוא בעצם ספריה יש ללחוץ קליק ימני על הקובץ ולבחור באופציה "Show Package Contents", מיד יפתח חלון חדש של פיינדר (שזה הסייר של מק) ויציג את כל הקבצים והסיפריות של הקובץ.

לאופרד מחזיק את קבצי ה Kext בספריה:
/System/Library/Extensions
הספריה מכילה המון דרייברים הרבה יותר ממה שאתם צריכים, למעשה כל דרייבר שאי פעם נכתב באפל נמצא כאן. אז מה? כל עליית מחשב תעלה את כל הדרייברים למרות שאני לא זקוק להם? לא, למעשה בעליה הראשונה של מערכת ההפעלה יש מערכת יפה שכתבו באפל והיא לוקחת את המושג Plug And Play צעד אחד קדימה, למעשה כשחומרה חדשה מחוברת למחשב, או מאותחלת בזמן עליה היא מכריזה שהיא צריכה דרייבר שתומך בה, מק מחפש את הדרייבר שהכי מתאים (לפי הפרטים של רכיב החומרה) ומעלה אותו, אם אותו דרייבר זקוק לדרייבר נוסף כדי לפעול הוא יתנהג כחומרה חדשה והתהליך יחזור על עצמו עד שכל הדרייברים הנחוצים לעבודת המק יעלו. מיד בתום העליה הראשונה ישמרו כל הדרייברים לקובץ (שהוא בעצם ספריה, קלטתם) בשם: Extensions.mkext זאת ספריית או קובץ מטמון (Cache) אשר מכיל את כל הדרייברים הנחוצים למחשב הנוכחי,

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

ניתן גם לבקש מלאופרד למחוק את הקובץ ולבנות אותו מחדש מתוך הדארווין פרומפט (Darwin Prompt) בזמן עליית המחשב ע"י כתיבת הפרמטר: f- בדקו את הפוסט הזה כדי לקבל עוד מידע.

איך להטעין ולהסיר Kext מהזיכרון (בזמן שמערכת ההפעלה כבר רצה)?
ניתן להטעין ולהסיר KEXT מהזיכרון בזמן ריצה (כשמערכת ההפעלה כבר למעלה), מבלי הצורך באתחול המחשב בעזרת הפקודה: kextload ו kextunload.

כדי להטעין דרייבר (Kext) אל הזיכרון יש לפתוח טרמינל ולכתוב:
sudo kextload kextName (כאשר את kextName יש להחליף בשם ה kext שאותו מעוניינים להטעין)
ליחצו אנטר, הקלידו את סיסמתכם ולחצו אנטר.
המערכת תענה בחזרה עם הודעת הצלחה או כישלון.
קראו יותר על הפקודה בדף ההסבר על הפקודה (ManPage)

כדי להסיר Kext מהזיכרון פתחו טרמינל וכתבו:
sudo kextunload kextName (כאשר את kextName יש להחליף בשם ה kext שאותו מעוניינים להסיר)
ליחצו אנטר, הקלידו את סיסמתכם ולחצו אנטר.
המערכת תענה בחזרה עם הודעת הצלחה או כישלון.
קראו יותר על הפקודה בדף ההסבר על הפקודה (ManPage)

ניתן גם לבדוק את הסטאטוס של ה Kext בזיכרון (האם הוא טעון או לא) ע"י הפקודה: kextstat,
פתחו טרמינל והקלידו:
sudo kextstat
המערכת תציג רשימת דרייברים הטעונים לזיכרון (Kext) ומידע עליהם,
קראו יותר על הפקודה בדף ההסבר על הפקודה (ManPage)

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

איך מתקינים Kext (דרייבר) חדש?
פיתחו טרמינל והקלידו:
cd /System/Library/Extensions
mv KextName.kext KextName.old (כאשר את kextName תחליפו בשם קובץ ה kext הישן אותו אתם מחליפים, במידה והוא קיים לפני ההתקנה)
פקודה זו משנה את שמו של הדרייבר הישן וע"י כך בעצם מגבה אותו, (שימו לב שלאחר שינוי השם הסיומת כבר לא תהיה Kext ולכן מערכת ההפעלה לא תסתיר אותו כקובץ, אלה תראו בפיינדר ספריה), מאוד חשוב לבצע את השלב הזה כי הגיבוי הזה יכול להציל לכם את מערכת ההפעלה וימנע התקנות מיותרות. (לא תמיד יעזור אבל לרוב)

cd /path_to_new_kext (החליפו את הנתיב path_to_new_kext במנתיב שאליו הורדתם את קובץ ה Kext שאותו אתם מעוניינים להתקין)
cp -R KextName.kext /System/Library/Extensions
פקודה זו מעתיקה את הדרייבר אל ספריית הדרייברים.

השלב הבא הוא לתקן את ההרשאות לקובץ כדי שלמערכת ההפעלה תהיה הרשאת גישה לקובץ
cd /System/Library/Extensions
chmod -R 755 KextName.kext החליפו את KextName.kext בשם הדרייבר אותו העתקתם
chown -R 0:0 KextName.kext החליפו את KextName.kext בשם הדרייבר אותו העתקתם
rm /System/Library/Extensions.mkextפקודה זו מוחקת את המטמון של הדרייברים כדי שהדרייבר החדש יכנס אל המטמון ומעתה יעלה עם עליית המערכת

יש עזרה - KextHelper


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

KextHelper היא אפליקציה קטנה בעלת ממשק החזק-גרור-שחרר (לא מצאתי עברית טובה יותר) Drag And Drop שמאפשרת התקנה ותיקון הרשאות ומחיקת המטמון בצורה אוטומטית.

כדי להתקין את ה kext החדש בעזרת KextHelper עקבו אחרי הצעדים הבאים:
1. הריצו את KextHelper
2. גררו ושחררו לאמצע המסך את ה  kext שאתם מעוניינים להתקין
3. הזינו את סיסמתכם בשדה התחתון
4. לחצו על הכפתור "Easy Install"
5. והמתינו לתגובה של התקנה מוצלחת (Success)
6. אתחלו את המחשב (למרות שאתם יכולים ברוב המקרים להטעין ידנית - אבל זה קל יותר לאתחל)

התוכנה מספקת גם אפשרויות מתקדמות כמו גיבוי, הרץ סקריפט, וכו.
אם אתם מפתחים אז אולי תרצו לקרוא את המסמך של אפל על "Kernel Extension Programming"

תהנו.

2 comments:

אנונימי אמר/ה...

היי שי,
התקנתי בהצלחה על מחשב ה lg שלי את האקינטוש תודות למדריכים שלך.
הבעיה היא שאין לי צלילים, ואינטרנט אלחוטי, מאיפה אני יכולה להוריד דריברים למחשב נייד מסדרת e500
הינה קישור לאתר שנותן את המפרט
http://ninja-net.co.il/Product.aspx?ProductID=692
לא ממש הבנתי את המדריך הזה, אודה לך מאוד אם תוכל לעזור לי!

תודה מראש,
שני

אנונימי אמר/ה...

הי שי מה שלומך?
אני ממש ממש צריך עזרה עם התקנה של Osx86
אני מנסה להתקים את המערכת באמצעות IBOOT המערכת פועלת,כשהמערכת עולה בוורבוס מוד מראה שהכרטיס מסך שלי מזוהה

עכשיו זה gtx285 אחד מהבעייתיים ...עכשיו אשמח אם תוכל ליצור איתי קשר באימייל:
shlomi_ohana3@walla.co.il
ולעזור לי עם כל הנושא של kext וכדומי...אני דיי מתמצא במחשבים,גם בחומרה,אבל ברגע שנכנסתי אל הליאופרד,הרגשתי NOOB לגמרי,לא היה לי שמץ.אשמח אם תעזור ,בתודה...שלומי ^ ^