編譯前的準備
一.查看硬體信息.
[root@REHL5-T Desktop]# cat /proc/cpuinfo
processor : 0
vendor_id : Genuine英特爾
cpu family : 6
model : 42
model name : 英特爾(R) Core(TM) i7-2600K CPU @ 3.40GHz
stepping : 7
cpu MHz : 3801.000
cache size : 8192 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss nx rdtscp lm constant_tsc up ida nonstop_tsc arat pni ssse3 cx16 sse4_1 sse4_2 popcnt lahf_lm [8]
bogomips : 7602.00
驅動版本
02:01.0 Ethernet controller: Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rev 10)
00:10.0 SCSI storage controller: LSI Logic / Symbios Logic 53c1030 PCI-X Fusion-MPT
Linux系統下內核分為兩部分
1. 內核文件,
2. 另一部分只是在內核中有一個他的指針.需要這個功能的時候,從硬碟載入到內存中.
Lsmod看到的是已經載入內存的.
[root@REHL5-T Desktop]# uname -a
Linux REHL5-T 2.6.18-194.el5 #1 SMP Tue Mar 16 21:52:43 EDT 2010 i686 i686 i386 GNU/Linux
二、獲取源代碼
可以從光碟中或者官方網站下載源代碼
www.kernel.org
ftp到src目錄
/usr/src/kernels
tar -jxvf linux-2.6.19.tar.bz2 解壓
編譯內核的步驟:
1. 清楚舊目標文件和配置(make mrproper)
2. 配置內核選項
3. 編譯內核
4. 編譯內核模塊
5. 安裝內核模塊
6. 安裝新內核.
1. 如果之前的內核也是編譯過的,需要清掉.o,.conf之類的文件.這種文件我們稱之為目標代碼.如果不清楚那麼編譯的時候會跳過以存在的配置.
[root@REHL5-T linux-2.6.19]# make mrproper
如果目錄是新解壓的,可以不做這個步驟.
2. 配置內核選項.
常用三種方法:make config, make menuconf(文本菜單), make xconfig.圖形
互動式:
Kernel .config support (IKCONFIG) [N/m/y/?]
Y 使用這個功能,並且編譯到內核中.N不支持,不需要這個功能?這個功能的說明, m 以外掛模塊的形式.
M形式的是內存中只有指針,當需要使用的時候,從磁碟調用執行文件啟用此模塊.此模式的模塊不需要重啟系統.
文本菜單方式:
用空格修改選項
圖形模式
需要qt的支持
[root@REHL5-T linux-2.6.19]# rpm -qa| grep qt
qt-3.3.6-23.el5
avahi-qt3-0.6.16-7.el5
qt-designer-3.3.6-23.el5
qt-devel-3.3.6-23.el5
[root@REHL5-T linux-2.6.19]# make xconfig
鉤代表y 空代表n 方框中有點代表m.
3. 確認需要配置哪些選項.配置2.6.32內核
如果不熟悉,就用默認配置添加自己需要的一些選項.
內核選項說明:
1. Code maturity level options --->代碼成熟等級
Prompt for development and/or incomplete code/drivers
如果要測試現在仍處於實驗階段的功能,比如這個版本中對ext4、IPv6 等,就必須把該項選擇為Y 了,否則可以
把它選擇為N.如果設置為Y,以後將會出現一些還在測試中的選項供用戶做選擇
2.General setup --->普通的屬性設置
添加Automatically append version information to the version string其他默認.
3. Loadable module support --->對模塊的支持
啟用Enable loadable module support
4. Block layer --->塊層次的設定
Support for Large Block Devices 啟用支持2TB以上的塊設備.
5.Processor type and features --->處理器類型和功能
Symmetric multi-processing support ——對稱多處理器支持,在單CPU 的機
器上,不選這個選項會更快一些.由於超線程技術,看起來是兩顆CPU,因些要選
上這個選項.
Subarchitecture Type (Generic architecture (Summit, bigsmp, ES7000, default)) —
—CPU 的體系結構
Processor family (Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon) ——CPU 的
具體型號. 找不到i7的……
Generic x86 support ——這一選項針對x86 系列的CPU 使用更多的常規優
化.
Maximum number of CPUs (2-255) ——支持的最大CPU的個數.默認就行
SMT (Hyperthreading) scheduler support ——超線程支持.I7 2600K是支持的,所以選上.
Multi-core scheduler support (NEW) ——當然是多核CPU 的支持了.
Preempt The Big Kernel Lock-------Say Y here if you are building a kernel for a desktop system.
Machine Check Exception ——該功能允許處理器在檢測到硬體錯誤時通知
Linux 內核檢測到錯誤!這些錯誤包括:系統匯流排錯誤、內存錯誤(其中可能包含
同位檢查或 Error Correction Code (ECC) 問題)、處理器或硬體中的快取錯誤、處理
器中的 Translation Lookaside Buffers (TLB) 錯誤、其它 CPU 供貨商偵測到的特定
硬體問題、特定供貨商偵測到的硬體問題等.
Toshiba/DELL Laptop support 默認是選的,這裡我們去掉此選項
<M>/dev/cpu/microcode - 英特爾 IA32 CPU microcode support ——這個選項是讓
你使用不隨Linux 內核發行的IA32 microcode,但是你必需有IA32 microcode 的二
進位文件.該功能同時還需要dev file system support(devfs 文件系統)的支持.關於
微代碼的要求和組成等相關信息,請參考:http://www.urbanmyth.org/microcode/
<M> /dev/cpu/*/msr - Model-specific register support ——這個選項桌面用戶一
般用不到.這個選項能讓特權CPU 訪問x86 的MSR 寄存器,這個寄存器(MSR)
的作用也依賴與不同的CPU 類型而有所不同,一般可以用來改變一些CPU 原有物
理結構的用途,但不同的CPU 用途差別也很大.
<M> /dev/cpu/*/cpuid - CPU information support ——這會在/dev/cpu 中建立一
系列的設備文件,用來讓進程去訪問指定的CPU.一般不用選.
High Memory Suppor 默認是off的,改為64G,伺服器安裝的時候32bit默認是不支持4G以上的原因在此.
Allocate 3rd-level pagetables from highmem 上個選項選擇64G 此選項需要開啟.
說明:The VM uses one page table entry for each page of physical memory. For systems with a lot of RAM, this can be wasteful of precious low memory. Setting this option will put user-space page table entries in high memory.
Boot from EFI support 去掉此選項
6.Power management options (ACPI, APM) 電源管理,選擇默認的.
7. Bus options (PCI, PCMCIA, EISA, MCA, ISA) --->匯流排配置
PCI Express Hotplug driver 有的伺服器硬體支持這個.其他默認
8. Executable file formats --->可執行二進位文件的格式. 默認設置
9. network網路設置
Packet socket ——選擇Y,一些應用程序將使用Packet 協議直接同網路設
備通信,而不通過內核中的其它中介協議.例如tcpdump 程序.
IP: multicasting ——多播支持.multicasting 是群組廣播
IP: advanced router ——用Linux 來做路由器,此選項應該上.
IP: policy routing ——策略路由.
IP: equal cost multipath ——多路徑路由,例如使用多個ADSL 同時撥號上網,如果使用此特性,則由系統自動選擇客戶端要走的ISP 路徑.當然也是路由的負載均衡.此功能在小企業中是比較節省網路成本的做法.棟科的網路曾經這麼做過,聯通家用6M 電信2M,比上用價格低很多的.
The IPv6 protocol 去掉所有和ipv6有關的設置.
IP: TCP syncookie support (disabled per default) ——啟用該功能可以在一定
程度上防止SYS Flood 攻擊
Network packet filtering (replaces ipchains) 用來支持防火牆功能
IP: Virtual Server Configuration --->子選項是LVS 的配置(Linux 負載均衡).
Appletalk protocol support 選上,可以和apple設備做文件共享,以前學習存儲的時候提到過.
其他網路設置,默認.
10. Device Drivers --->設備驅動 默認,我沒有改.
注意scsi的設置
需要說明的地方:
SCSI low-level drivers中
QLogic QLA2XXX Fibre Channel Suppor,系統可以默認支持qlogic的2000系列的光纖卡.
iSCSI Initiator over TCP/IP 支持iscsi的模塊,這些默認都是有的.
Multi-device support (RAID and LVM)中RAID, LVM, device mapper.都要選,這些是伺服器中常用的選項.
Serial ATA (prod) and Parallel ATA (experimental) driver中可以設置AHCI的設定,有些入門級伺服器用的是集成的SATA控制器,需要選擇.
關於網卡,廠商的統統去掉,保留AMD PCnet32,虛擬環境嘛.無線網路去掉.
11. file system模塊
添加EXT,JFS,GFS,quota,NTFS支持,NTFS默認肯定不支持,我們用它測試內核是否成功.
12.其他模塊默認配置.
三. 編譯內核
Make命令做編譯,通過它生成需要的目標內核文件.
Time make可以看編譯時間.
四. 編譯模塊
[root@REHL5-T linux-2.6.19]# make modules
CHK include/linux/version.h
CHK include/linux/utsrelease.h
五. 安裝內核到系統中
Make modules_install
六. 啟用新內核.
2.4 手動啟用,2.6通過自動就行
查看grub文件
[root@REHL5-T linux-2.6.19]# make install
sh /usr/src/kernels/linux-2.6.19/arch/i386/boot/install.sh 2.6.19 arch/i386/boot/bzImage System.map "/boot"
查看grub文件,改為0
七.備份
cp .config /home
備份后如果有些選項不想重新選,可以直接恢復到內核目錄下,重新編譯.
基本配置就到這裡.
重啟測試,已經從新內核啟動.坐等啟動成功.
啟動后查看內核版本
[root@REHL5-T ~]# uname -a
Linux REHL5-T 2.6.19 #1 SMP Sun Mar 25 22:56:28 CST 2012 i686 i686 i386 GNU/Linux
掛載一個NTFS的u盤測試一下.
查看ntfs模塊
[root@REHL5-T ~]# lsmod | grep ntfs
ntfs 246712 1
掛在後,fdisk查看.內核功能成功.
Device Boot Start End Blocks Id System
/dev/sdb4 * 1 975 7831520 7 HPFS/NTFS
本文出自 「小龍的空間」 博客,謝絕轉載!
[火星人 ] linux內核編譯練習已經有830次圍觀