歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux內核 >> Linux內核如何從2.4升級到2.6

Linux內核如何從2.4升級到2.6

日期:2017/3/2 10:47:17   编辑:Linux內核

  作為2.6.0的最後一個測試版本,2.6測試版經歷了更多的檢測器的檢驗,尤其是在當前對開發者進一步追捕內核bugs和穩定工作有非常重大的意義。一旦2.7版本開發樹開展起來,必定將帶來其新特征的研究熱潮。

  本文的目的在於為2.4內核的讀者提供一些升級到2.6內核的技巧。因為2.6內核仍然是個發展中的內核,或許你在運行中會遇到些問題,但是它的總體性能和穩定性還是非常好的。

  小知識:Linux采用了雙樹系統。一個樹是穩定樹(stable tree),另一個樹是非穩定樹(unstable tree)或者開發樹(development tree)。一些新特性、實驗性改進等都將首先在開發樹中進行。如果在開發樹中所做的改進也可以應用於穩定樹,那麼在開發樹中經過測試以後,在穩定樹中將進行相同的改進。一旦開發樹經過了足夠的發展,開發樹就會成為新的穩定樹。

  目標用戶

  本文主要針對Lunix2.4內核的用戶。(如果之前沒有的,可見The Linux Kernel HOWTO)

  准備工作:首先做好重要數據的備份工作

  在開始之前,請確定你的所有數據已經備份。

  第一步:當前2.6內核的安裝(獲取)

  首先,所有Linux內核的官方版本可以在http://kernel.org/. 找到。通過鏡像站點下載內核程序可以比較快捷迅速些。kernel.org 鏡像站點列表:http://kernel.org/mirrors 。

  然後下載GnuPG ,它主要用於檢驗新的內核程序的真實性和合法性。(http://www.kernel.org/signature.html.)

  第二步:熟悉已有文件

  至少需要熟悉頂級README文件、Documentation目錄中的change文件,它們都是分布式的Linux內核源代碼。

  因為2.6.0-test是內核發展中的一個階段(2.6.0沒有擴展名-test,即是2.6的最初版本),所以其頂級README文件引自2.5開發內核的README文件。你將從這個文件中獲得許多成功編譯Linux內核的技巧。(具體內容見附1)

  “Documentation/Changes”文件列出了發展2.5內核的新需求,提供了新內核程序升級的軟件列表。(主要內容見附2)

  第三步:升級系統內每個change文件的版本

  新的2.6內核的升級工作涉及到許多實用程序的升級。對於某些change文件中列出的實用程序也不必擔心,它們或許只是某種文件系統的特殊例子而已。但是,下面的文件還是必須至少要滿足到下表給出的的最低版本:

  

  Name:

  Minimum version:

  How to find version:

Gnu C Compiler

  2.95.3

gcc--versionGnu Make

  3.78

make--versionbinutils

  2.12

ld-vutil-linux

  2.10o

fdformat--versionmodule-init-tools

  0.9.9

depmod-Vprocps

  2.0.9

ps--version[procps 2.x]

  [procps .x]

  (若有變動,參見“Documentation/Change”中的最新更新。具體可見附2)

  下面的實用程序是文件系統中的特殊程序。若運行ext2 或ext3,那麼就必須升級e2fsprogs。若運行jfs,就必須升級jfsutils,等等。如:

  

  Name:

  Minimum version:

  How to find version:

e2fsprogs

  1.29

tune2fsjfsutils

  1.0.14

fsck.jfs -Vreiserfsprogs

  3.6.3

reiserfsck–V 2>&1| grep reiserfsprogsxfsprogs

  2.1.0

xfs_db -Vnfs-utils

  1.0.5

showmount --version

  另外,少數實用程序當你用到它時才需要升級的有:

  

  Name:

  Minimum version:

  How to find version:

pcmcia-cs

  3.1.21

Cardmgr -Vquota-tools

  3.09

Quota -VPPP

  2.4.0

ppd--versionisdn4k-utils

  3.1pre1

Isdnctrl 2>&1 | grep versionoprofile

  0.5.3

oprofiled--version

  如果首次運行ALSA,請訪問http://www.alsa-project.org/獲取最新的alsa-lib 和 alsa-utils。

  第四步:配置新內核

  這裡,你所注意到的首要變化之一就是新的結構體系的形成。舊的TK/Tcl“xconfig”結構由新的QT“xconfig”所取代。當然,GTK“gconfig”也行。

  2.6內核配置包括:

  Make config

  與2.4內核配置“config”相似,做為簡單的配置方法,它僅僅要求你選擇每個配置選項。需要“bash”。

  Make menuconfig

  與2.4內核配置的“menuconfig”相似。

  Make xconfig

  新的默認的圖形化的配置系統,利用了QT庫。它非常方便易用。

  Make gconfig

  該選項是xconfig的新的克隆,用GTK庫代替了QT庫。不幸的是,在測試中發現其中有bug。運行時會不停的重復提示同樣的錯誤信息。

  Make oldconfig

  在內核升級中,該選項非常有用。乍一看它有點象簡單的“make config”,實際上,oldconfig是讀取和自動響應設置當前的.config設置。它向你提示新的配置選項的功能。如要用,只需簡單地復制入你的old.config文件,再運行“make oldconfig”即可。

  (注:首次配置2.6內核時,查看Linux代碼頂級README文件時請注意以下技巧: ①多余的驅動將增大內核,在一定條件下會導致問題的出現

  ②內核hacking配置信息的選擇常常導致內核更龐大更緩慢,甚至導致內核的不穩定。因此在回答“development”、“experimental”或“debugging”特征時多數選擇“N”。)

  ALSA:

  從2.4版本到2.6版本的升級,這就要使用到ALSA(Advanced Linux Sound Architecture即:新的 Linux 音頻體系結構)。它取代了OSS(Open Sound System)。配置內核時,選定ALSA的OSS API效法選項(SND_OSSEMUL、SND_MIXER_OSS和SND_PCM_OSS)和適當的聲音驅動(PCI 驅動)。最後,下載和安裝最新的alsa-lib和alsa-utils。

  第五步:創建新內核

  創建2.6內核比2.4的更容易些,不必進行“make dep”這一步。創建新的內核,進行“make bzlmage”。如果選擇了編譯模塊,那麼還需要運行“make modules”和“make modules_install”。可以一起進行:“make bzlmage && make modules && make modules_install”。

  第六步:安裝新內核

  創建了內核,需要將之復制到一個位置,若x86的機子,其位置路徑就是“arch/i386/boot”。拷貝該文件和新的體系.map到根目錄/boot下。例如:

  # pwd

  /usr/src/linux-2.6.0-test4

  # mv arch/i386/boot/bzImage /boot/bzImage-2.6.0-test4

  # mv System.map /boot/System.map-2.6.0-test4

  # cd /boot

  # rm System.map

  # ln –s System.map-2.6.0-test4 System.map

  拷貝了新內核後,然後是使用grub和lilo配置根loader。有個發現就是新的2.6內核比用同樣版本的gcc編譯的2.4內核更大,或許是在編譯時選了更多選項的緣故吧。

  -rw-r--r-- 1 root  root  1094390 Aug 12 20:30 bzImage-2.4.21-ck3

  -rw-r--r-- 1 root  root  1639129 Aug 27 22:06 bzImage-2.6.0-test4

  第七步:確認數據的備份

  這一步,你不用做任何或許會破壞到硬盤數據的事,但下一步即是啟動新內核,最後一次請確認硬盤重要數據已備份。 第八步:試用新內核

  現在,重啟計算機,測試新編譯的2.6內核。如果所有步驟正確,將會出現內核啟動信息:initstate=3,新的內核很快就出現。如果安裝了ALSA,可以檢驗聲音驅動: 'cat /proc/asound/cards'。例如:

  $ cat /proc/asound/cards

  0 [Live]:EMU10K1 - Sound Blaster Live!

  Sound Blaster Live! (rev.5) at 0x18e0, irq 11

  如果出現以上信息,說明聲音程序沒運行,啟動“alsamixer”並確認驅動已經開啟。另外發現還需開啟“Master”和“PCM” (/dev/dsp),聲音程序才能正常運作。

  附1

  README——Linux 內核2.5.xx(部分數據)

  講述了內核的安裝方法和出錯的處理方法。

  內核的安裝

  安裝了所有必須的資源後,將內核解壓縮在許可目錄下(如主目錄):

  gzip -cd linux-2.5.XX.tar.gz | tar xvf -   (XX為新內核的版本號)

  注:不得用/usr/src/linux

  通過補丁升級2.5.xx版本。

  gzip -cd ../patch-2.5.xx.gz | patch -p1或bzip2-dc ../patch-2.5.xx.bz2 | patch -pl或linux/scripts/patch-kernel linux

  刪除舊的.o文件及其附屬文件

  cd linux

  make mrproper

  軟件需要

  編譯和運行2.5.xx內核必須要升級各種軟件包的新版本。參見./Documentation/change中需要的最低版本。

  編譯內核

  ⑴確定gcc 2.95.3版本以上

  ⑵ make bzImage (如果用磁盤啟動則插入A盤再進行make bzdisk)

  ⑶ make modules (若編譯部分modules,則在“make modules_install”後執行)

  ⑷ 保留一份內核的備份件

  ⑸ 啟動新內核

  新內核的拷貝。編譯後的新內核在.../linux/arch/i386/boot/bzImage可找到,將之拷貝到可啟動的位置。若是軟盤驅動的,將內核的bzImage文件拷貝到/dev/fd0形成可啟動的軟驅。若是硬盤啟動,則用LILO(/etc/lilo.conf)。內核映象文件常常是/vmlinuz、/boot/vmlinuz、/bzImage或/boot/bzImage。保存新的內核映象文件覆蓋舊的,然後再運行LILO,就可以啟用新內核了。

  重新設置LILO是運行/sbin/lilo的關鍵。你可通過編輯/etc/lilo.conf來指定舊的內核映象(即是/vmlinux.old)的出口以避免新內核運行出現問題。LILO重設後,所有准備工作就都做好了,然後就是關閉系統,重啟計算機。

  注:如果需要改變缺省的root驅動、video 方式、ramdisk大小等等,可在內核映象中用“rdev”程序(或LILO的引導選項)。不必重新編譯內核來改變這些參數。

  ⑹重新啟動新內核。

  附2

  Documentation/Changes文件(部分數據)

  軟件需要的最低版本:

  Gnu C      2.95.3         # gcc --version

  Gnu make     3.78          # make --version

  binutils      2.12         # ld -v

  util-linux      2.10o         # fdformat --version

  module-init-tools   0.9.9         # depmod -V

  e2fsprogs     1.29         # tune2fs

  jfsutils       1.0.14        # fsck.jfs -V

  reiserfsprogs    3.6.3         # reiserfsck -V 2>&1|grep reiserfsprogs

  xfsprogs      2.1.0         # xfs_db -V

  pcmcia-cs     3.1.21        # cardmgr -V

  quota-tools     3.09         # quota -V

  PPP        2.4.0        # pppd --version

  isdn4k-utils     3.1pre1        # isdnctrl 2>&1|grep version

  nfs-utils      1.0.5         # showmount --version

  procps       2.0.9        # ps --version

  oprofile       0.5.3        # oprofiled --version

  內核編譯

  GCC:2.95.x (x >= 3)

  Gnu make:3.78

  其他

  ppp:2.4.0

  ……

  附3

  其他技巧:對於運行的內核2.6.x升級到它的下一個版本的方法

  如做2.6.0-test5的升級,其大致步驟為:備份數據——獲取2.6.0-test5補丁——應用2.6.0-test5補丁,修補內核——刪除old.o文件及其從屬文件(利用“#make mrproper”)——新內核配置——創建新內核——內核的導入和試用。

Copyright © Linux教程網 All Rights Reserved