歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

給Linux發行版安裝新內核

我的機器是Thinkpad T420i, 系統是debian wheezy.

1, 編譯Kernel: 
  make menuconfig 
  make -jn 
  sudo make modules_install 
  sudo make headers_install 
  sudo make install 
  sudo update-grub (Ubuntu only) 
 
    NOTE: 
        ERROR: P: Installing debian theme...cp: cannot stat `/usr/share/syslinux/themes/debian-wheezy/extlinux/memtest.bin': No such file or directory 
        FIXED: sudo touch /boot/memtest.bin 
 
2, 重啟系統,使用自己編譯的 Kernel 啟動。 
 
3, initrd 
  如果沒有生成initrd.img,則需要手工生成,並添加到grub.cfg 
  sudo mkinitramfs -o /boot/initrd.img-3.2.34 3.2.34-LEE@Ts (新的模塊目錄名/lib/modules/3.2.34-LEE@Ts/) 
  添加到grub.cfg: 如果執行了sudo update-grub, grub中有添加如下信息. 如果沒有, 執行完sudo update-grub, 就可以拷貝以前的。 
  添加initrd.img到grub.cfg中: 
 
  menuentry "Ubuntu 10.10, kernel 3.2.34 (on /dev/sda1)" { 
  insmod part_msdos 
  insmod ext2 
  set root='(hd0,msdos1)' 
  search --no-floppy --fs-uuid --set xxxxxxxxxxx 
  linux /boot/vmlinuz-3.2.34 root=UUID=xxxxxxxxxxxx ro quiet splash 
  ### Add the initrd ### 
  initrd /boot/initrd.img-3.2.34 
  } 
  其中的 xxxxxxxxx 是UUID, 通過 ls -l /dev/disk/by-uuid得到. 
 
4, 安裝source和headers:(當前目錄是剛剛編譯完的那個內核) 
 
  export OBJ=/tmp/obj-linux-source 
  mkdir $OBJ 
  cp Makefile $OBJ/ 
  cp Module.symvers $OBJ/ 
  cp -rf ./include/ $OBJ/ 
  mkdir -p $OBJ/arch/x86/kernel/ 
  cp -f arch/x86/Makefile* $OBJ/arch/x86/ 
  cp -f arch/x86/kernel/asm-offsets* $OBJ/arch/x86/kernel/ 
  cp -rf arch/x86/include/ $OBJ/arch/x86/ 
  cd scripts/; make bin2c pnmtologo; cd ..; 
  cp -rf scripts/ $OBJ/ 
 
  mv $OBJ/ /usr/src/linux-source-your-version 
  cd /usr/src/ 
  rm linux-kbuild-3.2; ln -s /usr/src/linux-source-your-version linux-kbuild-3.2; 
  cd /usr/lib/ 
  rm -rf linux-kbuild-3.2/ 
  ln -s /usr/src/linux-source-your-version linux-kbuild-3.2 
 
  cd /lib/modules/new-modules/ 
  rm build source 
  ln -s /usr/src/linux-source-your-version build 
  ln -s /usr/src/linux-source-your-version source 
 
5, 清理工作 
    - 刪除之前創建的"/boot/memtest.bin" 
    - 刪除舊的內核 
        rm memtest86+.bin config-3.2.0-4-amd64 initrd.img-3.2.0-4-amd64 System.map-3.2.0-4-amd64 vmlinuz-3.2.0-4-amd64 
    - 更改鏈接 
        /initrd.img -> /boot/initrd.img-3.2.34-LEE@Ts 
        /vmlinuz -> /boot/vmlinuz-3.2.34-LEE@Ts 
    - 刪除舊的/lib/modules/xxxx 
        有些軟件(e.g. virtual box)可能自己創建了一個目錄, 裡面只有寥寥的幾個文件, 不要刪掉. 
        只刪你當前用的版本就沒有問題了. 
    - sudo updata-grub2 
 
6, 第三方驅動 
  除安裝 Kernel 本身外, 還需要安裝頭文件, 這樣才可以編譯第三方驅動. 
  有時, 你自己的Kernel配置中,必須關閉CONFIG_MODVERSIONS這個選項,要不然會出 
  現因為某些符號找不到而無法加載WIFI驅動模塊的問題。 
 
  [*] Enable loadable module support ---> 
  [ ] Module versioning support <--- 未選中 
 
  如果之前的編譯的Kernel是選中的,請重新編譯安裝. 
   
  http://sudolee.googlecode.com/files/92ce_se_de_linux_mac80211_0005.1230.2011.tar.gz 
 
  sudo make install 
  sudo make modules_install 
  sudo make headers_install 
 
  手動加載: 
  sudo modprobe rtl8192se 
--end--

Copyright © Linux教程網 All Rights Reserved