编译Linux 内核

 

1.为什么要编译Linux 内核
  众所周知,Linux是开放源码的操作系统,开放源码软件带给我们这计算机水平相对落后的人群的最大好处,就是可以快速学习世界高水平的程序(体系结构及编程方法等等),从而快速提高自身水平。然而这本身,也使多数开放源码软件在编码易用性、针对性方面比不上Microsoft等专业软件公司的产品。使用开放源码软件,多多少少都一些不太舒服的感觉。这一点想必用过Linux较早期版本的朋友都有同感。有时候还不仅是不舒服,由于软件开发者或版本的不同,我们无法保证所有的软件都能够简单地在不同的机器间移植,对于某些大型软件(如:ORACLE 8.0.5)尤其如此。许多情况下,系统状态,尤其是内核状态,对程序的安装使用和性能有至关重要的影响和制约作用。从另外的角度来讲,我们也可以为自己的计算机量身定制内核,这样就不会出现Windows 98那样的大垃圾箱了。

2.了解Linux
  要编译Linux的内核,首先要对它有个大概的印象。LinuxUnix的仿制品,它支持多任务、虚拟存储器,多终端,虚拟文件系统等特性。它最低可以运行在386/486的个人计算机上,其他一些体系结构的机器,如:SUN SparcM68000DEC AlphaPowerPC上也逐渐有了适用的Linux

