2010年1月22日 星期五

[Linux] 麗娜思小妹妹幫你換心臟囉

小妹妹要有強壯的心靈,才不會被奇怪的大哥哥拐走!!!
又可以幫她脫光光了 YA

最近想弄點東西,抓了kernel source 來幫麗納思小妹妹換個強壯的心靈!!!

按照慣例

這是神級的官網
http://www.kernel.org/

版本這次用的是
2.6.32.4
雖然工作機是Unbuntu不過這次要換的是Debian小B機~

首先準備
解開linux source 需要bzip2 (debian 預設沒有裝)
make menuconfig 需要ncurses-devel,ncurses-devel 需要叫做libncurses5-dev (靠~debian 預設還是沒有裝,不過我就是喜歡她這點>////////< 不穿比較好)

  • 編譯步驟
Linux Source 的Makefile有寫HELP說明所以先
make help <-- Makefile 有寫了哪些目標可以被make

就會發現下面很有用的訊息:
make mrproper <-- 清光設定檔包跨 .config + make clean
make clean <-- 就是 clean

make menuconfig <-- 選菜
make oldconfig <-- 只有列出新的來選

make all <-- 等於make vmlinux, make modules, make bzImage

make vmlinux <-- 作出沒有壓縮的核心,在source 根目錄會看到
make modules <-- 作出核心用的模組,以後可以insmod
make bzImage <-- 作出壓縮過的核心,在arch/i386/boot/bzImage,或是arch/i386/boot/bzImage -> ../../x86/boot/bzImage

make module_install <--會幫忙拷貝module到目錄/lib/modules... 玩玩而已可以不用才怪 囧>

  1. make menuconfig (記得拷貝舊的來用,在/boot/下面有)
  2. make all
  3. make moudule_install (用來做initrd.img) copy 檔案到系統/boot下,需要vmlinuz、initrd.img、System.map、新config
  4. 修改/boot/grub/menu.lst
  5. 重開機
確認一下

littleB:/home/bejo/code# uname -a
Linux littleB 2.6.32.4 #1 Fri Jan 22 07:00:51 CST 2010 i686 GNU/Linux
YES~

-----
總結來說,核心就是一個檔案,開機之後bootloader指到那邊去執行,initrd.img是為瞭解決巧妙的驅動問題,就是前人沒想到sata會出現嘛... 還是一個小小的kernel唷,bootloader之後就是交給initrd.img再交給vmliunz

檔案說明
System.map <--記得拷貝到 /boot/
What Is The System.map File?
There are 2 files that are used as a symbol table:
1. /proc/ksyms (在ubuntu 是 /proc/kallsyms,媽的~我開始覺得這東西流著debianㄧ樣GY的血液是真的)
2. System.map
這個檔案會紀錄module應該插入的symbol記憶體位置,如果模組有問題的話,可以確認一下。


vmlinux <-- 沒壓縮的核心檔
vmlinuz <-- 有壓縮的核心檔
bzImage <-- 有壓縮的核心檔,用bzip壓縮,把這個檔案拷貝到 /boot 下,然後更改成vmlinuxz
zImage <-- 有壓縮的核心檔,用gzip壓縮

.config <-- 系統原本的設定檔,如果要升級現有kernel可以在/boot 下面找到類似config-2.6.27-16-generic之前的前一份檔
所以可以把它拷貝出來餵給現在的核心吃,這樣就不會不知道選啥Kernel菜了,所以記得換過核心要順便把新的config塞進去,守規矩。

mkinitramfs 這東西製造出新的initrd.img
mkinitramfs -o initrd.img-版號 版號
(在這之前ㄧ定要make modules_install 因為它會吃/lib/module/板號)
(如果編譯端不是安裝端,可以用Makefile 改路徑騙過他)

修改開機的kernel選擇
/boot/grub/menu.lst
增加
title BeJo GNU/Linux, kernel 2.6.32.4
root (hd0,0)
kernel /boot/vmlinuz-2.6.32.4 root=/dev/hda1 ro
initrd /boot/initrd.img-2.6.32.4
savedefault



下面是Unbuntu的,有uuid跟debian不大ㄧ樣,照換也可以。
title linux kernel 2.6.27.7
uuid bdce929d-3c0b-4f10-aeb7-76b0fb8b62cd
kernel /vmlinuz-2.6.27.7 root=UUID=1d668bc0-d6b1-4798-8173-b05b65e925e7 ro quiet splash
initrd /initrd.img-2.6.27.7
quie