如何编译linux内核

内核是操作系统的核心。
它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,并决定系统的性能和稳定性。
由于是免费软件,Linux的内核版本在大多数爱好者的支持下不断更新。
新内核修复了旧内核的错误并添加了许多新功能。
如果用户想要利用这些新功能或者使更高效、更稳定的内核适应自己的系统,则需要重新编译内核。
本文以RedHatLinux6.0(Kernel2.2.5)作为操作系统平台来介绍Linux下内核编译的方法。
1.下载新内核的源代码。
目前互联网上有很多网站提供Linux源代码。
笔者从www.kernelnotes.org网站下载了Linux内核最新开发版本2.3.14的源代码。
所有代码都被压缩到一个名为Linux-2.3.14.tar.gz的文件中。
2.发布内核源代码。
由于源代码存储在压缩文件中,因此在配置内核之前必须将源代码释放到指定目录中。
首先使用root账号登录,然后进入/usr/src子目录。
在安装Linux时,当用户安装内核源码时,会发现有一个linux-2.2.5的子目录。
内核2.2.5的源代码存放在该目录中。
您还将找到Linux目录的链接。
删除连接并将新的内核源文件复制到/usr/src目录。
(1)使用tar命令共享内核源代码#cd/usr/src#tarzxvfLinux-2.3.14.tar.gz。
文件释放成功后,会在/usr/src目录下生成Linux子目录。
它包含2.3.14内核的完整源代码。
(2)将/usr/include/asm、/usr/inlude/linux和/usr/include/scsi链接到/usr/src/linux/include目录下的相应目录。
  #cd/usr/include​​#rm-Rfasmlinux​​#ln-s/usr/src/linux/include/asm-i386asm​​#ln-s/usr/src/linux/include/linuxlinux【#ln-s/usr/src/linux/include/scsiscsi】(3)删除源代码目录下剩余的.o文件和其他依赖文件。
#cd/usr/src/linux#makemrproper3.配置内核(1)启动内核配置实用程序。
  #cd/usr/src/linux​​#makeconfig​除上述命令外,用户还可以使用makemenuconfig命令以菜单方式启动配置界面。
