内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译内核。本文将以redhat linux 6.0(kernel 2.2.5)为操作系统平台,介绍在linux上进行内核编译的方法。
一、 下载新内核的源代码
目前,在internet上提供linux源代码的站点有很多,读者可以选择一个速度较快的站点下载。笔者是从站点www.kernelnotes.org上下载了linux的最新开发版内核2.3.14的源代码,全部代码被压缩到一个名叫linux-2.3.14.tar.gz的文件中。
二、 释放内核源代码
由于源代码放在一个压缩文件中,因此在配置内核之前,要先将源代码释放到指定的目录下。首先以root帐号登录,然后进入/usr/src子目录。如果用户在安装linux时,安装了内核的源代码,则会发现一个linux-2.2.5的子目录。该目录下存放着内核2.2.5的源代码。此外,还会发现一个指向该目录的链接linux。删除该连接,然后将新内核的源文件拷贝到/usr/src目录中。
(一)、用tar命令释放内核源代码
# cd /usr/src
# tar zxvf linux-2.3.14.tar.gz
文件释放成功后,在/usr/src目录下会生成一个linux子目录。其中包含了内核2.3.14的全部源代码。
(二)、将/usr/include/asm、/usr/inlude/linux、/usr/include/scsi链接到/usr/src/linux/include目录下的对应目录中。
# cd /usr/include
# rm -rf asm linux
# ln -s /usr/src/linux/include/asm-i386 asm
# ln -s /usr/src/linux/include/linux linux
# ln -s /usr/src/linux/include/scsi scsi
(三)、删除源代码目录中残留的.o文件和其它从属文件。
# cd /usr/src/linux
# make mrproper
三、 配置内核
(一)、启动内核配置程序。
# cd /usr/src/linux
# make config
除了上面的命令,用户还可以使用make menuconfig命令启动一个菜单模式的配置界面。如果用户安装了x window系统,还可以执行make xconfig命令启动x window下的内核配置程序。
(二)、配置内核
linux的内核配置程序提供了一系列配置选项。对于每一个配置选项,用户可以回答y、m或n。其中y表示将相应特性的支持或设备驱动程序编译进内核;m表示将相应特性的支持或设备驱动程序编译成可加载模块,在需要时,可由系统或用户自行加入到内核中去;n表示内核不提供相应特性或驱动程序的支持。由于内核的配置选项非常多,本文只介绍一些比较重要的选项。
1、code maturity level options(代码成熟度选项)
prompt for development and/or incomplete code/drivers (config_experimental) [n/y/?] 如果用户想要使用还处于测试阶段的代码或驱动,可以选择“y”。如果想编译出一个稳定的内核,则要选择“n”。
1、 processor type and features(处理器类型和特色)
(1)、processor family (386, 486/cx486, 586/k5/5x86/6x86, pentium/k6/tsc, ppro/6x86mx) [ppro/6x86mx] 选择处理器类型,缺省为ppro/6x86mx。
(2)、maximum physical memory (1gb, 2gb) [1gb] 内核支持的最大内存数,缺省为1g。
(3)、math emulation (config_math_emulation) [n/y/?] 协处理器仿真,缺省为不仿真。
(4)、mtrr (memory type range register) support (config_mtrr) [n/y/?]
选择该选项,系统将生成/proc/mtrr文件对mtrr进行管理,供x server使用。
(5)、symmetric multi-processing support (config_smp) [y/n/?] 选择“y”,内核将支持对称多处理器。
2、 loadable module support(可加载模块支持)
(1)、enable loadable module support (config_modules) [y/n/?] 选择“y”,内核将支持加载模块。
(2)、kernel module loader (config_kmod) [n/y/?] 选择“y”,内核将自动加载那些可加载模块,否则需要用户手工加载。
3、 general setup(一般设置)
(1)、networking support (config_net) [y/n/?] 该选项设置是否在内核中提供网络支持。
(2)、pci support (config_pci) [y/n/?] 该选项设置是否在内核中提供pci支持。
(3)、pci access mode (bios, direct, any) [any] 该选项设置linux探测pci设备的方式。选择“bios”,linux将使用bios;选择“direct”,linux将不通过bios;选择“any”,linux将直接探测pci设备,如果失败,再使用bios。
(4)parallel port support (config_parport) [n/y/m/?] 选择“y”,内核将支持平行口。
4、 plug and play configuration(即插即用设备支持)
(1)、plug and play support (config_pnp) [y/m/n/?] 选择“y”,内核将自动配置即插即用设备。
(2)、isa plug and play support (config_isapnp) [y/m/n/?] 选择“y”,内核将自动配置基于isa总线的即插即用设备。
5、 block devices(块设备)
(1)、normal pc floppy disk support (config_blk_dev_fd) [y/m/n/?] 选择“y”,内核将提供对软盘的支持。
(2)、enhanced ide/mfm/rll disk/cdrom/tape/floppy support (config_blk_dev_ide) [y/m/n/?] 选择“y”,内核将提供对增强ide硬盘、cdrom和磁带机的支持。
6、 networking options(网络选项)
(1)、packet socket (config_packet) [y/m/n/?] 选择“y”,一些应用程序将使用packet协议直接同网络设备通讯,而不通过内核中的其它中介协议。
(2)、network firewalls (config_firewall) [n/y/?] 选择“y”,内核将支持防火墙。
(3)、tcp/ip networking (config_inet) [y/n/?] 选择“y”,内核将支持tcp/ip协议。
(4)the ipx protocol (config_ipx) [n/y/m/?] 选择“y”,内核将支持ipx协议。
(5)、appletalk ddp (config_atalk) [n/y/m/?] 选择“y”,内核将支持appletalk ddp协议。
8、scsi support(scsi支持)
如果用户要使用scsi设备,可配置相应选项。
9、network device support(网络设备支持)
network device support (config_netdevices) [y/n/?] 选择“y”,内核将提供对网络驱动程序的支持。
10、ethernet (10 or 100mbit)(10m或100m以太网)
在该项设置中,系统提供了许多网卡驱动程序,用户只要选择自己的网卡驱动就可以了。此外,用户还可以根据需要,在内核中加入对fddi、ppp、slip和无线lan(wireless lan)的支持。
11、character devices(字符设备)
(1)、virtual terminal (config_vt) [y/n/?] 选择“y”,内核将支持虚拟终端。
(2)、support for console on virtual terminal (config_vt_console) [y/n/?]
选择“y”,内核可将一个虚拟终端用作系统控制台。
(3)、standard/generic (dumb) serial support (config_serial) [y/m/n/?]
选择“y”,内核将支持串行口。
(4)、support for console on serial port (config_serial_console) [n/y/?]
选择“y”,内核可将一个串行口用作系统控制台。
12、mice(鼠标)
ps/2 mouse (aka auxiliary device) support (config_psmouse) [y/n/?] 如果用户使用的是ps/2鼠标,则该选项应该选择“y”。
13、filesystems(文件系统)
(1)、quota support (config_quota) [n/y/?] 选择“y”,内核将支持磁盘限额。
(2)、kernel automounter support (config_autofs_fs) [y/m/n/?] 选择“y”,内核将提供对automounter的支持,使系统在启动时自动 mount远程文件系统。
(3)、dos fat fs support (config_fat_fs) [n/y/m/?] 选择“y”,内核将支持dos fat文件系统。
(4)、iso 9660 cdrom filesystem support (config_iso9660_fs) [y/m/n/?]
选择“y”,内核将支持iso 9660 cdrom文件系统。
(5)、ntfs filesystem support (read only) (config_ntfs_fs) [n/y/m/?]
选择“y”,用户就可以以只读方式访问ntfs文件系统。
(6)、/proc filesystem support (config_proc_fs) [y/n/?] /proc是存放linux系统运行状态的虚拟文件系统,该项必须选择“y”。
(7)、second extended fs support (config_ext2_fs) [y/m/n/?] ext2是linux的标准文件系统,该项也必须选择“y”。
14、network file systems(网络文件系统)
(1)、nfs filesystem support (config_nfs_fs) [y/m/n/?] 选择“y”,内核将支持nfs文件系统。
(2)、smb filesystem support (to mount wfw shares etc.) (config_smb_fs)
选择“y”,内核将支持smb文件系统。
(3)、ncp filesystem support (to mount netware volumes) (config_ncp_fs)
选择“y”,内核将支持ncp文件系统。
15、partition types(分区类型)
该选项支持一些不太常用的分区类型,用户如果需要,在相应的选项上选择“y”即可。
16、console drivers(控制台驱动)
vga text console (config_vga_console) [y/n/?] 选择“y”,用户就可以在标准的vga显示方式下使用linux了。
17、sound(声音)
sound card support (config_sound) [n/y/m/?] 选择“y”,内核就可提供对声卡的支持。
18、kernel hacking(内核监视)
magic sysrq key (config_magic_sysrq) [n/y/?] 选择“y”,用户就可以对系统进行部分控制。一般情况下选择“n”。
四、 编译内核
(一)、建立编译时所需的从属文件
# cd /usr/src/linux
# make dep
(二)、清除内核编译的目标文件
# make clean
(三)、编译内核
# make zimage
内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件zimage。如果编译的内核很大的话,系统会提示你使用make bzimage命令来编译。这时,编译程序就会生成一个名叫bzimage的内核映像文件。
(四)、编译可加载模块
如果用户在配置内核时设置了可加载模块,则需要对这些模块进行编译,以便将来使用insmod命令进行加载。
# make modules
# make modelus_install
编译成功后,系统会在/lib/modules目录下生成一个2.3.14子目录,里面存放着新内核的所有可加载模块。
五、 启动新内核
(一)、将新内核和system.map文件拷贝到/boot目录下
# cp /usr/src/linux/arch/i386/boot/bzimage /boot/vmlinuz-2.3.14
# cp /usr/src/linux/system.map /boot/system.map-2.3.14
# cd /boot
# rm -f system.map
# ln -s system.map-2.3.14 system.map
(二)、配置/etc/lilo.conf文件。在该文件中加入下面几行:
default=linux-2.3.14
image=/boot/vmlinuz-2.3.14
label=linux-2.3.14
root=/dev/hda1
read-only
(三)、使新配置生效
# /sbin/lilo
(四)、重新启动系统
# /sbin/reboot
新内核如果不能正常启动,用户可以在lilo:提示符下启动旧内核。然后查出故障原因,重新编译新内核即可。
水表检定装置及水表检定系统的原理及设计
基于LabVIEW的汽车雨刮器综合控制系统
人工智能教育是什么?像学语言一样自然和必要从娃娃抓起
微间距显示屏的到来将会给我们带来什么改变
2022华为开发者大会开启松湖对话 共探开源鸿蒙产业未来
如何编译Linux内核
IOT视觉化开发工具Node-RED快速上手
脚的穴位图(足底脚面)
PN结的产生原理及单向导电性
林超文PCB设计:PADS教程,PADS视频教程
关于智能家居新时代的分析和介绍
豪华SUV凯雷德搭配38英寸曲面OLED屏幕,售价超150万
创基Type-C扩展坞让您随时随地乐享高效扩展
iphone8什么时候上市?iphone8最新消息:苹果内部信息曝光,iPhone8或将于9月17日发布!
AMD的历史
全球第一个基于二维半导体材料的内存处理器
艾睿光电与踏歌智行达成战略合作,车载红外热像仪赋能矿山无人驾驶
Arm构建Morello片上系统和演示板 LG化学NPG获得国际认证
旅游景区无线智能调频广播系统
双方“专利战”不断,董明珠:奥克斯天天在格力“挖人”