用Slackware官方核心原始碼和指令碼來打造適合自己機器的核心(轉)
提要:
用Slackware官方提供的核心原始碼和指令碼來打造適合自己機器的核心,學習編譯核心並提高我們的學習和工作效率;
前言:
現在的機器配置越來越高,一個小小的筆記本,可能也能上到2G記憶體,另外伺服器的應用,經常用到大記憶體,從實踐的情況來看,Slackware用預設的核心是不支援大記憶體的,最高支援800多M,可能1G都不到。另外Slackware在預設的情況下也不支援多CPU,如果您有多CPU的機器,也要編譯核心;
讓Slackware支援1G或者超過1G記憶體的機器,其實解決辦法也極為簡單。要重新編譯一下核心,讓其支援 4G就好了。當然如果有有超過4G的,可以選64G的那個。
讓Slackware支援多CPU的機器,無非是在配置核心時讓他支援SMP,就是這個[*] Symmetric multi-processing support 選項;
只說如何如何解決還不行,一篇文章如果沒有操作例項,新手弟兄讀起來實在是困難。我寫的文章都是寫給新手的,我總怕我寫的文章新手看不懂,對老鳥來說又一文不值;如果真是新手弟兄看不懂,老手又不值得一看,我看我寫的東西一文不值。因此我寫東西的時候能詳細就詳細,最好是寫到初次用Linux的弟兄看了我所寫的文件,也能一步到位的完成。
本文適合:初初級新手
在Slackware系統中最省力氣編譯核心的辦法,是用Slackware現有的官方資源來進行編譯,其它的軟體遇到問題,如果Slackware的官方有資源,我們同樣可以用這種解決辦法;
畢竟從 直接下載,自己配置核心還是有點辛苦。如果是初學Linux的弟兄可能要花好長時間來配置,但還不能保證成功。所以我們這些slack的追隨者來說,要充分利用Slackware的資源。
有核心編譯經驗的弟兄都知道,如果配製好後,編譯成功了,要把.config檔案儲存下來,以便下次為了解決一些小問題,重編同一版本的核心而用;
相信Slackware ,相信Slacware的官方資源;這樣能讓我們事倍功半,尤其對初學Slackware的弟兄。其實Slackware的核心更新並不是太積極,這和 Slackware的傳統(安全)有關。其實一般的情況下,我們有一個比較穩定的核心足夠用,如果不是為了解決特定的問題,我們沒有必要整天升級來升級去的。在我寫本文的時候,Slackware 10.1的核心版本是 2.4.29;而current(也就是開發版本)的test核心是 2.6.12.3 。由況下此看來Slackware不是追新族,是以安全和穩定為主;
在本文我們以Slackware的 current的test核心來簡要的說明應用slackware的官方資源的好處,以及順便也解決一下大記憶體支援的問題;
一、下載官方current 的testing核心的原始碼;
地址:
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-current/testing/source/linux-2.6.12.3/
從上面的地址找映象,一般的情況下美國和日本的要快一點;
比如我們透過下面的地址得到 testing的核心 linux-2.6.12.3的原始碼目錄;
我們要把他裡面的所有東西都下載下來,Slackware所提供我們的安裝包就是透過這些檔案編譯生成的;人都都把配置檔案和指令碼寫好了,我們沒有必要不用;
比如我們FTP映象中的 linux-2.6.12.3所有檔案都按他FTP提供的目錄結構存放在到 /usr/src/kernel26中;
下載好了,我們進入下一步;
二、利用Slackware官方提供的 config檔案來簡單配置自己的核心配置檔案 .config ;
1.解壓核心及一些基礎工作;
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 .. 把解壓手核心目錄移到上一級目錄中,也就是/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 . 把核心配置檔案複製到當前工作目錄linux-2.6.12.3
bash-3.00#cp config-2.6.12.3 .config 把config-2.6.12.3複製為.config
2.簡要的配置核心;
bash-3.00#make menuconfig 進入配置核心的配置模式 ;
核心配置有兩種方法,一種是直接置入核心;另一種是編成模組;兩種方法各有優點;直接編入核心的,比如裝置的啟動,不再需要載入模組的這一過程了;而編譯成模組,則需要載入裝置的核心支援的模組;但直接把所有的東西都編入核心也不是可行的,核心體積會變大,系統負載也會過重。我們編核心時最好把極為重要的編入核心;其它的如果您不明白的,最好用預設。slackware的核心配置檔案是最好的教程;
1]移動鍵盤,選中 Load an Alternate Configuration File 項,把.config 調進來方便我們配置;因為這個配置檔案是Slackware已經配置好的,我們只是稍加修改就行。
2]針對自己機器存在的問題進行修改;比如我們在前文所提到的大記憶體支援的問題;
選擇自己機器的CPU;
移動鍵盤到 Processor type and features ---> ,然後按ENTER進入;
找到 Processor family (486) ---> 按ENTER進入;
進入後我們發現有好多CPU的型號可選;一般的情況下要根據
bash-3.00# cat /proc/cpuinfo 輸出的資訊來選,比如我們的是Celeron (P4)一代的,應該選如下的,當然預設的 486也是可以正常執行的,既然我們重編一次核心,就得選中對應型號的,也許效能有所提高呢;
Processor family (Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon)
對大記憶體支援;如果記憶體是1G或者1G以上,但小於4G的,就要選4G支援;如果超過4G的,要選64G的支援;
High Memory Support (4GB) --->
(X) 4GB
( ) 64GB
還有比如音效卡等硬體,需要我們一步一步的檢視;如果有不明之處,就要按 [shift]+?的組合鍵來檢視說明。一般的情況下,slackware的config檔案早都配置好了,只需要我們來檢視一下就可以了。
再舉個例子:比如我現在所用的音效卡是intel ac97的,我應該怎麼配置呢?
首先要知道自己的音效卡的晶片組,我們要透過lspci -v 來檢視;
bash-3.00# lspci -v
只檢視音效卡的,應該用如下的方法:
bash-3.00# lspci -v |grep audio
00:1f.5 Multimedia audio controller: Intel Corp. 82801DB (ICH4) AC'97 Audio Controller (rev 03)
透過上面的輸出,我們知道這臺機器用的是intel AC97音效卡;所以我們要特別注意AC97的配置;
找到 Device Drivers ---> Sound --->
< M > Sound card support 音效卡的支援,這個是一定要選中的吧;
< M > Advanced Linux Sound Architecture 對音效卡支援的ALSA驅動的支援;下面有OSS驅動,只是一部份。如果想用OSS的驅動更全的,可以去買;其它的就看如下的選吧;
< 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
然後我們再向下看有
Generic devices ---> 進入裡面
< 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音效卡核心支援選項;我有一個這樣的音效卡,但沒有試過;
PCMCIA devices ---> 這是PCMCIA音效卡的選項,我還沒有看過這樣的音效卡呢;如果您有,就在這裡面動動手吧。
因為我用的是Intel 整合的音效卡,所以要在PCI中選擇,我們在 中可以看到有兩個與INTEL有關的;
< M > Intel/SiS/nVidia/AMD/ALi AC97 Controller 這個才是Intel AC97音效卡的;
< > Intel/SiS/nVidia/AMD MC97 Modem (EXPERIMENTAL) 這個是機器整合的INTEL貓的蜂鳴器的;
因為我發現如果把貓的蜂鳴器的驅動也選上,可能造成兩個衝突。所以只能選上面的那個;
我們再回到 Open Sound System ---> 中看看,與我用的音效卡是不是有關的?
< 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中也有好多的音效卡驅動,大家根據前面的lspci -v 來選擇吧。
3]對於作業系統所採用的檔案系統的支援要編入核心,最好不要編成模組;(重要)
File systems --->
Reiserfs support
比如我的Slackware所採用的檔案系統用的是reiserfs ,所以我要把它直接編入核心;好處是不受模組丟失或者損壞而不能啟動系統;而有時您把系統所採用的檔案系統編譯成模組,出現VFS錯誤,也有這方面的事,可能是您沒有把reiserfs加入到相應的載入模組的配置檔案中,所以我們為了減少麻煩,把風險降到最低,還是要直接置入內模的好;
如果您還有其它的硬碟分割槽要讀取,比如是ext3、ext2、fat、fat32、ntfs等,這樣的可以編成模組來支援;
再舉一例:如果您的的作業系統用的是ext3的檔案系統,當然就要把ext3的直接編入核心,其它的可以編成模組來支援了;
4]對於硬碟及RAID的支援,要直接編入核心;
比如ATA、SATA、SCSI及RAID的支援直接核心支援;有時編完核心後,啟動時不能識別硬碟和RAID,大多事情出在這裡;Slackware中在這方面有的是模組支援,我們可以把它由< M >改成來支援;
5]對於我們們所沒有的裝置,可以在核心中不選,熟能生巧罷了;
比如我沒有ISDN裝置 ,所以就把ISDN去掉;
ISDN subsystem --->
< > Linux telephony support
如果您沒有1394的裝置 ,當然可以把1394的支援也去掉;
等等。。。。。。。
核心配置就說這麼多吧,太多了,我也說不清楚,水平有限啊;
配置好後先要儲存
Save Configuration to an Alternate File
出來一個
Enter a filename to which this configuration ,should be saved as an alternate. Leave blank to abort.
.config
按回車就行了,這樣就儲存住了;
然後退出 < Exit > ,這時也會出現儲存 ;
如果你想把.config儲存起來,可以再複製一份到安全一點的目錄,以備後用;
3.編譯核心
bash-3.00# make
bash-3.00# make modules_install
這樣就編譯好了,並把模組也安裝在了 /lib/modules目錄中了,請看:
bash-3.00# ls /lib/modules/
2.4.29 2.6.12.3
現在我們得安裝核心了,但我們也沒有必要急著安裝,我們可以用Slackware提供的指令碼來打包,然後再來安裝,這樣移除也方便,對不對?
4.用Slackware提供的指令碼為核心及moudules打包;
我們在前面已經說了,把linux-2.6.12.3在映象上的目錄下的所有東西載下來。所以我們要用到這些東西了。我在前面把所有的東西都下載到了/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)首先我們為核心打包:請執行如下命令:
bash-3.00# bash-3.00# cp kernel-generic/slack-desc .
我們要把 kernel-generic/slack-desc 復到制當前操作目錄中,只是一個說明檔案;不復制也行;反正是自己用,也不是給別人用的;
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 複製到了 /usr/src/linux-2.6.12.3 ,並在 /usr/src/linux-2.6.12.3中執行它,提示運用的配置檔案是 CONFIG = /usr/src/linux-2.6.12.3/config* ,所以要看好了。其實這個檔案我們可能沒有配置,是slackware原始自帶的,我們在前面已經說了,我們配置的檔案是.config;除非你有把. config另存為config-2.6.12.3。
如果要用我們配置好的核心檔案,要進入核心原始碼目錄,把.config 複製一份名為 config-2.6.12.3的;
b)然後我們要為核心的模組打包;
bash-3.00# sh kernel-modules/kernel-modules.SlackBuild
我們把包都打好了,他們究竟在哪裡呢?
在/tmp目錄中,請看如下:
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.安裝編譯好的核心及模組。
我們其實已經把編譯好的模組早就安裝好了,但我們最好重新安裝一下。這樣解除安裝也方便。
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
這樣就把核心及模組配置好了。
6.檢視系統引導管理器grub或者lilo的配置檔案。
核心在安裝的時候,可能已經改了一些東西,比如 /boot內的變化,比如vmlinuz直接鏈到了 vmlinuz-generic-2.6.12 ,所以如果想要讓新老核心都能讓系統引導管理器grub和lilo的選單上能看得到,必須改 grub.conf或者lilo.conf
我們必須保留老核心的在grub和lilo的啟動選單,畢竟我們編核心不能百分百的成功,對不對??安全第一吧;
後記:正在修訂之中,以讓其更可能的全面一點,算是版本0.1吧;沒有技術含量,只是想幫助初學者用在最少的時間內掌握編譯核心;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-941391/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【轉】編譯Android系統原始碼和核心原始碼編譯Android原始碼
- 用tags/cscope看核心原始碼-HOWTO(轉)原始碼
- PostgreSQL vacuum 核心原始碼機理SQL原始碼
- slackware啟動指令碼詳解(轉)指令碼
- YARN 核心原始碼分析Yarn原始碼
- mmap核心原始碼分析原始碼
- JVMTI Attach機制與核心原始碼分析JVM原始碼
- Slackware啟動指令碼與System V啟動指令碼的區別何在?(轉)指令碼
- workerman 框架原始碼核心分析和註解框架原始碼
- 再讀 Larave 核心原始碼原始碼
- 手寫ArrayList核心原始碼原始碼
- spark核心原始碼深度剖析Spark原始碼
- 手寫 ArrayList 核心原始碼原始碼
- [轉帖]Linux核心原始碼分析分享專題Linux原始碼
- 機器碼 指令 組合語言 的關係機器碼組合語言
- webpack核心模組tapable原始碼解析Web原始碼
- axios 核心原始碼解讀iOS原始碼
- 手寫 Java HashMap 核心原始碼JavaHashMap原始碼
- Java HashMap 核心原始碼解讀JavaHashMap原始碼
- Linux核心原始碼目錄Linux原始碼
- etcd原始碼解析之V2server和raft核心運轉原始碼ServerRaft
- Linus關於核心標頭檔案與核心原始碼關係的論述(轉)原始碼
- Guava Cache:核心引數深度剖析和原始碼分析Guava原始碼
- Vue原始碼探究-核心類的實現Vue原始碼
- 結合實戰和原始碼來聊聊Java中的SPI機制?原始碼Java
- 用Mgaic Linux的核心和模組代替Debian的核心(轉)AILinux
- Linux 核心排程器原始碼分析 - 初始化Linux原始碼
- 70行實現Promise核心原始碼Promise原始碼
- 物件屬性讀取(核心原始碼)物件原始碼
- koa2核心原始碼淺析原始碼
- 深入koa原始碼(二):核心庫原理原始碼
- Groovy核心類原始碼講解(上)原始碼
- Laravel核心解讀–Session原始碼解析LaravelSession原始碼
- Laravel核心解讀–Cookie原始碼分析LaravelCookie原始碼
- Laravel 原始碼閱讀指南 -- HTTP 核心Laravel原始碼HTTP
- Linux無系統核心原始碼Linux原始碼
- Spring原始碼系列:核心概念解析Spring原始碼
- linux系統下poll和epoll核心原始碼剖析Linux原始碼