如果用户安装了Xwindow系统,也可以运行makexconfig命令来启动Xwindow下的内核配置程序。
(2)配置内核Linux内核配置实用程序提供了许多配置选项。
对于每个配置选项,用户可以回答“y”、“m”或“n”。
其中,“y”表示将相应的功能支持或设备驱动编译到内核中;“m”表示将适当的功能支持或设备驱动程序编译成可加载模块,该模块可以由系统或用户添加到内核中。
“n”表示内核不支持相应的功能或驱动程序。
由于内核的配置选项有很多,本文只介绍一些比较重要的选项。
1.代码成熟度级别选项Promptfordevelopmentand/orincompletecode/drivers(CONFIG_EXPERIMENTAL)[N/y/?]如果用户想要使用以下代码或驱动程序仍处于测试阶段,可以选择“y”。
如果你想编译一个稳定的内核,请选择“n”。
1、处理器类型及特性(1)、Processorfamily(386,486/Cx486,586/K5/5x86/6x86、Pentium/K6/TSC、PPro/6x86MX)【PPro/6x86MX】选择处理器类型,默认Ppro/6x86MX。
(2)MaximumPhysicalMemory(1GB,2GB)[1GB]内核支持的最大内存数,默认为1G。
(3)、Mathemulation(CONFIG_MATH_EMULATION)[N/y/?]协处理器模拟,默认不模拟。
(4)、MTRR(MemoryTypeRangeRegister)支持(CONFIG_MTRR)[N/y/?]选择该选项,系统生成/proc/mtrr文件来管理MTRR,供Xserver使用。
(5)、Symmetricmulti-processingsupport(CONFIG_SMP)[Y/n/?]选择“y”,支持内核支持对称多处理器。
2.Loadablemodulesupport(1)Enableloadablemodulesupport(CONFIG_MODULES)[Y/n/?]选择“y”,内核支持加载模块。
(2)内核模块加载器(CONFIG_KMOD)选择“y”[N/y/?],内核会自动加载这些可加载模块,否则用户需要手动加载。
3.一般设置(1)Networkingsupport(CONFIG_NET)[Y/n/?]该选项指定内核是否应提供网络支持。
(2)PCIsupport(CONFIG_PCI)[Y/n/?]该选项指定是否在内核中提供PCI支持。
(3)PCIaccessmode(BIOS、Direct、Any)[Any]该选项决定Linux如何识别PCI设备。
选择“BIOS”,Linux将使用BIOS;选择“Direct”,Linux将不通过BIOS;选择“Any”,Linux将直接检测PCI设备,如果失败则使用BIOS。
(4)并口支持(CONFIG_PARPORT)[N/y/m/?]选择“y”,内核支持并口。
4、即插即用配置(PlugandPlayDeviceSupport)(1)在PlugandPlaySupport(CONFIG_PNP)中选择“y”[Y/m/n/?],内核自动配置即插即用设备。
(2)ISAPlugandPlaysupport(CONFIG_ISAPNP)[Y/m/n/?]选择“y”,内核将自动配置基于ISA总线的即插即用设备。
5.块设备(1)NormalPCfloppydisksupport(CONFIG_BLK_DEV_FD)[Y/m/n/?]选择“y”,内核将提供对软盘的支持。
(2)、EnhancedIDE/MFM/RLLdisk/cdrom/tape/floppysupport(CONFIG_BLK_DEV_IDE)[Y/m/n/?]选择“y”,内核提供对增强型IDE硬盘、CD-ROM和磁带机的支持。
6.网络选项(1)为Packetsocket(CONFIG_PACKET)[Y/m/n/?]选择“y”。
某些应用程序使用数据包协议直接与网络设备进行通信,而无需通过内核协议中的其他中介进行通信。
(2)Networkfirewalls(CONFIG_FIREWALL)[N/y/?]选择“y”,内核支持防火墙。
(3)TCP/IPNetwork(CONFIG_INET)选择“y”[Y/n/?],内核支持TCP/IP协议。
(4)IPX协议(CONFIG_IPX)[N/y/m/?]选择“y”,内核支持IPX协议。
(5)如果AppletalkDDP(CONFIG_ATALK)[N/y/m/?]选择“y”,则内核支持AppletalkDDP协议。
8.SCSIsupport如果用户想使用SCSI设备,可以配置相应的选项。
9.NetworkdevicesupportNetworkdevicesupport(CONFIG_NETDEVICES)[Y/n/?]选择“y”,内核将为网络驱动提供支持。
10.Ethernet(10or100Mbit)(10M或100M以太网)在此设置下,系统提供了多种网卡驱动程序,用户只需选择适合自己的网卡驱动程序即可。
此外,用户还可以如有必要,内核还添加对FDDI、PPP、SLIP和无线LAN(WirelessLAN)的支持。
11、Characterdevices(字符设备)(1)Virtualterminal(CONFIG_VT)[Y/n/?]选择“y”,内核支持虚拟终端。
(2)、支持虚拟终端上的控制台(CONFIG_VT_CONSOLE)[Y/n/?]选择“y”,内核可以使用虚拟终端作为系统控制台。
(3)、Standard/generic(dumb)serialsupport(CONFIG_SERIAL)[Y/m/n/?]选择“y”,内核支持串口。
(4)、Supportforconsoleonserialport(CONFIG_SERIAL_CONSOLE)[N/y/?]选择“y”,内核可以使用串口作为系统控制台。
12.Mice(鼠标)支持PS/2鼠标(又名“Auxiliarydevice”)(CONFIG_PSMOUSE)[Y/n/?]如果用户使用PS/2鼠标,该选项应选择“y”。
13.文件系统(1)配额支持(CONFIG_QUOTA)[N/y/?]选择“y”,内核支持磁盘配额。
(2)kernelautomountersupport(CONFIG_AUTOFS_FS)[Y/m/n/?]选择“y”,内核提供automounter支持,允许系统在启动时自动挂载远程文件系统。
(3)DOSFATfssupport(CONFIG_FAT_FS)[N/y/m/?]选择“y”,内核支持DOSFAT文件系统。
(4)、ISO9660CD-ROM文件系统支持(CONFIG_ISO9660_FS)[Y/m/n/?]选择“y”,内核支持ISO9660CD-ROM文件系统。
(5)、NTFSfilesystemsupport(readonly)(CONFIG_NTFS_FS)[N/y/m/?]选择“y”,用户可以以只读方式访问NTFS文件系统。
(6)/procfilesystemsupport(CONFIG_PROC_FS)[Y/n/?]/proc是一个虚拟文件系统,存储Linux系统的运行状态。
必须为此元素选择“y”。
(7)Secondextendedfssupport(CONFIG_EXT2_FS)[Y/m/n/?]EXT2是Linux的默认文件系统,此项也必须选择“y”。
14、NetworkFileSystems(网络文件系统)(1)、NFSfilesystemsupport(CONFIG_NFS_FS)[Y/m/n/?]选择“y”,内核支持NFS文件系统。
(2)、SMBfilesystemsupport(tomountWfWsharesetc.)(CONFIG_SMB_FS)选择“y”,内核支持SMB文件系统。
(3)、NCPfilesystemsupport(tomountNetWarevolumes)(CONFIG_NCP_FS)选择“y”,内核支持NCP文件系统。
15.PartitionTypes该选项支持一些不太常用的分区类型。
如果用户需要,只需选择“y”作为适当的选项。
16.ConsoledriversVGAtextconsole(CONFIG_VGA_CONSOLE)[Y/n/?]选择“y”,用户可以在标准VGA显示模式下使用Linux。
17.Sound(声音)Soundcardsupport(CONFIG_SOUND)[N/y/m/?]选择“y”,内核可以提供对声卡的支持。
18.KernelHacking(内核监控)MagicSysRqkey(CONFIG_MAGIC_SYSRQ)[N/y/?]选择“y”,用户可以部分控制系统。
通常你选择“n”。
4、编译内核(1)。
创建编译所需的依赖文件#cd/usr/src/linux​#makedep​(2)删除内核编译的目标文件#makeclean​(3)编译内核#makezImage​内核编译成功后,会生成一个新的内核镜像文件在zImage目录下创建/usr/src/linux/arch/i386/boot生成。
如果编译的内核较大,系统会提示您使用makebzImage命令进行编译。
此时,编译器会生成一个名为bzImage的内核映像文件。
(4)编译可加载模块如果用户在配置内核时设置了可加载模块,则需要编译这些模块,以便将来可以使用insmod命令使用可以加载。
#makemodules#makemodelus_install编译成功后,系统会在/lib/modules目录下生成一个2.3.14子目录,其中存放了新内核的所有可加载模块。
5.启动新内核(1)。
将新内核和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-fSystem.map​#ln-sSystem.map-2.3.14System.map​(2)配置/etc/lilo.conf文件。
将以下行添加到文件中:default=linux-2.3.14image=/boot/vmlinuz-2.3.14label=linux-2.3.14root=/dev/hda1.只读。
(3)使新配置生效。
#/sbin/reboot如果新内核无法正常启动,用户可以启动旧内核LILO:提示。
然后找出错误原因,重新编译新内核。
要了解有关开源的更多信息,请访问LUPA社区。

