Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103593301
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: LINUX

2008-04-22 13:05:59

作者:成海峰     出自:
首先就是去网站上去下载最新的内核压缩包。我这里就Linux-2.6.24.tar.gz来进行说明。我下载的就是这个压缩包。在这里强调的是,当你把这个压缩包下载下来的时候要放到/usr/src下面。一般情况下下面还有两个文件夹,一个是kernels,另外一个就是redhat。其中kernels里面就是你当前的系统的内核。

下载完后你就可以进行命令操作了啊!打开终端。前提保证你是root用户。

cp Linux-2.6.24.tar.gz /usr/src 回车。这时候这个软件包就被放到了/usr/src目录下面了。下面的操作很简单,就是对这个压缩包进行解压缩。

[root@localhost src]#tar –zxvf Linux-2.6.24.tar.gz 回车,然后就解压缩为一个文件夹 Linux-2.6.24

[root@ localhost src]#cd Linux-2.6.24 此时你的当前目录就是

[root@ localhost src]#pwd /usr/src/Linux-2.6.24/此时进行命令的操作。这个时候一定要注意编译的过程。

[root@ localhost Linux-2.6.24]#make mrproper 这里就要解释一下这个命令的作用了。这个目的是清除原先此目录下残留的.config和.o(object文件),如果我们是刚下载的源码,那么这一步您就可以省了,但是如果您已经编译过多次内核的话,这一步可是一定要的哦,不然以后出现很多小问题。执行这一步后,然后就是:

[root@ localhost Linux-2.6.24]#make menuconfig或make config或make xconfig 在这里我选择的是make menuconfig。来解释一下这个命令的作用:主要就是用这个menuconfig来进行内核的配置,他会出现一个可视化的界面,然后你就可以在这个界面上进行内核的配置。

#make config(基于文本的最为传统的配置界面,不推荐使用)
#make menuconfig(基于文本选单的配置界面,字符终端下推荐使用)
#make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用)
#make oldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)

在这个make menuconfig中,有的让您选择*],有的让您选择[M],有的让你选择[],*表示选中直接加载进kernel,而M则表示会在后面的make modules中编译成modules,让您随时可以通过insmod和modprobe调入内核。其中一定要注意的就是:

1)文件系统

请务必要选中ext3文件系统,

File systems--->

*] Ext3 journalling file system support

*] Ext3 Security Labels

*] JBD (ext3) debugging support

以上三项一定要选上,而且要内建(即标*). 这个非常重要,在配置完后一定要检查一下.config文件有没有"CONFIG_EXT3_FS=y"这一项. 如果不是"CONFIG_EXT3_FS=y"而是"CONFIG_EXT3_FS=m",你在运行内核时就会遇上以下错误: pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed

2)网卡驱动

请务必把自己网卡对应的驱动编译进内核,比较普遍的网卡是realtek 8139,以下就是这种网卡的配置,以供参考

Device Drivers--->

network device support-->

Ethernet (10 or 100Mbit) --->

<*> RealTek RTL-8139 C+ PCI Fast Ethernet Adapter support (EXPERIMENTAL)

<*> RealTek RTL-8139 PCI Fast Ethernet Adapter support

3)声卡驱动

也要选择自己声卡对应的驱动编译进内核,比较普遍的声卡是i810_audio,以下就是这种声卡的配置,以供参考

Device Drivers --->

Sound --->

<*> Sound card support

Advanced Linux Sound Architecture --->

<*> Advanced Linux Sound Architecture

<*> Sequencer support

< > Sequencer dummy client

<*> OSS Mixer API

<*> OSS PCM (digital audio) API*] OSS Sequencer API

<*> RTC Timer support

PCI devices --->

<*> Intel i8x0/MX440, SiS 7012; Ali 5455; NForce Audio; AMD768/8111

Open Sound System --->

< > Open Sound System (DEPRECATED)

其中还有比较多的配置文件的讲解,你可以到这里进行查阅:配置文件详解里面有全部的配置文件的解释。你可以来这里进行你要修改配置文件的操作。

