Linux编译安装新的内核.docx
- 文档编号:10179684
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:14
- 大小:25.46KB
Linux编译安装新的内核.docx
《Linux编译安装新的内核.docx》由会员分享,可在线阅读,更多相关《Linux编译安装新的内核.docx(14页珍藏版)》请在冰豆网上搜索。
Linux编译安装新的内核
Linux编译安装新的核心
内容要求:
1、概述:
描述有关概念;
2、实验步骤:
即查找、下载、编译、安装核心的完整步骤;
3、问题及其解决:
实验中碰到的问题,解决问题的办法;
4、小结:
包括如何分工合作,以及解决问题的心得,供今后参考。
)
第一概念:
在编译内核之前我们先来了解几个相关的概念,这将有助于我们更好的完成这次实验
1.内核,是一个操作系统的核心。
它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。
(内核源程序都可以在/usr/src/linux下找到)
我们可以针对自己的情况,量体裁衣,定制适合自己的系统,这样就需要重新编译内核.
2.内核版本号:
由于Linux的源程序是完全公开的,任何人只要遵循GPL,就可以对内核加以修改并发布给他人使用。
Linux的开发采用的是集市模型(bazaar,与cathedral--教堂模型--对应),为了确保这些无序的开发过程能够有序地进行,Linux采用了双树系统。
一个树是稳定树(stabletree),另一个树是非稳定树(unstabletree)或者开发树(developmenttree)。
一些新特性、实验性改进等都将首先在开发树中进行。
如果在开发树中所做的改进也可以应用于稳定树,那么在开发树中经过测试以后,在稳定树中将进行相同的改进。
一旦开发树经过了足够的发展,开发树就会成为新的稳定树。
开发数就体现在源程序的版本号中;源程序版本号的形式为x.y.z:
对于稳定树来说,y是偶数;对于开发树来说,y比相应的稳定树大一(因此,是奇数)。
到目前为止,稳定树的最高版本是2.2.16,最新发布的Redhat7.0所采用的就是2.2.16的内核;开发树的最新版本是2.3.99。
也许你已经发现和多网站上都有2.4.0-test9-pre7之类的内核,但是这并不是正式版本。
内核版本的更新可以访问http:
//www.kernel.org。
3.为什么重新编译内核
Linux内核版本不断更新。
新的内核修订了旧内核的bug,并增加了许多新的特性。
如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译内核。
通常,更新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快、更稳定,并且一般会修复老版本中发现的许多漏洞等,经常性地选择升级更新的系统内核是Linux使用者的必要操作内容。
为了正确的合理地设置内核编译配置选项,从而只编译系统需要的功能的代码,一般主要有下面四个考虑:
自己定制编译的内核运行更快(具有更少的代码)
系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中)
不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞
将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些
4.内核编译模式
要增加对某部分功能的支持,比如网络之类,可以把相应部分编译到内核中(build-in),也可以把该部分编译成模块(module),动态调用。
如果编译到内核中,在内核启动时就可以自动支持相应部分的功能,这样的优点是方便、速度快,机器一启动,你就可以使用这部分功能了;缺点是会使内核变得庞大起来,不管你是否需要这部分功能,它都会存在,这就是Windows惯用的招数,建议经常使用的部分直接编译到内核中,比如网卡。
如果编译成模块,就会生成对应的.o文件,在使用的时候可以动态加载,优点是不会使内核过分庞大,缺点是你得自己来调用这些模块。
内核编译详解
第二实验步骤:
1.查找:
通过XX我们可以很快找到我们想要到内核,通过输入“内核版本 AND linux”我们可以查找到Linux内核版本发布的官方网站是http:
//www.kernel.org/pub/;ftp:
//ftp.kernel.org/pub/(国内各大ftp上一般都可以找到某些版本的内核)
新版本的内核的发布有两种形式,一种是完整的内核版本,另外一种是patch文件,即补丁。
完整的内核版本比较大,比如我们将要使用的linux-2.4.24就有28.4。
完整内核版本一般是.tar.gz(.tgz)文件或者是.bz2文件,二者分别是使用gzip或者bzip2进行压缩的文件,使用时需要解压缩。
patch文件则比较小,一般只有几十K到几百K,极少的会超过1M,(有的用户也可以使用patch文件来升级内核。
但是patch文件是针对于特定的版本的,需要找到自己对应的版本才能使用。
)
2.下载与安装:
我们可以通过FTP在ftp:
//ftp.kernel.org/pub/ 上下载到我们所想要的linux内核!
这一通常做法,但是我们要求速度快,直接通过局域网,在教师上得到内核,文件名为:
linux-2.4.2.tar.bz2
把需要升级的内核拷贝到/usr/src/下,命令为
#cplinux-2.4.24.tar.bz2/usr/src
[我们先来查看一下当前/usr/src的内容,注意到有一个linux的符号链接,它指向一个类似于linux-2.2.14(对应于你现在使用的内核版本号)的目录。
首先删除这个链接:
#cd/usr/src
#rm-flinux
在为不同的系统上可能不会有这些项]
现在解压下载的源程序文件。
如果所下载的是.tar.gz(.tgz)文件,请使用下面的命令:
#tar-xzvflinux-2.6.2.tar.gz
我们所下载的是.bz2文件,linux-2.4.24.tar.bz2,请使用下面的命令
#bzip2-dlinux-2.4.24.tar.bz2
#tar-xvflinux-2.4.24.tar
我们可以在/usr/src下的内容,多出了一个linux-2.4.24的目录,里面就是我们需要升级到的版本的内核的源程序。
(还记得那个名为linux的链接么?
之所以使用那个链接就是防止在升级内核的时候会不慎把原来版本内核的源程序给覆盖掉了)。
我们也需要同样处理:
#mvlinuxlinux-2.6.2
#ln-slinux-2.6.2linux
这样我们也有了一个名为linux的符号链接,就不用担心以后会把它覆盖掉了(也许你会觉得重新建立linux的符号链接没有必要,但实际上这是必不可少的,下面我组报告中有写)。
要是还下载了patch文件,比如patch-2.4.25,就可以进行patch操作(下面假设patch-2.4.25已经位于/usr/src目录下了,否则需要先把该文件拷贝到/usr/src下):
#patch-p0 现在,我们已经把内核源程序升级到最新版本了,下面就让我们开始内核编译的旅程吧。 3.内核编译 准备工作 通常要运行的第一个命令是: #cd/usr/src/linux-2.6.2;makemrproper 该命令确保源代码目录下没有不正确的.o文件以及文件的互相依赖。 配置核心 有三种方法配置核心: makeconfig makemenuconfig makexconfig 三者的区别见书: P22 运行makeconfig HOSTCCscripts/fixdep /bin/sh: gcc: commandnotfound make[1]: ***[scripts/fixdep]Error127 make: ***[scripts/fixdep]Error2 运行makemenuconfig和makeoldconfig: HOSTCCscripts/fixdep /bin/sh: gcc: commandnotfound make[1]: ***[scripts/fixdep]Error127 make: ***[scripts/fixdep]Error2 在该实验中我们无法通过其中一种进行配置! ! 这是我们第一次运用的linux-2.6.4内核产生的错误,后来通过老师了解到,内核要可以编译还需要与内核相应的其它支持,如果没有相应的软件支持,低版本不一定都可以升级到高一级版本。 所以我们后来就改用了linux-2.4.24内核。 我们通过其它方法接下来做 确保/usr/include/目录下的asm、linux和scsi等链接是指向要升级的内核源代码的。 它们分别链向源代码目录下的真正的、该计算机体系结构(对于PC机来说,使用的体系结构是i386)所需要的真正的include子目录。 如: asm指向/usr/src/linux/include/asm-i386等。 若没有这些链接,就需要手工创建,按照下面的步骤进行: #cd/usr/include/ #rm-rasmlinuxscsi #ln-s/usr/src/linux/include/asm-i386asm #ln-s/usr/src/linux/include/linuxlinux #ln-s/usr/src/linux/include/scsiscsi 这是配置非常重要的一部分。 删除掉/usr/include下的asm、linux和scsi链接后,再创建新的链接指向新内核源代码目录下的同名的目录。 这些头文件目录包含着保证内核在系统上正确编译所需要的重要的头文件。 (这就是为什么我们上面又在/usr/src下多创建了个名为linux的链接) 配置 接下来的内核配置过程比较烦琐,但是配置的适当与否与日后Linux的运行直接相关,有必要了解一下一些主要的且经常用到的选项的设置。 配置内核可以根据需要与爱好使用下面命令中的一个: #makeconfig(基于文本的最为传统的配置界面,不推荐使用) #makemenuconfig(基于文本选单的配置界面,字符终端下推荐使用) #makexconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用) #makeoldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦) 这三个命令中,makexconfig的界面最为友好,我使用Xwindow,所以我运用 makexconfig命令 我们组其它成员,按要求,有各自用不同的命令进行配置 选择相应的配置时,有三种选择,它们分别代表的含义如下: Y--将该功能编译进内核 N--不将该功能编译进内核 M--将该功能编译成可以在需要时动态插入到内核中的模块 使用的是makexconfig,使用鼠标就可以选择对应的选项。 如果使用的是makemenuconfig,则需要使用空格键进行选取。 你会发现在每一个选项前都有个括号,但有的是中括号有的是尖括号,还有一种圆括号。 用空格键选择时可以发现,中括号里要么是空,要么是"*",而尖括号里可以是空,"*"和"M"这表示前者对应的项要么不要,要么编译到内核里;后者则多一样选择,可以编译成模块。 而圆括号的内容是要你在所提供的几个选项中选择一项。 (我们对在编译用makeconfig命令中产生的英文配置信息进行了查找,符在后面) 4.编译 makedep makeclean makezImage (如上我们所述makedep的创建依赖性列表,并确定以何种顺序来招待核心修改的工作。 makeclean命令卸载用户所有不再使用的文件。 makezImage编译核心 5.安装 主要是对LILO进行配置,使其可以启动新的内核。 我们通过如下方法进行修改 cp./arch/i386/boot/zImage/boot/vmlinuxz-$VERSION cd/boot rmvmlinuz ls–svmlinuz-$VERSIONvmlinuz lilo–v 其中$VERSION代表内核的版本号。 这是通过修改LILO。 CONF文件来实现的! 还可以用Loadlin 把zImage文件复制到相应的DOS分区内重启系统 还可以用boot软盘 运行makezdisk来创建启动软盘 6编译和安装 只要核心配置完成之后,马上编译模块,在/usr/src/linux-2.6.2下使用如下命令: makemodules 用root用户来安装模块,用 makemodules_install 这时模块就安装到/lib/modules下的某个目录中,目录名以核心的版本号来命名 接下来就要把模块加载入核心。 以上这两个文件是我们刚才编译时新生成的。 下面修改/boot下的两个链接System.map和vmlinuz,使其指向新内核的文件: #cd/boot;rm-fSystem.mapvmlinuz #ln-svmlinuz-2.4.0test8vmlinuz #ln-sSystem.map-2.4.0test8System.map 然后修改/etc/lilo.conf: #vi/etc/lilo.conf 增加如下一段: image=/boot/vmlinuz-2.4.0test8 label=linux240 read-only root=/dev/hda2 其中root=/dev/hda2一行要根据需要自行加以修改。 运行: #/sbin/lilo-v 确认对/etc/lilo.conf的编辑无误,现在重新启动系统: #shutdown-rnow 在机器重启后出现LILO时按TAB键,软件linux2.4.24,我们的新内核发挥作用 符录: 下面就让我们对常用的选项分别加以介绍: 1.Codematurityleveloptions 代码成熟等级。 此处只有一项: promptfordevelopmentand/orincompletecode/drivers,如果你要试验现在仍处于实验阶段的功能,比如khttpd、IPv6等,就必须把该项选择为Y了;否则可以把它选择为N。 2.Loadablemodulesupport 对模块的支持。 这里面有三项: Enableloadablemodulesupport: 除非你准备把所有需要的内容都编译到内核里面,否则该项应该是必选的。 Setversioninformationonallmodulesymbols: 可以不选它。 Kernelmoduleloader: 让内核在启动时有自己装入必需模块的能力,建议选上。 3.Processortypeandfeatures CPU类型。 内容蛮多的,不一一介绍了,有关的几个如下: Processorfamily: 根据你自己的情况选择CPU类型。 HighMemorySupport: 大容量内存的支持。 可以支持到4G、64G,一般可以不选。 Mathemulation: 协处理器仿真。 协处理器是在386时代的宠儿,现在早已不用了。 MTTRsupport: MTTR支持。 可不选。 Symmetricmulti-processingsupport: 对称多处理支持。 除非你富到有多个CPU,否则就不用选了。 4.Generalsetup 这里是对最普通的一些属性进行设置。 这部分内容非常多,一般使用缺省设置就可以了。 下面介绍一下经常使用的一些选项: Networkingsupport: 网络支持。 必须,没有网卡也建议你选上。 PCIsupport: PCI支持。 如果使用了PCI的卡,当然必选。 PCIaccessmode: PCI存取模式。 可供选择的有BIOS、Direct和Any,选Any吧。 Supportforhot-pluggabeldevices: 热插拔设备支持。 支持的不是太好,可不选。 PCMCIA/CardBussupport: PCMCIA/CardBus支持。 有PCMCIA就必选了。 SystemVIPC BSDProcessAccounting Sysctlsupport: 以上三项是有关进程处理/IPC调用的,主要就是SystemV和BSD两种风格。 如果你不是使用BSD,就按照缺省吧。 PowerManagementsupport: 电源管理支持。 AdvancedPowerManagementBIOSsupport: 高级电源管理BIOD支持。 5.MemoryTechnologyDevice(MTD) MTD设备支持。 可不选。 6.Parallelportsupport 串口支持。 如果不打算使用串口,就别选了。 7.PlugandPlayconfiguration 即插即用支持。 虽然Linux对即插即用目前支持的不如Windows好,但是还是选上吧,这样你可以拔下鼠标之类的体验一下Linux下即插即用的感觉。 8.Blockdevices 块设备支持。 这个就得针对自己的情况来选了,简单说明一下吧: NormalPCfloppydisksupport: 普通PC软盘支持。 这个应该必选。 XTharddisksupport: CompaqSMART2support: MulexDAC960/DAC1100PCIRAIDControllersupport: RAID镜像用的。 Loopbackdevicesupport: Networkblockdevicesupport: 网络块设备支持。 如果想访问网上邻居的东西,就选上。 Logicalvolumemanager(LVM)support: 逻辑卷管理支持。 Multipledevicesdriversupport: 多设备驱动支持。 RAMdisksupport: RAM盘支持。 9.Networkingoptions 网络选项。 这里配置的是网络协议。 内容太多了,不一一介绍了,自己看吧,如果你对网络协议有所了解的话,应该可以看懂的。 如果懒得看,使用缺省选项(肯定要选中TCP/IPnetworking哦)就可以了。 让我们看看,TCP/IP、ATM、IPX、DECnet、Appletalk……支持的协议好多哦,IPv6也支持了,Qosand/orfairqueueing(服务质量公平调度)也支持了,还有kHTTPd,不过这些都还在实验阶段。 10.TelephonySupport 电话支持。 这个是什么东东? 让我查查帮助,原来是Linux下可以支持电话卡,这样你就可以在IP上使用普通的电话提供语音服务了。 记住,电话卡可和modem没有任何关系哦。 11.ATA/IDE/MFM/RLLsupport 这个是有关各种接口的硬盘/光驱/磁带/软盘支持的,内容太多了,使用缺省的选项吧,如果你使用了比较特殊的设备,比如PCMCIA等,就到里面自己找相应的选项吧。 12.SCSIsupport SCSI设备的支持。 我没有SCSI的设备,所以根本就不用选,如果你用了SCSI的硬盘/光驱/磁带等设备,自己找好了。 13.IEEE1394(FireWire)support 这个是什么? 低版本的没有见过,看看帮助再说。 原来是要Fireware硬件来提高串行总线的性能,我没有,不选了。 14.I2Odevicesupport 这个也不清楚,帮助里说是这个需要I2O接口适配器才能支持的,在智能Input/Output(I2O)体系接口中使用,又是要硬件,不选了。 15.Networkdevicesupport 网络设备支持。 上面选好协议了,现在该选设备了,可想而知,内容肯定多得很。 还好还好,里面大概分类了,有ARCnet设备、Ethernet(10or100Mbit)、Ethernet(1000Mbit)、WirelessLAN(non-hamradio)、TokenRingdevice、Waninterfaces、PCMCIAnetworkdevicesupport几大类。 我用的是10/100M的以太网,看来只需要选则这个了。 还是10/100M的以太网设备熟悉,内容虽然多,一眼就可以看到我所用的RealTeckRTL-8139PCIFastEthernetAdaptersupport,为了免得麻烦,编译到内核里面好了,不选M了,选Y。 耐心点,一般说来你都能找到自己用的网卡。 如果没有,你只好自己到厂商那里去要驱动了。 16.AmateurRadiosupport 又一个不懂的,应该是配置业余无线广播的吧,没有,不要了。 17.IrDA(infrared)support 这个要红外支持,免了。 18.ISDNsubsystem 如果你使用ISDN上网,这个就必不可少了。 自己看着办好了。 19.OldCD-ROMdrivers(notSCSI、notIDE) 做的可真周到,原来那些非SCSI/IDE口的光驱谁还在用啊,自己选吧,反正我是用的IDE的CD-ROM,不选这个。 20.Characterdevices 字符设备。 这个内容又太多了,先使用缺省设置,需要的话自己就修改。 把大类介绍一下吧: I2Csupport: I2C是Philips极力推动的微控制应用中使用的低速串行总线协议。 如果你要选择下面的VideoForLinux,该项必选。 Mice: 鼠标。 现在可以支持总线、串口、PS/2、C&T82C710mouseport、PC110digitizerpad,自己根据需要选择。 Joysticks: 手柄。 即使在Linux下把手柄驱动起来意义也不是太大,游戏太少了。 WatchdogCards: 虽然称为Cards,这个可以用纯软件来实现,当然也有硬件的。 如果你把这个选中,那么就会在你的/dev下创建一个名为watchdog的文件,它可以记录你的系统的运行情况,一直到系统重新启动的1分钟左右。 有了这个文件,你就可以恢复系统到重启前的状态了。 VideoForLinux: 支持有关的音频/视频卡。 Ftape,thefloppytapedevicedriver: PCMCIAcharacterdevicesupport: 21.Filesystems 文件系统。 内容又太多了,老法子,在缺省选项的基础上进行修改。 介绍以下几项: Quotasupport: Quota可以限制每个用户可以使用的硬盘空间的上限,在多用户共同使用一台主机的情况中十分有效。 DOSFATfssupport: DOSFAT文件格式的支持,可以支持FAT16、FAT32。 ISO9660CD-ROMfilesystemsupport: 光盘使用的就是ISO9660的文件格式。 NTFSfilesystemsupport: ntfs是NT使用的文件格式。 /procfilesystemsupport: /proc文件系统是Linux提供给用户和系统进行交互的通道,建议选上,否则
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 编译 安装 内核
![提示](https://static.bdocx.com/images/bang_tan.gif)