提要:
用Slackware官方提供的內(nèi)核源碼和腳本來(lái)打造適合自己機(jī)器的內(nèi)核,學(xué)習(xí)編譯內(nèi)核并提高我們的學(xué)習(xí)和工作效率;
前言:
現(xiàn)在的機(jī)器配置越來(lái)越高,一個(gè)小小的筆記本,可能也能上到2G內(nèi)存,另外服務(wù)器的應(yīng)用,經(jīng)常用到大內(nèi)存,從實(shí)踐的情況來(lái)看,Slackware用默認(rèn)的內(nèi)核是不支持大內(nèi)存的,支持800多M,可能1G都不到。另外Slackware在默認(rèn)的情況下也不支持多CPU,如果您有多CPU的機(jī)器,也要編譯內(nèi)核;
讓Slackware支持1G或者超過(guò)1G內(nèi)存的機(jī)器,其實(shí)解決辦法也極為簡(jiǎn)單。要重新編譯一下內(nèi)核,讓其支持 4G就好了。當(dāng)然如果有有超過(guò)4G的,可以選64G的那個(gè)。
讓Slackware支持多CPU的機(jī)器,無(wú)非是在配置內(nèi)核時(shí)讓他支持SMP,就是這個(gè)[*] Symmetric multi-processing support 選項(xiàng);
只說(shuō)如何如何解決還不行,一篇文章如果沒(méi)有操作實(shí)例,新手弟兄讀起來(lái)實(shí)在是困難。我寫的文章都是寫給新手的,我總怕我寫的文章新手看不懂,對(duì)老鳥(niǎo)來(lái)說(shuō)又一文不值;如果真是新手弟兄看不懂,老手又不值得一看,我看我寫的東西一文不值。因此我寫東西的時(shí)候能詳細(xì)就詳細(xì),是寫到初次用Linux的弟兄看了我所寫的文檔,也能一步到位的完成。
本文適合:初初級(jí)新手
在Slackware系統(tǒng)中省力氣編譯內(nèi)核的辦法,是用Slackware現(xiàn)有的官方資源來(lái)進(jìn)行編譯,其它的軟件遇到問(wèn)題,如果Slackware的官方有資源,我們同樣可以用這種解決辦法;
畢竟從 http://www.kernel.org 直接下載,自己配置內(nèi)核還是有點(diǎn)辛苦。如果是初學(xué)Linux的弟兄可能要花好長(zhǎng)時(shí)間來(lái)配置,但還不能保證成功。所以我們這些slack的追隨者來(lái)說(shuō),要充分利用Slackware的資源。
有內(nèi)核編譯經(jīng)驗(yàn)的弟兄都知道,如果配制好后,編譯成功了,要把.config文件保存下來(lái),以便下次為了解決一些小問(wèn)題,重編同一版本的內(nèi)核而用;
相信Slackware ,相信Slacware的官方資源;這樣能讓我們事倍功半,尤其對(duì)初學(xué)Slackware的弟兄。其實(shí)Slackware的內(nèi)核更新并不是太積極,這和 Slackware的傳統(tǒng)(安全)有關(guān)。其實(shí)一般的情況下,我們有一個(gè)比較穩(wěn)定的內(nèi)核足夠用,如果不是為了解決特定的問(wèn)題,我們沒(méi)有必要整天升級(jí)來(lái)升級(jí)去的。在我寫本文的時(shí)候,Slackware 10.1的內(nèi)核版本是 2.4.29;而current(也就是開(kāi)發(fā)版本)的test內(nèi)核是 2.6.12.3 。由況下此看來(lái)Slackware不是追新族,是以安全和穩(wěn)定為主;
在本文我們以Slackware的 current的test內(nèi)核來(lái)簡(jiǎn)要的說(shuō)明應(yīng)用slackware的官方資源的好處,以及順便也解決一下大內(nèi)存支持的問(wèn)題;
一、下載官方current 的testing內(nèi)核的源碼;
地址:http://www.slackware.com/getslack/
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-current/testing/source/linux-2.6.12.3/
從上面的地址找鏡像,一般的情況下美國(guó)和日本的要快一點(diǎn);
比如我們通過(guò)下面的地址得到 testing的內(nèi)核 linux-2.6.12.3的源碼目錄;
我們要把他里面的所有東西都下載下來(lái),Slackware所提供我們的安裝包就是通過(guò)這些文件編譯生成的;人都都把配置文件和腳本寫好了,我們沒(méi)有必要不用;
比如我們FTP鏡像中的 linux-2.6.12.3所有文件都按他FTP提供的目錄結(jié)構(gòu)存放在到 /usr/src/kernel26中;
下載好了,我們進(jìn)入下一步;
二、利用Slackware官方提供的 config文件來(lái)簡(jiǎn)單配置自己的內(nèi)核配置文件 .config ;
1.解壓內(nèi)核及一些基礎(chǔ)工作;
bash-3.00# pwd
/usr/src/kernel26
bash-3.00# ls
config-2.6.12.3 kernel-generic linux-2.6.12.3.tar.bz2.sign
kernel-modules linux-2.6.12.3.tar.bz2
bash-3.00#tar jxvf linux-2.6.12.3.tar.bz2
bash-3.00# mv linux-2.6.12.3 .. 把解壓手內(nèi)核目錄移到上一級(jí)目錄中,也就是/usr/src中
bash-3.00# cd ..
bash-3.00# ls
kernel26 linux-2.4.29 linux-2.6.12.3.tar.bz2 speakup-2.4.29
linux linux-2.6.12.3 rpm
bash-3.00#cd linux-2.6.12.3
bash-3.00# pwd
/usr/src/linux-2.6.12.3
bash-3.00# cp ../kernel26/config-2.6.12.3 . 把內(nèi)核配置文件復(fù)制到當(dāng)前工作目錄linux-2.6.12.3
bash-3.00#cp config-2.6.12.3 .config 把config-2.6.12.3復(fù)制為.config
2.簡(jiǎn)要的配置內(nèi)核;
bash-3.00#make menuconfig 進(jìn)入配置內(nèi)核的配置模式 ;
內(nèi)核配置有兩種方法,一種是直接置入內(nèi)核;另一種是編成模塊;兩種方法各有優(yōu)點(diǎn);直接編入內(nèi)核的,比如設(shè)備的啟動(dòng),不再需要加載模塊的這一過(guò)程了;而編譯成模塊,則需要加載設(shè)備的內(nèi)核支持的模塊;但直接把所有的東西都編入內(nèi)核也不是可行的,內(nèi)核體積會(huì)變大,系統(tǒng)負(fù)載也會(huì)過(guò)重。我們編內(nèi)核時(shí)把極為重要的編入內(nèi)核;其它的如果您不明白的,用默認(rèn)。slackware的內(nèi)核配置文件是的教程;
1]移動(dòng)鍵盤,選中 Load an Alternate Configuration File 項(xiàng),把.config 調(diào)進(jìn)來(lái)方便我們配置;因?yàn)檫@個(gè)配置文件是Slackware已經(jīng)配置好的,我們只是稍加修改就行。
2]針對(duì)自己機(jī)器存在的問(wèn)題進(jìn)行修改;比如我們?cè)谇拔乃岬降拇髢?nèi)存支持的問(wèn)題;
選擇自己機(jī)器的CPU;
移動(dòng)鍵盤到 Processor type and features ---> ,然后按ENTER進(jìn)入;
找到 Processor family (486) ---> 按ENTER進(jìn)入;
進(jìn)入后我們發(fā)現(xiàn)有好多CPU的型號(hào)可選;一般的情況下要根據(jù)
bash-3.00# cat /proc/cpuinfo 輸出的信息來(lái)選,比如我們的是Celeron (P4)一代的,應(yīng)該選如下的,當(dāng)然默認(rèn)的 486也是可以正常運(yùn)行的,既然我們重編一次內(nèi)核,就得選中對(duì)應(yīng)型號(hào)的,也許性能有所提高呢;
Processor family (Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon)
對(duì)大內(nèi)存支持;如果內(nèi)存是1G或者1G以上,但小于4G的,就要選4G支持;如果超過(guò)4G的,要選64G的支持;
High Memory Support (4GB) --->
(X) 4GB
( ) 64GB
還有比如聲卡等硬件,需要我們一步一步的查看;如果有不明之處,就要按 [shift]+?的組合鍵來(lái)查看說(shuō)明。一般的情況下,slackware的config文件早都配置好了,只需要我們來(lái)查看一下就可以了。
再舉個(gè)例子:比如我現(xiàn)在所用的聲卡是intel ac97的,我應(yīng)該怎么配置呢?
首先要知道自己的聲卡的芯片組,我們要通過(guò)lspci -v 來(lái)查看;
bash-3.00# lspci -v
只查看聲卡的,應(yīng)該用如下的方法:
bash-3.00# lspci -v |grep audio
00:1f.5 Multimedia audio controller: Intel Corp. 82801DB (ICH4) AC'97 Audio Controller (rev 03)
通過(guò)上面的輸出,我們知道這臺(tái)機(jī)器用的是intel AC97聲卡;所以我們要特別注意AC97的配置;
找到 Device Drivers ---> Sound --->
< M > Sound card support 聲卡的支持,這個(gè)是一定要選中的吧;
< M > Advanced Linux Sound Architecture 對(duì)聲卡支持的ALSA驅(qū)動(dòng)的支持;下面有OSS驅(qū)動(dòng),只是一部份。如果想用OSS的驅(qū)動(dòng)更全的,可以去買;其它的就看如下的選吧;
< M > Sequencer support
< M > Sequencer dummy client
< M > OSS Mixer API
< M > OSS PCM (digital audio) API [*] OSS Sequencer API
< M > RTC Timer support [*] Verbose printk
[ ] Debug
然后我們?cè)傧蛳驴从?
Generic devices ---> 進(jìn)入里面
< M > Dummy (/dev/null) soundcard
< M > Virtual MIDI soundcard
< M > MOTU MidiTimePiece AV multiport MIDI
< M > UART16550 serial MIDI driver
< M > Generic MPU-401 UART driver
ISA devices ---> 如果您用ISA聲卡就在這里面選;
PCI devices ---> 如果您用PCI聲卡,就在這里面選,集成聲卡也在這里;
USB devices ---> 這是USB聲卡內(nèi)核支持選項(xiàng);我有一個(gè)這樣的聲卡,但沒(méi)有試過(guò);
PCMCIA devices ---> 這是PCMCIA聲卡的選項(xiàng),我還沒(méi)有看過(guò)這樣的聲卡呢;如果您有,就在這里面動(dòng)動(dòng)手吧。
因?yàn)槲矣玫氖荌ntel 集成的聲卡,所以要在PCI中選擇,我們?cè)?中可以看到有兩個(gè)與INTEL有關(guān)的;
< M > Intel/SiS/nVidia/AMD/ALi AC97 Controller 這個(gè)才是Intel AC97聲卡的;
< > Intel/SiS/nVidia/AMD MC97 Modem (EXPERIMENTAL) 這個(gè)是機(jī)器集成的INTEL貓的蜂鳴器的;
因?yàn)槲野l(fā)現(xiàn)如果把貓的蜂鳴器的驅(qū)動(dòng)也選上,可能造成兩個(gè)沖突。所以只能選上面的那個(gè);
我們?cè)倩氐?Open Sound System ---> 中看看,與我用的聲卡是不是有關(guān)的?
< M > Open Sound System (DEPRECATED)
< M > Intel ICH (i8xx) audio support
< M > OSS sound modules
< M > Loopback MIDI device support
< M > Microsoft Sound System support
我們也可以看到Open Sound System中也有好多的聲卡驅(qū)動(dòng),大家根據(jù)前面的lspci -v 來(lái)選擇吧。
3]對(duì)于操作系統(tǒng)所采用的文件系統(tǒng)的支持要編入內(nèi)核,不要編成模塊;(重要)
File systems --->
<*> Reiserfs support
比如我的Slackware所采用的文件系統(tǒng)用的是reiserfs ,所以我要把它直接編入內(nèi)核;好處是不受模塊丟失或者損壞而不能啟動(dòng)系統(tǒng);而有時(shí)您把系統(tǒng)所采用的文件系統(tǒng)編譯成模塊,出現(xiàn)VFS錯(cuò)誤,也有這方面的事,可能是您沒(méi)有把reiserfs加入到相應(yīng)的加載模塊的配置文件中,所以我們?yōu)榱藴p少麻煩,把風(fēng)險(xiǎn)降到,還是要直接置入內(nèi)模的好;
如果您還有其它的硬盤分區(qū)要讀取,比如是ext3、ext2、fat、fat32、ntfs等,這樣的可以編成模塊來(lái)支持;
再舉一例:如果您的的操作系統(tǒng)用的是ext3的文件系統(tǒng),當(dāng)然就要把ext3的直接編入內(nèi)核,其它的可以編成模塊來(lái)支持了;
4]對(duì)于硬盤及RAID的支持,要直接編入內(nèi)核;
比如ATA、SATA、SCSI及RAID的支持直接內(nèi)核支持;有時(shí)編完內(nèi)核后,啟動(dòng)時(shí)不能識(shí)別硬盤和RAID,大多事情出在這里;Slackware中在這方面有的是模塊支持,我們可以把它由< M >改成<*>來(lái)支持;
5]對(duì)于咱們所沒(méi)有的設(shè)備,可以在內(nèi)核中不選,熟能生巧罷了;
比如我沒(méi)有ISDN設(shè)備 ,所以就把ISDN去掉;
ISDN subsystem --->
< > Linux telephony support
如果您沒(méi)有1394的設(shè)備 ,當(dāng)然可以把1394的支持也去掉;
等等。。。。。。。
內(nèi)核配置就說(shuō)這么多吧,太多了,我也說(shuō)不清楚,水平有限啊;
配置好后先要保存
Save Configuration to an Alternate File
出來(lái)一個(gè)
Enter a filename to which this configuration ,should be saved as an alternate. Leave blank to abort.
.config
按回車就行了,這樣就保存住了;
然后退出 < Exit > ,這時(shí)也會(huì)出現(xiàn)保存 ;
如果你想把.config保存起來(lái),可以再?gòu)?fù)制一份到安全一點(diǎn)的目錄,以備后用;
3.編譯內(nèi)核
bash-3.00# make
bash-3.00# make modules_install
這樣就編譯好了,并把模塊也安裝在了 /lib/modules目錄中了,請(qǐng)看:
bash-3.00# ls /lib/modules/
2.4.29 2.6.12.3
現(xiàn)在我們得安裝內(nèi)核了,但我們也沒(méi)有必要急著安裝,我們可以用Slackware提供的腳本來(lái)打包,然后再來(lái)安裝,這樣移除也方便,對(duì)不對(duì)?
4.用Slackware提供的腳本為內(nèi)核及moudules打包;
我們?cè)谇懊嬉呀?jīng)說(shuō)了,把linux-2.6.12.3在鏡像上的目錄下的所有東西載下來(lái)。所以我們要用到這些東西了。我在前面把所有的東西都下載到了/usr/src/kernel26目錄中。
所以我們要用他所提供的腳本打包;
bash-3.00# cd /usr/src/kernel26/
bash-3.00# ls
config-2.6.12.3 kernel-generic kernel-modules linux-2.6.12.3.tar.bz2 linux-2.6.12.3.tar.bz2.sign
a)首先我們?yōu)閮?nèi)核打包:請(qǐng)運(yùn)行如下命令:
bash-3.00# bash-3.00# cp kernel-generic/slack-desc .
我們要把 kernel-generic/slack-desc 復(fù)到制當(dāng)前操作目錄中,只是一個(gè)說(shuō)明文件;不復(fù)制也行;反正是自己用,也不是給別人用的;
bash-3.00# sh kernel-generic/kernel-generic.SlackBuild
輸出是什么呢?
kernel-generic/kernel-generic.SlackBuild: line 33: [: too many arguments
Building kernel-generic-2.6.12.3-i486-1.tgz
using these source files. Please check and then hit
enter to make the package.
KERNEL = /usr/src/linux-2.6.12.3/arch/i386/boot/bzImage
SYSMAP = /usr/src/linux-2.6.12.3/System.map
CONFIG = /usr/src/linux-2.6.12.3/.config
看到了吧,我們用的配置文件在 /usr/src/linux-2.6.12.3/.config ;然后按回車;
注意:如果您把打包腳本 kernel-generic.SlackBuild 復(fù)制到了 /usr/src/linux-2.6.12.3 ,并在 /usr/src/linux-2.6.12.3中執(zhí)行它,提示運(yùn)用的配置文件是 CONFIG = /usr/src/linux-2.6.12.3/config* ,所以要看好了。其實(shí)這個(gè)文件我們可能沒(méi)有配置,是slackware原始自帶的,我們?cè)谇懊嬉呀?jīng)說(shuō)了,我們配置的文件是.config;除非你有把. config另存為config-2.6.12.3。
如果要用我們配置好的內(nèi)核文件,要進(jìn)入內(nèi)核源碼目錄,把.config 拷貝一份名為 config-2.6.12.3的;
b)然后我們要為內(nèi)核的模塊打包;
bash-3.00# sh kernel-modules/kernel-modules.SlackBuild
我們把包都打好了,他們究竟在哪里呢?
在/tmp目錄中,請(qǐng)看如下:
bash-3.00# ls -lh /tmp/kernel-*
-rw-r--r-- 1 root root 1.9M 2005-08-06 11:59 /tmp/kernel-generic-2.6.12.3-i486-1.tgz
-rw-r--r-- 1 root root 11M 2005-08-06 12:13 /tmp/kernel-modules-2.6.12.3-i486-1.tgz
5.安裝編譯好的內(nèi)核及模塊。
我們其實(shí)已經(jīng)把編譯好的模塊早就安裝好了,但我們重新安裝一下。這樣卸載也方便。
bash-3.00#cd /tmp
bash-3.00# installpkg kernel-generic-2.6.12.3-i486-1.tgz
bash-3.00# installpkg kernel-modules-2.6.12.3-i486-1.tgz
這樣就把內(nèi)核及模塊配置好了。
7686.查看系統(tǒng)引導(dǎo)管理器grub或者lilo的配置文件。
內(nèi)核在安裝的時(shí)候,可能已經(jīng)改了一些東西,比如 /boot內(nèi)的變化,比如vmlinuz直接鏈到了 vmlinuz-generic-2.6.12 ,所以如果想要讓新老內(nèi)核都能讓系統(tǒng)引導(dǎo)管理器grub和lilo的菜單上能看得到,必須改 grub.conf或者lilo.conf
我們必須保留老內(nèi)核的在grub和lilo的啟動(dòng)菜單,畢竟我們編內(nèi)核不能百分百的成功,對(duì)不對(duì)??安全吧;
后記:正在修訂之中,以讓其更可能的全面一點(diǎn),算是版本0.1吧;沒(méi)有技術(shù)含量,只是想幫助初學(xué)者用在少的時(shí)間內(nèi)掌握編譯內(nèi)核;