编译前的准备
一.查看硬件信息。
[root@REHL5-T Desktop]# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 42
model name : Intel(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 - Intel 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
本文出自 “飞翔” 博客,谢绝转载!