admin管理员组

文章数量:1532055

2024年3月3日发(作者:)

青 岛 农 业 大 学

理学与信息科学学院

Linux课程实验报告

设 计 题 目 Linux内核编译

学生专业班级 通信工程10级1班

学生姓名(学号)

完 成 时 间 2012-11-8

2012 年 11 月 15 日

内核编译

一、内核编译的原因及好处

内核是一个操作系统的核心,负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。通常,更新的内核支持更多的硬件,具备更好的进程管理能力,运行速度更快、 更稳定,并且会修复老版本中发现的许多漏洞等。经常性地选择升级更新的系统内核,是Linux用户的必要操作内容。

编译内核的好处:

1。最优化服务器

2。出于安全需禁止某些默认功能

3。添加REDHAT LINUX默认未做选择的功能

4。需要更改无法用/proc/sys来变更的核心运行参数

5.更好地匹配计算机上的硬件特质

二、内核的编译模式

内核编译模式可以分为编译到内核和编译成模块两种模式。要增加对某部分功能的支持,例如网络等,可以把相应部分编译到内核中(build-in),也可以把该部分编译成模块(module)动态调用。如果编译到内核中,在内核启动时就可以自动支持相应部分的功能,其优点是方便、速度快,机器启动即可使用这部分功能;其缺点是使内核变得庞大起来,无论是否需要这部分功能,它都会存在。建议将经常使用的部分直接编译到内核中,如网卡。如果编译成模块,则生成对应的.o文件,使用时可以动态加载,优点是不会使内核过分庞大,缺点是必须得由用户自己来调用这些模块。

三、内核的编译过程

1.下载新内核

在/pub/linux/kernel可以下载Linux的最新内核代码。内核的源代码按内核版本(v2.4、v2.5等)组织到多个不同的目录中。在每个目录中,文件被冠以“”和

“2”等,这些就是Linux内核的源代码。同时存在一些类似“”和“2”的文件,这是用来更新前面完整的内核源代码的补丁包。

2.内核解包

编译内核前,应对下载的内核文件进行解包,操作方法如下。

(1)用以下命令将当前目录改到/usr/src下:

cd /usr/src

(2)如果/usr/src目录下存在一个“linux”的目录,应将其改名为“”;如果不存在,则直接执行以下命令:

tar xzvf /root/

(3)执行该命令后,内核源代码被释放到一个新的“linux-2.4.20”目录下。

注意:目录名可能因版本的不同而有所区别。

为方便起见,将该目录名字改为“linux”,操作命令如下:

mv linux-2.4.20 linux

3.配置内核

Linux提供多种配置内核的方法,可以根据需要与爱好使用下面命令中的一个。

make config命令:基于文本配置界面的配置命令。

make menuconfig命令:基于文本菜单配置界面的配置命令。

make xconfig命令:基于图形窗口模式配置界面的配置命令。

本实验以基于图形窗口模式配置界面的配置命令为例配置内核,具体操作步骤如下。

(1)用以下命令将当前目录改到解包文件目录“/usr/src/linux”下:

cd /usr/src/linux

(2)用以下配置命令打开配置对话框:

make xconfig

执行命令后,弹出配置对话框,如图10-1所示。

由图10-1可见,配置内核的选项很多。选择每一项配置时,可以有三个选择按钮,如图10-2所示。

每个按钮的意义如下。

y:将该功能编译进内核。

n:不将该功能编译进内核。

m:将该功能编译成可以在需要时动态插入到内核中的模块。

单击“Main Menu”按钮,返回主配置窗口;单击“Next”按钮,配置下一个配置项;单击“Prev”按钮,配置上一个配置项。

在编译内核的过程中,大部分选项可以使用缺省值,只有部分要根据用户的需要进行更改。修改的原则是将与内核其他部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗内存,简化该功

能相应的环境改变时对内核的影响;不需要的功能不选;与内核关系紧密而且经常使用的部分功能代码则直接编译到内核中。