如果以上三个步骤你都做好了,那么你的新的内核就不会出现问题了啊。下面我们要进行时间最长的几步操作了。

[root@ localhost Linux-2.6.24]#make clean 清除一些不必要的文件,那些乱七八糟的东东是可能会导致您在编译过程中出现错误的。这一步其实很重要的。

[root@ localhost Linux-2.6.24]# make bzImage 生成新的内核核心,实现完全编译内核。在这里有一个需要注意的地方就是make zImage/make bzImage这两个不同之处。有的时候也会用到make zImage。这里需要说明的就是这两个命令都是来实现完全编译内核,而且二者生成的内核都是使用gzip压缩的。他们的主要区别就在使用make bzImage可以生成大一点的内核。使用make zImage在进行版本2.4.0的内核时候容易出现system too big的错误。编译完成以后进行下一步:

[root@ localhost Linux-2.6.24]# #make modules这个步骤就是把您在make menuconfig里边所选择为M的配置,全部编译成模块并放在/usr/src/linux-2.6.24/下。它用来生成所有的kernel module。这个步骤时间比较长。当这个执行完了可以进行下面的执行:

[root@ localhost Linux-2.6.24]# make modules_install 这个的主要作用就是安装module的步骤。最后一步:

[root@ localhost Linux-2.6.24]# make install 这个命令就相当于一个自动化的过程,因为其他配置它都会帮您做好的。用这个命令可以很快做好新系统了,而且可以重新从新内核启动。

最后就是对这个内核编译中需要注意的问题进行说明。在这里最重要的地方就是make menuconfig中,这里你需要对你的Linux系统进行详细的配置,需要你对这个配置的文件目录有个很深刻的了解。当然你也可以对你的这个Linux系统进行个性话的配置。这就需要你对配置过程的了解和掌握。

然后就是在重新启动Linux新内核的时候需要注意的:/boot/grub/grub.conf的内容。这里你可以参照这个内容来进行修改。

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE: You have a /boot partition. This means that

# all kernel and initrd paths are relative to /boot/, eg.

# root (hd0,0)

# kernel /vmlinuz-version ro root=/dev/hdc3

# initrd /initrd-version.img

#boot=/dev/hdc

default=1

timeout=10

splashimage=(hd0,0)/grub/splash.xpm.gz

title Red Hat Linux (2.6.7)

root (hd0,0)

kernel /vmlinuz-2.6.7 ro root=LABEL=/

initrd /initrd-2.6.7.img

title Red Hat Linux

root (hd0,0)

kernel /vmlinuz-2.4.20-8 ro root=LABEL=/

initrd /initrd-2.4.20-8.img

对了还有最后一条就是出自我自己电脑上的问题。如果你重新启动的时候出现了如下的错误:Enforcing mode requested but no policy loaded. Halting now.

kernel panic - not syncing: Attempted to kill init!

那么这个时候你就可以想一下如何来解决这个问题了。这里我是这么来解决这个问题的。

1、在grub.conf里把 kernel /vmlinuz-2.6.19 ro root=LABEL=/ rhgb quiet 变为: kernel /vmlinuz-2.6.19 ro root=LABEL=/ enforcing=0 rhgb quiet。这一步可以不做。但是你要注意下。

2、修改/etc/selinux/config配置文件,只要把SELINUX的值改成disabled。

分析一下原因就是:selinux的问题。

enforcing参数是在启动内核时传递给selinux的内核参数,它用来决定你系统的内核运行于强制(enforcing )模式还是自由(permissive)模式。

在自由模式下SELinux只是记录他该做什么,而事实上并不做任何动作。在强制模式下SElinux会来真格的。如果你的策略有错误,在强制模式下系统可能会阻止你登陆!所以正常情况下你应改在启动时传 enforcing=1 给内核,当你的SELinux策略有问题时,你可以临时传enforcing=0给内核来查错。在/etc/selinux/config这个init的配置文件中相应的有一个选项,通过设置它,也可以使系统进入自由模式。

好了现在你可以重新启动你的电脑了啊。这个时候你就会发现你的Linux系统会有两个内核。然后选中新的内核启动来看一下吧。


阅读(272) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~