בהמשך למאמציי ללמוד את רזי הקרנל של לינוקס (בעיקר בכדי להבין ולכתוב דרייברים ומודולים) רציתי לעלות רשומה מסודרת של אחת הדרכים שעבדו לי כאשר רציתי להדר קרנל חדש למערכת קיימת מקוד מקור (source).
הכנות מקדימות
1. אני יוצא מתוך נקודת הנחה שאנחנו מכירים את פקודת wget והורדנו כבר ממקור אמין את קובץ ה tar.bz2 שמכיל בתוכו את הפריסה שלנו.
2. תחת משתמש על נוריד את הקובץ לספריה
cd /usr/src
rm linux
tar xvfj <kernel-source-file>.tar.bz2
כעת לאחר שמחקנו את קישור ה linux הקודם ופרסנו את קובץ הקרנל נוכל להתחיל בעבודה ממש.
הידור הקרנל
נגדיר קישור חדש למשתנה ה linux שלנו
ln -s <linux-releas> linux
נגדיר הרשאות, וגדיר שינויים רצויים בקרנל (menuconfig) ונתחיל להדר
chown -R root:root <linux-release>
make menuconfig
make all
make module_install
make install
יצירת תמונת initrd
update-initramfs -c -k ‘<release number>’
הוספת קישור לגראב
כעת לפני שנאתחל את המערכת עלינו להוסיף קישור לגראב על ידי
cd /boot/grub
nano menu.lst
כל מה שנותר זה לאתחל את המערכת לקרנל החדש ולהתחיל להשתעשע…
ירון שהרבני
June 30, 2010
יפה מאוד, ההסבר מאוד איכותי
הייתי שמח אם תוכל להסביר קצת יותר על הוספת פא’צים לקרנל או לפרט מעט יותר על הפקודות השונות שציינת במדריך, כלומר למה כל דבר טוב (בשביל מה צריך לעשות symlink לקרנל אותו מקמפלים וכן הלאה)
אם אתה מחפש פאץ’ להתמקד עליו אז יש שניים כאלה שמעניינים אותי במיוחד, האחד זה nvidia לקרנל 2.6.35 (יש מוכן ב־kernel.ubuntu.com) או MOSIX שאותו פעם אחרונה קימפלתי על הקרנל של 9.10 (2.6.30 אם זיכרוני אינו מטעני)
תודה לך על המדריך, תבורך!
vaxincity
July 1, 2010
הלינק חוזר על עצמו בהרבה מדריכים. אני מאמין שבמהלך ריצת ה make ישנן שורות שבהן מופיע גירסת הלינוקס קרנל בצורה של linux ועל כן הלינק הזה חייב להיות מעודכן לגירסת קרנל שאתה מעוניין להדר.
זו גם הסיבה שמחקנו את הלינק הקודם שהיה בספריה (במידה והיה) מכיוון שהוא הוביל לספריה ישנה יותר.
צפריר כהן
July 1, 2010
נדמה לי שאתה מדבר על הקישור /usr/src/linux . לא ידוע לי למה הוא דרוש. אם אתה עובד אם יותר מעץ אחד, רוב הסיכויים הם שהקישור הזה יתביע למקום לא עדכני.
ההתקנה יוצרת לך קישורים בשם source ו־build תחת /lib/modules/VERSION שמצביעים לעץ שישמש לבניית מודולים – אם בנית מקוד מקור – לתיקיית הבניה.
צפריר כהן
June 30, 2010
הערה ראשונה: אם כבר לפי הדרך של דביאן, אז:
make menuconfig #oldconfig, defconfig, whatever
make deb-pkg
תוצאת הבניה תהיה בתיקיה אחת למעלה. כל בניה תעלה ב־1 את מספר הגרסה של החבילה.
זה עובד היטב בגרסאות עדכניות של הקרנל (החל מ־2.6.32, אולי גם קצת קודם)
vaxincity
July 1, 2010
צודק לגמרי צפריר, עברתי גם על הדרך הזו. רציתי לכתוב דרך שתתאים לי על המגוון הפצות – הכותרת שלי אכן מטעה במבט לאחור.
תודה
צפריר כהן
June 30, 2010
הערה שניה: באת להשתעשע או שבאת לפתח? אם באת לפתח, כדאי שתבנה את הקרנל ישירות מ־git
# as root
aptitude install git-core
# building stuff:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
cd linux-2.6
# now let’s build 2.6.31-rc3:
git checkout v2.6.32-rc3
# or maybe better: git checkout -b local-2631rc3 v2.6.31-rc3
מכאן ממשיכים כמו קודם, כאילו פרשנו ארכיון tar.
vaxincity
July 1, 2010
צפריר, אפשר כמה מילים על מה ההבדל בין מה שעשיתי לבין שימוש ב git.
שוב תודה
צפריר כהן
July 1, 2010
ההבדל: ההורדה תיקח לך כנראה קצת יותר זמן. אולם לאחר מכן מעבר בין גרסאות שונות הופך להיות פשוט מאוד וזול מאוד.
אתה רוצה לבדוק האם השינוי שלך מתאים גם לגרסאות קצת יותר ישנות? אין בעיה. תוך כמה שניות אתה עובר לגרסה הזו.
ליאור קפלן
July 1, 2010
קצת ישן (2006), אבל הרצאה שלי על איך בונים קרנלים בדביאן/אובונטו. השיטה בגדול לא השתנתה.
http://people.debian.org/~kaplan/kernel%20building%20in%20debian.pdf
קפלן
vaxincity
July 1, 2010
ליאור, משום מה בשימוש עם make-kpkg הייתי מקבל שגיאה בשלב מסויים. הוא היה טוען שחסרה לו ספרייה כלשהי והוא לא מוצא אותה. בצורה מאוד מוזרה עם make all זה לא קרה.
ZungBang
July 1, 2010
המדריך הרשמי:
http://kernel-handbook.alioth.debian.org/ch-common-tasks.html