`

一次性成功编译Linux内核!

阅读更多

一次即大功告成 Linux内核升级全过程 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1583735



今天终于成功的编译了linux-2.6.18的内核,是在redhat9 2.4.20-8的内核基础上进行的!


作者:飘扬 来源:飞飞博客 发布时间:2007.04.18
 
由于开发环境需要在linux-2.6内核上进行,于是准备对我的虚拟机上的Linux系统升级。没想到这一弄就花了两天时间(反复装系统,辛苦啊~~),总算把Linux系统从2.4.20-8内核成功升级到了2.6.18内核。


网上虽然有很多介绍Linux内核升级的文章,不过要么过时,下载链接失效;要么表达不清,不知所云;更可气的是很多文章在转载过程中命令行都有错误。刚开始我就是在这些“攻略”的指点下来升级的,以致于浪费了很多时间。


现在,费尽周折,升级成功,心情很爽,趁性也来写个“升级攻略”吧!于是特意又在虚拟机上重新安装一个Linux系统,再来一次完美的升级,边升级边记录这些步骤,写成一篇Linux内核升级记实录(可不是回忆录啊!),和大家一起分享~~!


首先说明,下面带#号的行都是要输入的命令行,且本文提到的所有命令行都在终端里输入。接下来,让我们一起开始精彩的Linux内核升级之旅吧!


一、准备工作


启动Linux系统,并用根用户登录,进入终端模式下。


1、查看Linux内核版本

# uname -a

如果屏幕显示的是2.6.x,说明你的已经是2.6的内核,也用不着看下文了,该干什么干什么去吧!~~~如果显示的是2.4.x,那恭喜你,闯关通过,赶快进行下一步。


2、下载2.6内核源码

下载地址:http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2


3、下载内核升级工具

(1)下载module-init-tools-3.2.tar.bz2

http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/module-init-tools-3.2.tar.bz2

(2)下载mkinitrd-4.1.18-2.i386.rpm

http://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/mkinitrd-4.1.18-2.i386.rpm

(3)下载lvm2-2.00.25-1.01.i386.rpm

http://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/lvm2-2.00.25-1.01.i386.rpm

(4)下载device-mapper-1.00.19-2.i386.rpm

http://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/device-mapper-1.00.19-2.i386.rpm


(2.6.18内核和这4个升级工具我都有备份,如果以上下载地址失效,请留下你的邮箱,我给你发过去)
http://www.fly2.cn/guestbook
二、配置工作


好啦,2.6内核和4个升级工具都下载完了(少一个也不行,如果没有下载齐全,请不要尝试下面的步骤,升级是不会成功的),下面回到Linux系统中开始配置工作吧。


4、将下载好的内核和4个升级工具都拷贝到/usr/src文件夹下。怎么拷贝就不用我教了吧~~~~不会拷贝的去撞墙吧!~~呵呵!


5、拷贝完毕,开始解压新内核,具体操作请依次执行以下命令:

# cd /usr/src (进入到/usr/src目录下,如果已经在/usr/src目录下,可不执行该命令)

# rm –rf linux (删除linux文件夹。值得一提的是,如果内核先前从未编译过,则没有这个文件夹,此命令行可略过)

# tar jvxf linux-2.6.18.tar.bz2 (解压新内核)

# ln -s linux-2.6.18 linux (重新生成linux文件夹)


6、安装module-init-tools工具包

在/usr/src目录下,依次执行下列命令:(ZhiQiao:最好先看下README)

# tar jvxf module-init-tools-3.2.tar.bz2 (解压module-init-tools)

# cd module-init-tools-3.2 (由/usr/src目录进入module-init-tools目录下)

#./configure --prefix=/ (--prefix=/若重新配置文件把文件放到指定的目录下)

# make moveold

# make all install

#./generate-modprobe.conf /etc/modprobe.conf


7、安装另外三个升级工具

回到/usr/src目录下,依次执行下列3个命令来安装另外三个升级工具:

# rpm -ivh --nodeps mkinitrd-4.1.18-2.i386.rpm (注意,这里一定要加入--nodeps参数,下同) (ZhiQiao:nodeps不验证组件的关联性)

# rpm -ivh --nodeps lvm2-2.00.25-1.01.i386.rpm

# rpm -ivh --nodeps device-mapper-1.00.19-2.i386.rpm


如果不更新以上几个升级包,在后面编译内核时会提示以下错误:

mkinitrd failed

make[1]: *** [install] Error 1

make: *** [install] Error 2


8、配置内核选项。有点繁琐,~~希望一次成功哦~~。

# cd linux-2.6.18 (进入到/usr/src/linux-2.6.18目录下)

# make mrproper (该命令可确保源代码目录下没有不正确的.o文件)

# make menuconfig (配置内核各选项)


此时会出现一个图形界面,列出了所有的内核配置选项,有的选项下还有子选项,你可以用方向键来选择,用Y键来确定。经过我多次试验,大多数选项默认就行,以下几个选项必须选择(请认真核对下面每一个选项,否则编译很有可能前功尽弃):


(1)Loadable Module support选项中,一定要选上“Module unloading”和“Automatic kernel module loading”这两项;

(2)Device Drivers--->Block Devices中一定要选上Loopback device support;

Device Drivers--->Multi-device support(RAID and LVM)”处要选上“device mapper support”;

Device Drivers--->Graphics support”, 一定要选上” Support for frame buffer devices”;

Device Drivers --->;USB support --->选上”USB Mass Storage support”(如果是在实环境中,想要更多USB支持,就全选吧。我的是在虚拟机中,用不着了)

Device Drivers --->; Network device support --->;Ethernet (10 or 100Mbit) --->; <*>; AMD PCnet32 PCI support

(3) File system--->(以下9个选项是关于ext2和ext3文件系统配置,全部选上)

Second extended fs support

Ext2 extended attributes

Ext2 POSIX Access Control Lists

Ext2 Security Labels

Ext3 journalling file system support

Ext3 extended attributes

Ext3 POSIX Access Control Lists

Ext3 Security Labels

JBB (ext3) debugging support

File system--->DOS/FAT/NT Filesystems --->选上“ NTFS file system support”;

File Systems --> Miscellaneous filesystems ---><*> Compressed ROM file system support (cramfs)


注意:

ext2和ext3文件系统配置很重要,也是必需的,如果对Ext3、Ext2文件的支持直接编译进内核,在你reboot时机器就会当掉,出现如下错误信息:

kernel panic : no init found ,try passing init = option to kernel.....

或者是:

VFS:Cannot open root device "hdxy" or unknow-block(0,0)

Please append a correct "root=" boot option

kernel panic:VFS:Unable to mount root fs on unknown-block(0,0)

或者是:

mount: error 19 mounting ext3

pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed: 2

umount /initrd/proc fail: 2

Freeing unused kernel memory: 244k freed

Kernel panic – not syncing: No init found. Try passing init = option to kernel

(我的机器就是在重启之后出现第三种错误,进不去系统,郁闷死,只好重装了~~~)


(4)如果你在vmware下重新编译内核,硬盘用的是scsi的,以下选项必选:

Device Drivers --->SCSI device support ---><*>SCSI disk support

Device Drivers--->SCSI device support--->SCSI low-level drivers--->;<*>; BusLogic SCSI support


三、编译工作


OK,繁杂的配置工作完成了,至此,编译前的准备工作都做好了!

9、开始编译啦……:

在/usr/src/linux-2.6.18目录下,执行以下命令即可编译。编译需要一段时间,给自己倒杯茶耐心等候吧!

# make dep (建立编译时所需的从属文件。注意:如果内核从未编译过,此步可跳过)

# make clean (清除内核编译的目标文件)

# make bzImage (注意大小写。这一步才真正编译内核)(ZhiQiao:这步大约花了我10分钟时间,配置:512M内存,1.8G CPU)

内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。如果用make zImage编译,内核很大的话,系统会提示你使用make bzImage命令来编译,所以我直接用make bzImage来编译。

# make modules (编译可加载模块) (ZhiQiao:这步大约花了20分钟时间)

# make modules_install (安装可加载模块)

安装成功后,系统会在/lib/modules目录下生成一个2.6.18子目录,里面存放着新内核的所有可加载模块。

# make install (安装新内核)


注意:make install的时候可能会出现如下错误信息:

No module BusLogic found for kernel 2.6。18

mkinitrd failed

此问题一般只出现在SCSI硬盘+VMWARE+REDHAT架构中,因为BusLogic被编译进了内核而不是一个module的形式(2.4内核的Buslogic模块即使静态编译进内核也不行)。解决方式是直接将可以BusLogic.o文件复制过去:

# cp /usr/src/linux-2.6.18/drivers/scsi/BusLogic.o /lib/modules/2.6.18/kernel/drivers/scsi

不过别忘记,复制过后再执行一下make install。

(如果make menuconfig时,把BusLogic模块选成M--Module模式--就不会出现这个提示。)
 
ZhiQiao:这里我是按上面所说的方法做的结果在启动时出现关于BusLogic的错误,后来我将虚拟机的硬盘换成了IDE的,成功升级!Vmware默认的硬盘是SCSI的,有很多人不知道怎么改成IDE的,具体方法可以参考四、启动新内核

10、将新内核和System.map文件拷贝到/boot目录下,依次执行以下命令:

# cp /usr/src/linux-2.6.18/arch/i386/boot/bzImage /boot/vmlinuz-2.6.18

# cp /usr/src/linux-2.6.18/System.map /boot/System.map-2.6.18

# cd /boot (进入boot目录)

# rm –rf System.map (删除原来的连接)

# ln -s System.map-2.6.18 System.map (重新建立连接)


11、修改Grub启动管理器

如果没有错误的话, 下面开始修改grub配置文件(不要告诉我你用的lilo)

在/boot目录下,执行以下命令:

# new-kernel-pkg --mkinitrd --depmod --install 2.6.18 (这时候你的/boot下生成一个initrd-2.4.12.img,并且你的grub.conf也作了相应更改)


# df (查看根目录在那个分区,下一步要用到。注意,这里根分区不时boot的那个50M的分区,而一般是你最大的那个分区,也就是”/”,千万不要搞错哦。我的为 /dev/hda2)


# vi grub/grub.conf (ZhiQiao:此处应该为/grub/grub.conf)

进入grub.conf文件,找到如下信息:

default=1

timeout=10

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

title Red Hat Linux (2.6.18)

root (hd0,0)

kernel /vmlinuz-2.6.18 ro root= LABEL=/

initrd /initrd-2.6.18.img

做两处修改:

(1) 将default=1改为default=0(不改的话,重启之后默认进入2.4内核)

(2) 将kernel行的“LABEL=/”换成根目录所在的分区(上一步查看的就是)

此步很重要,修改错误将会可能导致进不去系统,我把我修改后的grub.conf文件列出来,不明之处,可以对照修改:

default=0

timeout=10

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

title Red Hat Linux (2.6.18)

root (hd0,0)

kernel /vmlinuz-2.6.18 ro root=/dev/hda2

initrd /initrd-2.6.18.img

title Red Hat Linux (2.4.20-8)

root (hd0,0)

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

initrd /initrd-2.4.20-8.img


12,OK,大功告成!赶快重启,看看升级后的2.6内核吧!

13,下一步该做什么呢?我的qq:147863130


我编译以后成功运行看看我的版本号!下图

redhat9上面的linux-2.6.18的内核
 



 



坏男孩 2007-04-27 12:46 发表评论
分享到:
评论
1 楼 dogstar 2008-06-17  
what is ZhiQiao ?

相关推荐

    linux内核编译实验报告

    - **编译Linux内核**: 执行`make bzImage`命令编译内核映像文件`bzImage`,并使用`make modules`和`make modules_install`命令编译并安装内核模块。 - **修改Grub配置**: 修改Grub配置文件以支持新编译的内核,确保...

    自己动手编译Linux内核

    自己动手编译Linux内核是一项对系统有深入了解的高级任务,它可以帮助你定制内核以适应特定的需求,去除不必要的功能,提升系统效率,或者添加新的硬件支持。以下是一些关于如何编译Linux内核的关键步骤和注意事项:...

    Linux内核编译命令

    7. **make all**: 等同于执行`make vmlinux + make modules + make bzImage`,即一次性完成内核、模块和压缩内核文件的编译。 #### 三、配置管理命令 1. **make oldconfig**: 在现有配置文件的基础上生成一个新的...

    linux内核如何编译与升级

    重新编译Linux内核可能出于多种原因,包括但不限于支持新硬件设备、添加或优化特定功能、修复已知的漏洞或提高系统性能。例如,如果你安装了一个新硬件但现有内核不支持,升级内核或编译定制内核可以解决这个问题。...

    linux内核编译笔记

    在开始编译Linux内核之前,首先需要确保你的开发环境满足以下条件: 1. **下载内核源码**:可以从官方网址(`http://www.kernel.org/pub/linux/kernel/v2.6/`)下载所需的内核版本。例如,如果选择的是2.6.22版本,...

    linux内核下载,【转载】菜鸟编译Linux内核[借鉴].pdf

    编译Linux内核是一项基础且重要的任务,尤其对于开发者和系统管理员来说,它允许定制内核以满足特定需求,优化性能,或者支持新的硬件设备。 在本文中,我们将探讨如何作为菜鸟编译Linux内核,主要步骤如下: 1. *...

    编译你自己的Linux内核(PDF)

    在着手编译Linux内核之前,必须具备一定的计算机和Linux系统知识基础。这不仅涉及对硬件架构的理解,还需要熟悉Linux环境下的软件构建流程。初学者往往会在复杂的编译选项和配置参数面前感到困惑,因此,深入学习和...

    深入Linux内核.pdf

    深入Linux内核.pdf 深入Linux内核.pdf是关于Linux操作系统内核的详细介绍,涵盖了内核的概念、版本号、配置和创建、模块支持等方面的知识点。 Linux操作系统是目前最红火的操作系统,尤其对 于喜欢“DIY”的我们...

    Linux内核设计与实现-第三版

    Linux内核版本的管理遵循特定的命名规则,如2.6.34版本号中的主版本号、次版本号和修订号,分别代表内核的接口稳定性和开发状态。本书介绍了如何跟踪和使用Linux内核的各个版本。 ### Linux内核的实时性 实时操作...

    linux内核图解 linux内核图解

    为了适应特定的硬件需求或优化性能,用户可以自定义编译Linux内核。这包括选择要编入内核的模块、调整内核配置、优化编译选项等。通过`make menuconfig`或`make xconfig`命令,用户可以在图形界面下配置内核,然后...

    linux内核编译详解

    ### Linux内核编译详解:核心知识概览 #### 一、内核的重要性与特性 内核作为操作系统的心脏,负责管理系统的关键资源,包括进程、内存、设备驱动、文件和网络系统,直接决定了系统的整体性能和稳定性。Linux的...

    linux 内核方面的几本资料

    - **Linux_ںԴ龰_ë².pdf**:这份文档可能是关于Linux内核源代码的二次开发或定制指南,适合希望对Linux内核进行修改和扩展的开发者参考。 ### 3. 学习Linux内核的方法 - **阅读官方文档**:Linux内核官方文档是...

    linux内核知识系列:环境搭建

    在深入探讨Linux内核知识之前,首先我们要理解的是,环境搭建是任何开发工作的基石,特别是对于Linux内核这样的复杂系统。...记住,这个过程本身就是学习的一部分,不要怕犯错误,因为每一次失败都将带来新的理解。

    linux内核入门书籍

    Linux内核的版本号通常由三个数字组成,如2.6.19,其中第一个数字代表主版本号,第二个数字表示次版本号,第三个数字是修订版本号。 #### 编译配置 Linux内核提供了多种编译配置工具,如`make config`、`make ...

    Linux内核PPT

    在嵌入式领域,Linux内核因其开源、稳定和可定制性而广受欢迎,被广泛应用于各种设备,从手机到服务器,甚至航天器。 首先,PPT可能涵盖了Linux内核的历史。Linux是由林纳斯·托瓦兹在1991年创建的一个自由软件项目...

    Linux内核编译

    **知识点详解:Linux内核编译全过程** 在深入解析Linux内核编译的过程中,我们将从...通过本次实验,不仅增强了学生对Linux内核结构的认识,还培养了他们独立解决问题的能力,是一次理论与实践紧密结合的宝贵经历。

    Linux内核2.6完全配置详解

    总的来说,《Linux内核2.6完全配置详解》是一份详尽的内核配置指南,尤其对于那些希望深入了解Linux内核配置的用户非常有用。通过这份文档,用户可以更好地理解如何根据自己的系统环境和需求来定制一个高效的内核。...

Global site tag (gtag.js) - Google Analytics