【ACCESS精品源码栏目提醒】:网学会员ACCESS精品源码为您提供【精品】linux内核升级[1] - 其它资料参考,解决您在【精品】linux内核升级[1] - 其它资料学习中工作中的难题,参考学习。
序 言由于开发环境需要在 linux-2.6 内核上进行,于是准备对我的虚拟机上的 Linux 系统升级。
没想到这一弄就花了两天时间反复装系统,辛苦啊,总算把 Linux 系统从 2.4.20-8 内核成功升级到了 2.6.18 内核。
网上虽然有很多介绍 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.bz23、下载内核升级工具1下载 module-init-tools-3.2.tar.bz2http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/module-init-tools-3.2.tar.bz22下载 mkinitrd-4.1.18-2.i386.rpmhttp://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/mkinitrd-4.1.18-2.i386.rpm3下载 lvm2-2.00.25-1.01.i386.rpmhttp://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/lvm2-2.00.25-1.01.i386.rpm4下载 device-mapper-1.00.19-2.i386.rpmhttp://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/device-mapper-1.00.19-2.i386.rpm2.6.18 内 核 和 这 4 个 升 级 工 具 我 都 有 备 份 , 如 果 以 上 下 载 地 址 失 效 , 请 到http://www.piaoyang.org/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 目录下,依次执行下列命令: 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/ make moveold make all install./generate-modprobe.conf /etc/modprobe.conf7、安装另外三个升级工具回到/usr/src 目录下,依次执行下列 3 个命令来安装另外三个升级工具: rpm -ivh --nodeps mkinitrd-4.1.18-2.i386.rpm 注意,这里一定要加入--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 make1: install Error 1 make: install Error 28、配置内核选项。
有点繁琐,希望一次成功哦。
cd linux-2.6.18 进入到/usr/src/linux-2.6.18 目录下 make mrproper 该命令可确保源代码目录下没有不正确的.o 文件 make menuconfig 配置内核各选项此时会出现一个图形界面,列出了所有的内核配置选项,有的选项下还有子选项,你可以用方向键来选择,用 Y 键来确定。
经过我多次试验,大多数选项默认就行,以下几个选项必须选择请认真核对下面每一个选项,否则编译很有可能前功尽弃:1Loadable Module support 选项中,选上“Module unloading”和“Automatic kernel moduleloading”这两项; ;2Device Drivers---gtBlock Devices 中选上“Loopback device support” Device Drivers---gtMulti-device supportRAID and LVM 处 要 选 上 “ device mapper ;support” Device Drivers---gtGraphics support,一定要选上“ Support for frame buffer devices”; Device Drivers ---gtUSB support ---gt选上“USB Mass Storage support”如果是在实环境中,想要更多 USB 支持,就全选吧。
我的是在虚拟机中,用不着了 Device Drivers ---gtNetwork device support ---gtEthernet 10 or 100Mbit ---gtltgtAMD PCnet32 PCI support3File system---gt以下 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---gtDOS/FAT/NT Filesystems ; ---gt选上“NTFS file system support”注意: ext2 和 ext3 文件系统配置很重要,也是必需的,如果对 Ext3、Ext2 文件的支持直接编译进内核,在你 reboot 时机器就会当掉,出现如下错误信息: kernel panic : no init found try passing init option to kernel.....或者是: VFS:Cannot open root device quothdxyquot or unknow-block00 Please append a correct quotrootquot boot option kernel panic:VFS:Unable to mount root fs on unknown-block00或者是: 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我的机器就是在重启之后出现第三种错误,进不去系统,郁闷死,只好重装了如果依照本文做完所有步骤,当你重启 Linux 系统后,若不幸进不去 2.6.18 内核,你会发现你的出错信息就是上面三种了哈!4如果你在 vmware 下编译内核,硬盘用的是 scsi 的,以下三个选项必选: Device Drivers ---gtltgtSCSI device support 此项不选的话,下面两项就选择不上 Device Drivers ---gtltgtSCSI device support ---gtltgtSCSI disk support Device Drivers---gtlt8gtSCSI device support---gtSCSI low-level drivers---gtltgt BusLogicSCSI support三、编译工作OK,繁杂的配置工作完成了,至此,编译前的准备工作都做好了!9、开始编译啦……在/usr/src/linux-2.6.18 目录下,执行以下命令即可编译。
编译需要一段时间,给自己倒杯茶耐心等候吧! make dep 建立编译时所需的从属文件。
注意:如果内核从未编译过,此步可跳过 make clean 清除内核编译的目标文件。
注意:如果内核从未编译过,此步可跳过 make bzImage 注意大小写。
这一步才是真正编译内核 内核编译成功后,会在/usr/src/linux/arch/i386/boot 目录中生成一个新内核的映像文件bzImage。
如果用 make zImage 编译,内核很大的话,系统会提示你使用 make bzImage命令来编译,所以我直接用 make bzImage 来编译。
make modules 编译可加载模块 make modules_install 安装可加载模块 安装成功后,系统会在/lib/modules 目录下生成一个 2.6.18 子目录,里面存放着新内核的所有可加载模块。
make install 安装新内核注意: make install 的时候可能会出现如下错误信息: No module BusLogic found for kernel 2.4.12 mkinitrd failed此问题一般只出现在 SCSI 硬盘+VMWAREREDHAT 架构中,因为 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。
这一步若卡住了,下面的都无法进行,如果看本文档还是没有解决问题,就来我的网上留言本求助吧,进 http://www.piaoyang.org ,点“留言本”即可,我会及时看到你的求助信息的。
四、启动新内核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.18.img,并且你的 grub.conf 文件也作了相应更改 df 查看根目录在那个分区,下一步要用到。
注意,这里根分区不时 boot 的那个 50M 的 ,千万不要搞错哦。
我的为 /dev/hda2分区,而一般是你最大的那个分区,也就是“/” vi /grub/grub.conf进入 grub.conf 文件,找到如下信息:default1timeout10splashimagehd00/grub/splash.xpm.gztitle Red Hat Linux 2.6.18 root hd00 kernel /vmlinuz-2.6.18 ro root LABEL/ initrd /initrd-2.6.18.img做两处修改:1 将 default1 改为 default0不改的话也可以,只不过重启之后会默认进入 2.4 内核2 将 kernel 行的“LABEL/”换成根目录所在的分区上一步查看的就是此步很重要,修改错误将可能导致进不去系统,我把我修改后的 grub.conf 文件列出来,不明之处,可以对照修改:default0timeout10splashimagehd00/grub/splash.xpm.gztitle Red Hat Linux 2.6.18 root hd00 kernel /vmlinuz-2.6.18 ro root/dev/hda2 initrd /initrd-2.6.18.imgtitle Red Hat Linux 2.4.20-8 root hd00 kernel /vmlinuz-2.4.20-8 ro rootLABEL/ initrd /initrd-2.4.20-8.img12,OK,大功告成!赶快重启,看看升级后的 2.6 内核吧本 文 来 自 CSDN 博 客 , 转 载 请 标 明 出 处 :http://blog.csdn.net/flyfox315/archive/2007/01/31/1499054.aspx【Linux 内核配置及编译简介】1.为什么要编译 Linux 内核 众所周知Linux 是开放
源码的操作系统开放
源码软件带给我们这计算机水平相对落后的人群的最大好处就是可以快速学习世界高水平的程序体系结构及编程方法等等从而快速提高自身水平。
然而这本身,也使多数开放
源码软件在编码易用性、针对性方面比不上 Microsoft 等专业软件公司的产品。
使用开放
源码软件,多多少少都一些不太舒服的感觉。
这一点想必用过 Linux 较早期版本的朋友都有同感。
有时候还不仅是不舒服,由于软件开发者或版本的不同,我们无法保证所有的软件都能够简单地在不同的机器间移植,对于某些大型软件(如:ORACLE 8.0.5)尤其如此。
许多情况下,系统状态,尤其是内核状态,对程序的安装使用和性能有至关重要的影响和制约作用。
从另外的角度来讲,我们也可以为自己的计算机量身定制内核,这样就不会出现 Windows 98那样的大垃圾箱了。
2.了解 Linux 要编译 Linux 的内核,首先要对它有个大概的印象。
Linux 是 Unix 的仿制品,它支持多任务、虚拟存储器,多终端,虚拟文件系统等特性。
它最低可以运行在 386/486 的个人计算机上,其他一些体系结构的机器,如:SUN Sparc,M68000,DEC Alpha,PowerPC 上也逐渐有了适用的 Linux。
3.编译内核的准备工作1了解现有内核的版本号.这主要是为了确定一些机器的基本信息,不一定非这么做不可。
可以用如下的命令行: uname -aLinux lark 2.2.15 2 TUE DEC 26 10:55:20 CST 2000 i6862下载最新版本的 Linux 内核.目前国内教育网的 ftp 站点这方面的内容包括压缩的内核、补丁、编译器等都比 较 丰 富 , 更 新 也 较 快 , 如 : http://ftp.xjtu.edu.cn/ftp/pub/linux/kernel/ ,ftp://166.111.136.3/pub/linux/kernel,2.2.x 版本是比较稳定的,推荐使用。
3把打包的内核解开压缩的内核、补丁和解开的源代码总共要占 70M 左右的硬盘空间;用 root 登录,解开的源代码应该在/usr/src/linux2.2.15 下面:tar zxvf linux-2.2.15.tar.gz或者gzip t linux-2.2.15.tar.gztar x linux-2.2.15.tar如果嫌命令行太麻烦的话也可以在某台 windows 的机器上用 winzip 之类的软件解开再用 ftp 或 mount 等方式让 linux 可以访问。
4)在系统中安装 gcc-2.7.2 或更新的 c 编译包5 ) 如果 没有 把握 ,就 把 原来 的内 核( 在/boot 下 )在 别的 地方 重新 备份 一个 。
别 忘了同 时 备份 模块(/lib/modules/2.x.x)4.内核编辑 为了使内核符合自己系统和应用程序的实际需要,一般都要对其进行某些编辑工作,主要是修改某些头文件中的若干参数。
比方说,在安装 Oracle 8.0.5 时,为了使 Oracle 能够利用的内存空间与实际的物理内存容量相符,以提高性能,要修改/usr/src/linux/include/asm 下的 shmparam.h 文件中的一些内存参数。
5.内核配置 内核配置的方法很多,make config、make xconfig、make menuconfig、make oldconfig 等等,它们的功能都是一样的,区别应该从名字上就能看出来,只有 make oldconfig 是指用系统当前的设置(./.config)作为缺省值。
这里用的是 make menuconfig。
需要牢记:不必要的驱动越多,内核就越大,不仅运行速度慢、占用内存多,在少数情况下、还会引发其他问题。
具体步骤如下:首先确定 shell 是 bash。
然后make menuconfig有一些默认的符号其含义如下:y:加载n:不加载m:作为模块加载可以配置的选项有以下一些:1)code maturity level option 代码成熟度prompt for development and/or incomplete code/drivers N/y/如果有兴趣测试一下内核中尚未最终完成的某些模块就选 y,否则选 N,想知道更详细的信息选?会看到联机帮助(以下?的含义相同)N 大写表示缺省值。
2)processor type and features 处理器类型及特性Processor family ( 386 , 486/Cx486 , 586/K5/5x86/6x86 , Pentium/K6/TSC , PPro/6x86MX )PPro/6x86MX内的是缺省值,我们可以根据前面介绍的 uname 命令执行的结果选择。
此项如果高于 386,那么生成的内核在 386 机器上将不能启动。
Math emulation(CONFIG_MATH_EMULATION)N/y/需要进行协处理器模拟吗?一般的机器都回 n。
如果机器已经有硬件的协处理器,那么内核仍将使用硬件,而忽略软件的 math-emulation,这将使内核变大变慢。
MTRR(Memory Type Range Register)support(CONFIG_MTRR)N/y/?在 Pentium、Pro/Pentium II 类的系统中可以提高图像写入速度。
Symmetric multi-processing support(CONFIG_SMP)Y/n/?如果您的机器有多个处理器,就选 y。
此时要选中下面的 Enhanced Real Time Clock Support3)loadable model support 可加载模块支持Enable loadable module support(CONFIG_MODULES)Y/n/?最好选 y,不然许多仅供动态加载的模块就不能用了。
Set version information on all symbols for modules(CONFIG_MODVERSIONS)N/y/?选NKernel module loader(CONFIG_KMOD)N/y/4)general setup 一般设置Networking support(CONFIG_NET)Y/n/选 y 吧,现在还有几台计算机不用上网呢?PCI support (CONFIG_PCI)Y/n/PCI 总线和设备总该有吧。
PCI
access mode(BIOS,Direct,Any)Any缺省值比较保险,但如果您对您的主板很有信心,就选 BIOS。
PCI quirks (CONFIG_PCI_QUIRKS)Y/n/用于修补 BIOS 中对 PCI 有影响的 BUG,同样,如果您对主板很有信心,就选 n。
Backward-compatible /proc/pci〉(CONFIG_PCI_OLD_PROC)Y/n/以前的内核使用/proc/pci,新版内核使用/proc/bus/pci,要保持兼容性就选 y。
MCA support(CONFIG_MCA)N/y/查看帮助吧。
SGI Visual Workstation support(CONFIG_VISWS)N/y/您的机器是 SGI 的吗?是就选 y。
System V IPC(CONFIG_SYSVIPC)Y/n/进程间通信函数和系统调用。
Linux 内核的五大组成部分之一,一定要选。
BSD Process Accounting(CONFIG_BSD_PROCESS_ACCT)N/y/用于启动由内核将进程信息写入文件的用户级系统调用。
就看您想不想用它了。
Sysctl support(CONFIG_SYSCTL)Y/n/在内核正在运行的时候修改内核。
用 8KB 空间换取某种方便。
别选吧,除非你真的想试试。
Kernel support for a.out binaries(CONFIG_BINFMT_AOUT)Y/m/n/为了能使用以前编译的程序,选 y。
Kernel support for ELF binaries(CONFIG_BINFMT_ELF)Y/m/n/为了能使用现在编译的程序,选 y。
Kernel support for MISC binaries(CONFIG_BINFMT_MISC)Y/m/n/一般选 y,用于支持 java 等代码的自动执行。
Parallel port support(CONFIG_PARPORT)N/y/m/并口设备,如打印机。
5)plug and play support 即插即用设备支持Plug and Play support (CONFIG_PNP)N/y/选 y 吧。
6)block devices 块设备Normal PC floppy disk support(CONFIG_BLK_DEV_FD)Y/m/n/一般的软驱。
选 y。
Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support(CONFIG_BLK_DEV_IDE)Y/m/n/这几种接口的硬盘、光驱、磁带、软驱。
选 y。
Include IDE/ATAPI CDROM support(CONFIG_BLK_DEV_IDECD)Y/m/n/CDROM。
选 y。
7)networking options 网络选项Packet socket (CONFIG_PACHET)Y/m/n/按照目前网络发展的状况,选 y 比较好。
当然也可以选其它的。
Kernel/User netlink socke(CONFIG_NETLINK)N/y/内核与用户进程双向通信。
选 y。
Network firewalls(CONFIG_FIREWALL)N/Y/如果真的需要用防火墙,就选 y。
UNIX domain sockets(confgi_unix)Y/m/n/socket 的用处太多了。
选 y。
TCP/IP networking(CONFIG_INET)Y/n/选 y,理由如上一条。
The IPX protocol (CONFIG_IPX)N/y/m/其实并没有那么多人真的需要使用或者学习 IPX,所以一般选 N。
Appletalk DDP(CONFIG_ATALK)N/y/m/选 N,理由同上。
8)SCSI support SCSI 支持,SCSI low-level drives SCSI 低级驱动根据系统中 SCSI 设备的实际情况选择。
9)Networking device support 网络设备支持如果用 LAN 上网,就选择网卡;如果用 MODEM 拨号上网,就要看 ISP 提供那种服务了,一般都是 PPP。
10)Amateur Radio support 业余收音机支持这是什么我不太清楚,所以选 N。
11)ISDN subsystem ISDN 子系统好像已经有支持 ISDN 的 MODEM 了,所以最好先看看自己的 MODEM 是不是这种,再做选择。
12)Old CD-ROM dfivers (not SCSI, not IDE) 老式光驱驱动一般选 N,因为这种设备实在很少见。
13)Character devices 字符设备Virtual terminal(CONFIG_VT)Y/n/Linux 上一般可以用 AltF1/F2/F3/F4 来切换不同的任务终端,即使在一台计算机上也可以充分使用 Linux 的多任务能力,一些需要以命令行方式安装合适用的软件如果有虚拟终端的支持就会更方便,因此选 y。
Support for console on virtual terminal(CONFIG_VT_CONSOLE)Y/n/选 y 将支持一个虚拟终端作为控制台。
一般为 AltF1。
Support for console on serial port(CONFIG_SERIAL)Y/m/n/除非真的需要一个串口控制台,否则选 n。
Extended dumb serial driver options(CONFIG_SERIAL_EXTENDED)N/y/ ,选 y,一般选 N。
如果希望使用quotdumbquot的.