3.编译内核的准备工作
1)了解现有内核的版本号.
这主要是为了确定一些机器的基本信息,不一定非这么做不可。可以用如下的命令行:
$ uname -a
Linux lark 2.2.15 #2 TUE DEC 26 10:55:20 CST 2000 i686
2)下载最新版本的Linux内核.目前国内教育网的ftp站点这方面的内容(包括压缩的内核、补丁、编译器等)都比较丰富,更新也较快,如:http://ftp.xjtu.edu.cn/ftp/pub/linux/kernel/ftp://166.111.136.3/pub/linux/kernel2.2.x版本是比较稳定的,推荐使用。
3)把打包的内核解开
压缩的内核、补丁和解开的源代码总共要占70M左右的硬盘空间;用root登录,解开的源代码应该在/usr/src/linux2.2.15下面:
#tar zxvf linux-2.2.15.tar.gz
或者
#gzip t linux-2.2.15.tar.gz
#tar x linux-2.2.15.tar
如果嫌命令行太麻烦的话,也可以在某台windows的机器上用winzip之类的软件解开,再用ftpmount等方式让linux可以访问。
4)在系统中安装gcc-2.7.2或更新的c编译包
5)如果没有把握,就把原来的内核(在/boot下)在别的地方重新备份一个。别忘了同时备份模块(/lib/modules/2.x.x

4.内核编辑
  为了使内核符合自己系统和应用程序的实际需要,一般都要对其进行某些编辑工作,主要是修改某些头文件中的若干参数。比方说,在安装Oracle 8.0.5时,为了使Oracle能够利用的内存空间与实际的物理内存容量相符,以提高性能,要修改/usr/src/linux/include/asm下的shmparam.h文件中的一些内存参数。

5.内核配置
  内核配置的方法很多,make configmake xconfigmake menuconfigmake oldconfig等等,它们的功能都是一样的,区别应该从名字上就能看出来,只有make oldconfig是指用系统当前的设置(./.config)作为缺省值。这里用的是make menuconfig
  需要牢记:不必要的驱动越多,内核就越大,不仅运行速度慢、占用内存多,在少数情况下、还会引发其他问题。具体步骤如下:
首先确定shellbash
然后
$make menuconfig
有一些默认的符号其含义如下:
y:加载
n:不加载
m:作为模块加载

可以配置的选项有以下一些:
1code maturity level option 代码成熟度
prompt for development and/or incomplete code/drivers [N/y/?]
如果有兴趣测试一下内核中尚未最终完成的某些模块,就选y,否则选N,想知道更详细的信息选?会看到联机帮助(以下?的含义相同),N大写表示缺省值。

2processor type and features 处理器类型及特性
Processor family386486/Cx486586/K5/5x86/6x86Pentium/K6/TSC PPro/6x86MX[PPro/6x86MX]
[]内的是缺省值,我们可以根据前面介绍的uname 命令执行的结果选择。此项如果高于386,那么生成的内核在386机器上将不能启动。
Math emulationCONFIG_MATH_EMULATION[N/y/?]
需要进行协处理器模拟吗?一般的机器都回n。如果机器已经有硬件的协处理器,那么内核仍将使用硬件,而忽略软件的math-emulation,这将使内核变大变慢。
MTRRMemory Type Range RegistersupportCONFIG_MTRR[N/y/]
PentiumPro/Pentium II类的系统中可以提高图像写入速度。
Symmetric multi-processing supportCONFIG_SMP[Y/n/]
如果您的机器有多个处理器,就选y。此时要选中下面的Enhanced Real Time Clock Support

3loadable model support 可加载模块支持
Enable loadable module supportCONFIG_MODULES[Y/n/]
最好选y,不然许多仅供动态加载的模块就不能用了。
Set version information on all symbols for modulesCONFIG_MODVERSIONS[N/y/]
N
Kernel module loaderCONFIG_KMOD[N/y/?]

4general setup 一般设置
Networking supportCONFIG_NET[Y/n/?]
y吧,现在还有几台计算机不用上网呢?
PCI support CONFIG_PCI[Y/n/?]
PCI 总线和设备总该有吧。
PCI access modeBIOSDirectAny[Any]
缺省值比较保险,但如果您对您的主板很有信心,就选BIOS
PCI quirks CONFIG_PCI_QUIRKS[Y/n/?]
用于修补BIOS中对PCI有影响的BUG,同样,如果您对主板很有信心,就选n
Backward-compatible /proc/pci〉(CONFIG_PCI_OLD_PROC[Y/n/?]
以前的内核使用/proc/pci,新版内核使用/proc/bus/pci,要保持兼容性就选y
MCA supportCONFIG_MCA[N/y/?]
查看帮助吧。
SGI Visual Workstation supportCONFIG_VISWS[N/y/?]
您的机器是SGI的吗?是就选y
System V IPCCONFIG_SYSVIPC[Y/n/?]
进程间通信函数和系统调用。Linux内核的五大组成部分之一,一定要选。
BSD Process AccountingCONFIG_BSD_PROCESS_ACCT[N/y/?]
用于启动由内核将进程信息写入文件的用户级系统调用。就看您想不想用它了。
Sysctl supportCONFIG_SYSCTL[Y/n/?]
在内核正在运行的时候修改内核。用8KB空间换取某种方便。别选吧,除非你真的想试试。
Kernel support for a.out binariesCONFIG_BINFMT_AOUT[Y/m/n/?]
为了能使用以前编译的程序,选y
Kernel support for ELF binariesCONFIG_BINFMT_ELF[Y/m/n/?]
为了能使用现在编译的程序,选y
Kernel support for MISC binariesCONFIG_BINFMT_MISC[Y/m/n/?]
一般选y,用于支持java等代码的自动执行。
Parallel port supportCONFIG_PARPORT[N/y/m/?]
并口设备,如打印机。

5plug and play support 即插即用设备支持
Plug and Play support CONFIG_PNP[N/y/?]
y吧。

6block devices 块设备
Normal PC floppy disk supportCONFIG_BLK_DEV_FD[Y/m/n/?]
一般的软驱。选y
Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy supportCONFIG_BLK_DEV_IDE[Y/m/n/?]
这几种接口的硬盘、光驱、磁带、软驱。选y
Include IDE/ATAPI CDROM supportCONFIG_BLK_DEV_IDECD[Y/m/n/?]
CDROM。选y

7networking options 网络选项
Packet socket CONFIG_PACHET[Y/m/n/?]
按照目前网络发展的状况,选y比较好。当然也可以选其它的。
Kernel/User netlink sockeCONFIG_NETLINK[N/y/?]
内核与用户进程双向通信。选y
Network firewallsCONFIG_FIREWALL[N/Y/?]
如果真的需要用防火墙,就选y
UNIX domain socketsconfgi_unix[Y/m/n/?]
socket 的用处太多了。选y
TCP/IP networkingCONFIG_INET[Y/n/?]
y,理由如上一条。
The IPX protocol CONFIG_IPX[N/y/m/?]
其实并没有那么多人真的需要使用或者学习IPX,所以一般选N
Appletalk DDPCONFIG_ATALK[N/y/m/?]
N,理由同上。

8SCSI support SCSI支持,SCSI low-level drives SCSI低级驱动
根据系统中SCSI设备的实际情况选择。

9Networking device support 网络设备支持
如果用LAN上网,就选择网卡;
如果用MODEM拨号上网,就要看ISP提供那种服务了,一般都是PPP

10Amateur Radio support 业余收音机支持
这是什么我不太清楚,所以选N

11ISDN subsystem ISDN子系统
好像已经有支持ISDNMODEM了,所以最好先看看自己的MODEM是不是这种,再做选择。

12Old CD-ROM dfivers not SCSI not IDE 老式光驱驱动
一般选N,因为这种设备实在很少见。

13Character devices 字符设备
Virtual terminalCONFIG_VT[Y/n/?]
Linux上一般可以用Alt+F1/F2/F3/F4来切换不同的任务终端,即使在一台计算机上也可以充分使用Linux的多任务能力,一些需要以命令行方式安装合适用的软件如果有虚拟终端的支持就会更方便,因此选y
Support for console on virtual terminalCONFIG_VT_CONSOLE[Y/n/?]
y将支持一个虚拟终端作为控制台。一般为Alt+F1
Support for console on serial portCONFIG_SERIAL[Y/m/n/?]
除非真的需要一个串口控制台,否则选n
Extended dumb serial driver optionsCONFIG_SERIAL_EXTENDED[N/y/?]
如果希望使用"dumb"的非标准特性(如HUB6支持),选y,一般选N
Non-standard serial port supportCONFIG_SERIAL_NONSTANDARD[N/y/?]
非标准串口。一般选N
UNIX98 PTY supportCONFIG_UNIX98_PTYS[Y/n/?]
PTY指伪终端,一般用户就选n。但如果想用telnet或者xterms作为终端访问主机,并且已经安装了glibc2.1,就可以选y
Maximum number of UNIX98 PTYs in use0-2048)(CONFIG_UNIX98_PTY_COUNT[256]
缺省值就可以了。
Mouse Supportnot serial mice)(CONFIG_MOUSE[Y/n/?]
PS/2等非串口鼠标选y,否则选N

14Mice 鼠标
根据自己的鼠标类型选择。

15Video for Linux Linux视频
根据系统中的音/视频捕捉设备选择。

16Joystick support 操纵杆
根据系统中的游戏杆设备选择

17Ftapethe floopy tape device driver Ftape设备驱动
Ftape QIC-80/TravansupportCONFIG_FTAPE[N/y/m/?]
如果系统中有磁带机,选y

18Filesystems 文件系统
文件系统的选择要比较仔细,因为其中的一些给某些系统功能提供支持。而且除了procext2等文件系统之外,其它的文件系统(包括下面的网络文件系统)都可以选择为m方式,从而减小内核启动时的体积。
Quota supportCONFIG_QUOTA[N/y/?]
用于给用户划分定量的磁盘空间。如不用此功能就选N
DOS FAT fs supportCONFIG_FAT_FS[N/y/m/?]
为内核提供FAT支持,多数用户有可能从Linux访问同一系统中的WINDOWS硬盘空间,因此最好选y
ISO 9660 CDROM filesystem supportCONFIG_ISO9660_FS[Y/m/n/?]
有标准光驱的系统应该选Y
Minix fs supportCONFIG_MINIX_FS[N/y/m/?]
用于创建启动盘的文件系统,多数应该选y或者m
/proc filesystem supportCONFIG_PROC_FS[Y/n/?]
虚拟文件系统,必须选Y
Second extended fs supportCONFIG_EXT2_FS[Y/m/n/?]
Linux标准文件系统,都应该选Y

19Network file systems 网络文件系统
Coda filesystem support advanced network fs)(CONFIG_CODA_FS[N/y/m/?]
先看帮助再选。
NFS filesystem supportCONFIG_NFS_FS[Y/m/n/?]
Yn,能够访问远程NFS文件系统。
SMB filesystem supportto mount WfW shares etc.)(CONFIG_SMB_FS[N/y/m/?]
要访问WINDOWS系统中的共享资源选y
NCP filesystem supportto mout NetWare volumes)(CONFIG_NCP_FS[N/y/m/?]
如果真的需要访问NetWare文件系统,就选y或者m

20Partion Types 分区类型
一般用不上;要用请参看帮助。

21Console drivers 控制台驱动
VGA text consoleCONFIG_VGA_CONSOLE[Y/n/?]
VGA模式下用文本方式操作Linux,一般选y
Video mode selection supportCONFIG_VIDEO_SELECT[N/y/?]
大多数系统都不需要这项功能。

22Sound 声音
Sound card supportCONFIG_SOUND[N/y/m/?]
如果系统中安装了声卡,就选y(或者m),然后查看帮助。

23Kernel hacking 内核监视
kernel hacking往往会生成非常大或者非常慢(甚至又大又慢)的内核,甚至会引起内核工作不稳定。如果一定要选,那么也最好不要选其中的"development""experimental""debugging"项。

6.编译新内核
/usr/src/linux目录下执行
1$ Makefile
2$ make dep,以正确设置所有的依赖关系。
3) $ make clean 清除所有已存在的目标文件,如果忘记做这一步,生成的内核将会非常庞大。
4$ make zImage / make zdisk / make bzImage / make zlilo 生成一个经过压缩的内核。如果要制作成启动盘就使用make zdisk,别忘记在a:中插一张软盘。make zlilo 把生成的内核加入LILO中,不过在最初几次编译内核时不要使用此项,以免系统因生成的内核有故障而不能启动。make bzImage用于生成超过1M的内核。不过如果您的内核真的超过了此限制,最好先看看其中有没有什么不该要的东西。
5)如果您的内核中使用了可装卸的模块,则需要依次运行make modulesmake modules_install

7.安装新生成的内核并设置LILO
1)将编译生成的新内核(/usr/src/linux/arch/i386/boot/zImage)拷贝至/boot下。
2)编辑LILO启动文件/etc/lilo.f,格式参考如下:
image = /boot/zImage
label = mylinux
root = /dev/hda1
read-only
image = /boot/vmlinux
label = linux
root = /dev/hda1
read-only
3)运行LILO
4)重新启动计算机

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值