谈一谈关于Linux内核编译详解原理

简介:量产启动盘是为了解决内核编译导致的系统崩溃问题而设计的。
当核心排序不正确时,系统无法正常启动,如左上角闪烁所示。
外部设备的启动盘可用于恢复系统引导系统。
1、编译前的准备:需要一个大于8G的U盘启动盘,格式为ext3、ext4或VFAT。
单击镜像文件(如果是Board-16.04-64.iso)。
准备一台Linux系统的主机,最好是CentOS或Ubuntu,并有root权限。
2、安装引导程序:为Ubuntu-16.04-64.iso和放置在自己磁盘分区的USB存储设备创建挂载点(通过lsblk-l查看)。
3.创建临时挂载点:在映像和USB驱动器上创建挂载点。
4.挂载Council-16.04-64.iso:使用-loop选项创建一个像锁一样的工作镜像。
此时挂载点可以认为是一个U盘插件,里面包含了燃烧系统。
5.挂载USB存储设备:将USB挂载到指定路径。
6.将isolinux文件复制到USB闪存驱动器:将镜像中的isolinux文件复制到USB闪存驱动器。
7.复制isolinux.cfg:复制USB盘镜像中的isolinux.cfg。
8.删除镜像和USB挂载点:模型完成后,删除镜像和挂载点。
9.重新启动系统,插入USB启动盘,尝试将系统引导到USB盘中。
10、下载、配置和编译内核:下载内核,点击U盘空间,安装编译软件,解压内核包,配置内核,编译内核。
11、安装内核:安装驱动、运行安装、复制kernel/boot、初始化RAM盘、复制System.map、创建符号链接、重启系统。
12.测试和调试内核:使用Netconsole配置调试控制台、内核启动选项、更新蠕虫、初始化Netconsole模块、配置Netconsole选项、设置接收设置以及监控内核崩溃信息。