(3)配置内核后,单击“Save and Exit”按钮存盘退出配置窗口。

4.生成依赖(dependency)信息,清除旧的编译结果

配置内核后,返回命令窗口。为确保关键文件,在正确的位置输入以下命令:

make dep

为确保所有有关文件都处于最新版本状态,需要输入命令:

make clean

检查是否生成依赖(dependency)信息并清除旧的编译结果。

5.编译二进制内核映像文件

在“/usr/src/linux”目录下建立二进制的内核映像文件,命令如下:

make bzImage (输入命令时请注意区分大小写)

编译过程持续几分钟。编译结束后,在/usr/src/linux/arch/i386/boot目录下可找到名为“bzImage”的映像文件,即新内核的映像文件。

6.编译模块

编译二进制内核映像文件后,需要进行模块的编译,命令如下:

make modules

make modules_install

模块被编译且安装到 /usr/lib/<内核版本号> 目录下。至此,内核被编译完成,内核模块也编译完成并被安装。

7.配置启动管理器

为了操作方便,先将编译好的新内核的映像文件(bzImage)复制到系统目录/boot下。

命令如下:

cp /usr/src/linux/arch/i386/boot/bzImage /boot

如果系统是用LILO启动,则修改/etc/。

文件内容类似以下文本文件:

prompt

timeout=50

default=linux

boot=/dev/had

map=/boot/boot.b

message=/boot/message

linear

image=/boot/bzImage

label=newlinux

image=/boot/vmlinuz-2.4.7-10

label=linux

read-only

root=/dev/hda2

其中,

 image=/boot/bzImage:指定内核的映像文件,即告诉LILO应该到何处找到新内核。

 label=newlinux:设置启动菜单选项的标签,即让启动的时候多一项“newlinux”的选择菜单。

修改完成后,保存并退出。

运行命令:lilo

更新系统引导映象,使的修改起作用。然后重新启动计算机,整个内核升级完成。

如果用Grub启动管理器,则添加以下几项:

title newlinux '设置启动菜单选项的标签,即让启动的时候多一项“newlinux”的选择菜单

root (hd0,0)

kernel /boot/bzImage ro root=/dev/hda2

注意:第3句kernel /boot/bzImage ro root=/dev/hda2中,kernel后的/boot/bzImage必须指定新内核的路径和文件名。

Grub不需再次调用命令而自动生效,重启以后即可用新内核了。

四、实验心得体会

在第一次编译内核时失败了,经过大量的查错处理,原因找到了,原来是没有把rexxxx的这个文件系统编进内核导致的。后续的工作还出现了不少问题,经过大量的实验以及查资料还用网上的办法在make modules_install之后运行了make install,这个好,连什么内核都放进/boot了,还有也自动改好了。

重启进入新内核,可以顺利引导,但是全是字符模式,登录运行startx,但是没有成功,看输出,原来是nv驱动没有编入内核。想想问题不大,重启进入老内核,但是奇怪的事情发生了,明明引导的是老内核,但是到最后还是welcome

xxxx xxxx kernel-2.6.15,真是晕到家了,把~拷贝回去,还是一样。就这样折腾了半个多小时还没搞定。

最后证明我还是比较聪明的。看看新内核的引导参数,是vmlinuz+版本号,那我在老内核上也加上版本号,用vim修改后重启进入老内核,成功!!

总结了一下,感觉问题出在那个make install上,它不仅拷贝了新内核到/boo里面,同时修改,关键还有为新内核做了个链接——vmlinuz,而老内核的引导默认就是vmlinuz(当时的vmlinuz是老内核的链接,而运行了make

install后,这个链接链接到新内核上去了),从而导致无论如何选择引导选项都会到新内核上去。

可喜的是,我从设置内核到完成,总共才用了45分钟,看来64位机还是很强大的。

反正这个问题也告一段落,总算虚惊一场,通过这次试验使我学到了许多课堂上没有学到知识,开拓了我的眼见,锻炼了我的动手能力。

本文标签: 内核编译配置文件命令