Linux 2.6內核編譯過程

以下是自己在vmware裏編譯Linux 2.6內核的全過程,只記錄大致編譯的步驟.具體要求根據實際情況而定.
 
獲得內核源碼的方式
 
方式一:下載內核源碼包
[root@station1 src]# tar -jxvf linux-2.6.34.1.tar.bz2

 

方式二:下載內核補丁包,使用patch升級.
[root@station1 src]# ln -s linux-2.6.34.1 linux
[root@station1 src]# cd linux
[root@station1 linux]# bunzip2 -dv /usr/local/src/patch-2.6.34.1.bz2 | patch -p1
  /usr/local/src/patch-2.6.34.1.bz2: done
[root@station1 linux]#

 

查看是否安裝了必要的工具:
[root@station1 linux]# rpm -qa | grep module-init
module-init-tools-3.3-0.pre3.1.54.el5
[root@station1 linux]# rpm -qa | grep mkinitrd
mkinitrd-5.1.19.6-54
[root@station1 linux]# rpm -qa |grep lvm2
lvm2-2.02.46-8.el5
[root@station1 linux]# rpm -qa |grep device-mapper
device-mapper-1.02.32-1.el5

 

下面開始進入正題:
[root@station1 ~]# uname -r
2.6.18-164.el5
[root@station1 src]# tar -jxvf linux-2.6.34.1.tar.bz2
[root@station1 src]# cd linux-2.6.34.1/
[root@station1 linux-2.6.34.1]# make mrproper
出現警告信息
[root@station1 linux-2.6.34.1]#
make: warning:  Clock skew detected.  Your build may be incomplete.
[root@station1 linux-2.6.34.1]#
解決
[root@station1 linux-2.6.34.1]# date
Sat Jun 26 14:23:38 CST 2010
[root@station1 linux-2.6.34.1]# date 07192010.21
Mon Jul 19 20:10:21 CST 2010
[root@station1 linux-2.6.34.1]# make mrproper    #確保源代碼目錄下沒有不正確的.o文件
[root@station1 linux-2.6.34.1]#
[root@station1 linux-2.6.34.1]# make menuconfig   #配置內核各選項

如下圖:
General setup ----->  核心的一般設定:
1.       Prompt for development and/or incomplete code/driver
 (核心的code開發維護,kernel開發維護都建議不選擇些選項)

 

說明:    [ * ]-將該功能編譯進內核
         [  ]-不將該功能編譯進內核,也不編成模塊
         [M]-以模塊形式加載
2. 支持模塊實時加載
 
 
 
3.       Processor type and features處理器的類型和特點
 
Sysmetric multi-processing support 多處理器支持.
Generic x86 support x86cpu架構支持較佳.
High Memory support (4GB) 較大內存支持.
 
 
4.       Power management and ACPI options 電源管理選項
…………….
加載與保存配置文件.
 
 
核心的編譯與安裝
[root@station1 linux-2.6.34.1]# make clean     #刪除舊的*.o文件.
2.6以前需要make bzImage;make modules  來製作核心文件與模塊, 而且還需要將vmlinuzSystem.map複製到/boot目錄
:如果同一版本的核心編譯兩次,得先將/lib/modules裏面的核心模塊先移掉或者改名.
例如: mv 2.6.12.2 2.6.14.2.old
[root@station1 linux-2.6.34.1]# make
[root@station1 linux-2.6.34.1]# make modules_install  #安裝模塊
[root@station1 linux-2.6.34.1]# make install           #安裝新內核

[root@station1 linux-2.6.34.1]#reboot
 
啓動錯誤信息1.

insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists

解決:
用原來的內核啓動系統.
[root@station1 ~]# cp /boot/initrd-2.6.34.1liwanhong.liunx.img /tmp/
[root@station1 ~]# cd /tmp/;ls
gconfd-root                         keyring-pOzksI  scim-panel-socket:0-root
initrd-2.6.34.1liwanhong.liunx.img  mapping-root
keyring-jWuruw                      orbit-root

 

[root@station1 tmp]# mkdir initrd
[root@station1 tmp]# cd initrd
[root@station1 initrd]# zcat ../initrd-2.6.34.1liwanhong.liunx.img | cpio -i
14545 blocks
[root@station1 initrd]# ls
bin  dev  etc  init  lib  proc  sbin  sys  sysroot
[root@station1 initrd]# vim init
重複加載了/lib/dm-region-hash.ko,刪除其中加載項.
echo "Loading dm-region-hash.ko module"
insmod /lib/dm-region-hash.ko

 

[root@station1 initrd]# find . | cpio -c -o > ../newinitrd
14545 blocks
[root@station1 initrd]#
[root@station1 initrd]# cd ..
[root@station1 tmp]# gzip -9 <newinitrd> initrd.img
[root@station1 tmp]# ll | grep initrd
drwxr-xr-x 9 root root    4096 Jul 20 11:37 initrd
-rw------- 1 root root 3283050 Jul 20 11:28 initrd-2.6.34.1liwanhong.liunx.img
-rw-r--r-- 1 root root 3283045 Jul 20 11:49 initrd.img
-rw-r--r-- 1 root root 7447040 Jul 20 11:48 newinitrd
[root@station1 tmp]# cp initrd.img /boot/initrd-2.6.34.1liwanhong.liunx.img
cp: overwrite `/boot/initrd-2.6.34.1liwanhong.liunx.img'? yes
[root@station1 tmp]# reboot

 

啓動錯誤信息2
Mount: could not find filesystem ‘/dev/root’…

解決:

[root@station1 ~]# cd /usr/src/linux-2.6.34.1/
[root@station1 linux-2.6.34.1]# vim .config

 

設置.config文件,添加:

CONFIG_SYSFS_DEPRECATED_V2=Y

:

重新再編譯一次.

注:將之前安裝的到/lib/modules裏的模塊刪除./boot裏的內核與ramdisk文件刪除.

再以新內核啓動Linux:
[root@station1 ~]# uname -r
2.6.34.1
[root@station1 ~]#
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章