阿威 寫:我第一次make config是參照網中人大大寫的文章來設定。
他裡面很多地方都是說,能模組化就模組化。
我不知道是不是我模組化太多了
結果make-kpkg時花了我倆個小時
不知各位大大是怎樣設定的。
阿威兄, 提供您一些我自己的經驗, 也許不完全正確, 但希望對您有幫助....
內容有點長, 有點囉嗦, 且大部份內容相信您和看此篇的各位大大都早已知道....
首先, 當然是要下載 kernel 的 source 啦! 一般來說都把 kernel source 解在 /usr/src 下面.. 解開後是一個叫 linux 的目錄, 依照著許多 distribution 的做法, 都把它 rename 成 linux-x.y.z (x.y.z 為版本), 再 symbolic link 到 /usr/src/linux....
網路上有許多人提供 patch set 可以用, 比較有名的像 -ac, -aa, -mjc.... 等等,
各有各的特色, 您有興趣的話可以試試.... apply patch 的方法大部份是進到 /usr/src/linux 之下用
patch -p1 < patch-xxx 或
bzip2 -cd patch-xxx.bz2 | patch -p1 或
gzip -cd patch-xxx.gz | patch -p1
不過不一定所有的都是用 "-p1", 要看 diff 的路徑來決定....
之後, 進到 /usr/src/linux 之下, config 您的 kernel, 可以用 "make config" 或 "make menuconfig" 或 "make xconfig", 現在 "make config" 似乎是比較不人道的作法, 雖然說我剛開始玩時只有這個可以用..
"make xconfig" 則是在 X 下用的....
config 的選項要怎麼選呢? 其實每一個選項都有說明, 花點工夫看看我覺得一定是有幫助的, 但是有些選項可能您還是無法確定, 這時請不要忘了您現在正在跑的 kernel, 它的設定在您的機器上是 OK 的, 您需要的東東他都有編進去.... 但 config 在哪兒呢? 以 debian 來說, config 在 /boot.config-x.y.z , 並 symbolic link 一份到 /boot/config, 開另一個 terminal, reference 一下他的內容, 相對應到哪一個選項, 您看一下 "make menuconfig/xconfig" 每個選項說明的最上面一行就知道了!
不過大部份的 distribution 都有用到 initrd, 我個人認為對我們來說這個並不是很必要, 因為 distribution 的 kernel 是要做給各式各樣不同的硬體用的, 它不可能把所有的 option 都放到 kernel 中, 而我們自己要用的就簡單得多....
但是不使用 initrd 的話, 有些選項就要注意了, 只要是您
開機要用到的東東一律要設為 enable, 不能設為 module, 因為不用 initrd, 只要 "/" 沒有 mount 上, kernel 就讀不到 modules.... 什麼是開機要用到的呢? 嗯, 從一開始一直到 "/" mount 上來, 您的開機磁碟相關功能(IDE/SCSI, disk support), "/" partition 用的 file system(用 ext3 的話, ext2 & ext3 都要 enable, 用 reiserfs 請 enable reiserfs), 還有一些 optional 的顯示選項(vga text console等), 其它的就可以設為 module 了! 還有記得 CPU type 改成您使用的 CPU....
到這裡已經完成一大半了! 選擇"離開", 別忘了儲存您選的 option, 然後在 /usr/src/linux 下面, 執行 "make dep && make clean bzImage modules modules_install", 然後就可以好好地休息一下了.... 若最後正常完成, 沒有看到 error messages, 恭喜! 您的新 kernel 做好囉!
再下來把東西放到它該在的地方, modules 在上一步 "make modules_install" 時就已經 copy 到 /lib/modules/x.y.z 下面了, 不用我們費心, 我們只要處理 kernel image 即可....
以 debian 來說, /usr/src/linux/arch/i386/boot/bzImage 就是你要的 kernel, 把它 copy 到 /boot/vmlinuz-x.y.z , 然後把 /usr/src/linux/.config copy 到 /boot/config-x.y.z , /usr/src/linux/System.map copy 到 /boot/System.map-x.y.z
再來呢, 做 symbolic link /boot/config 指到 /boot/config-x.y.z , /boot/System.map 指到 /boot/System.map , 把 /vmlinuz.old 指到您現在正在用的 kernel, /vmlinuz 指到您新的 kernel /boot/vmlinuz-x.y.z , 執行一下 lilo , 打完收工....
有沒有比較快的方法呢? 是的, 的確有!
不過容小弟賣個關子, 整理整理之後, 再和大家討論!