注册 登录
LUPA开源社区 返回首页

wuting_linux的个人空间 http://www.lupaworld.com/?296848 [收藏] [复制] [分享] [RSS]

我的博客

Ubuntu 8.04下2.6.30的内核编译

已有 17756 次阅读2009-9-2 16:22 |个人分类:基础知识

前期主要是做一些准备工作,尽管比较乏味,但是它们是成功的前提,一步步来吧!
第一步 安装必要的工具
首先,安装编译内核必要的工具包。(这一步,但凡是在gcc下编过程序,应该都是可以操作的,可能不同的系统有不同的需求,我看到的说法也都不一)
sudo  apt-get install  libncurses5-dev(menuconfig需要的)
sudo  apt-get install essential
sudo apt-get install build-essential bin86 kernel-package
另外,进入到/boot目录下,用ls命令查看系统是否有mkinitramfs 和mkisofs ,这两个命令。这两个工具在编译内核时用来生成 *.img文件(是系统启动时一个很重要的文件,具体内容和用法后面会讲到)。如果没有就需安装。
第二步 下载内核
用cat命令查看原系统版本情况:
wuting@wuting-desktop:~$ cat /proc/version
Linux version 2.6.24-19-generic (buildd@palmer) (gcc version 4.2.3 (Ubuntu 4.2.3-2ubuntu7)) #1 SMP Wed Jun 18 14:43:41 UTC 2008
一般选择比本机版本高的内核进行编译。如果新内核不能正常启动,还可以用原来的内核。
在linux kernel 官方网站http://www.kernel.org/  上下载最新的稳定内核 2.6.30。保存到/usr/src目录下。我下载的是.tar.bz2压缩格式。用tar 解压,
wuting@wuting-desktop:/usr/src$ tar -xjvf linux-2.6.30.5.tar.bz2
进入linux-2.6.30.5目录下。下面的编译工作就在这个目录下进行。
第三步 开始编译
首先是对内核进行配置,也就是选择那些部分直接编译到内核,哪些部分编译成模块,用的时候手工动态加入等。一般有三种方式,对于第一次编译内核来说,这里还是比较复杂的。所以我就选择了最简单、直观的munuconfig来进行配置。具体操作如下:
sudo make menuconfig
这样就进入了配置界面,由于还不是很清楚各个选项的具体作用是什么,一般都建议按照默认的情况进行。如果有经历或兴趣可以仔细研究一下。(自己找了一下,还没有比较好的说法。)
配置完以后保存,配置部分很重要,如果选择不当,就可能会导致系统不能正常启动。
sudo make dep  
sudo make clean //清除旧数据 ,新解压的内核源码就不需要这一步了
sudo make
sudo make bzImage //编译内核(注意:bzImage里的'I'一定是大写。)
sudo make modules //编译模块
sudo make modules  install //安装模块
sudo make install //安装内核
如果上面都顺利完成,那么在/boot目录下已经有了内核的image文件bzImage和内核的可执行文件vmlinuz。(可以用ls 命令查看一下)linux在系统引导后从/boot目录下读取内核影响到内存中。make install就是完成将bzImage和System.map拷贝到/boot目录下。
下面就要考虑如何引导系统了。首先要手工创建一个Linux启动过程中很重要的一个文件-----initrd.img。(关于initrd的具体介绍和作用可以参考http://www.lupaworld.com/151392/viewspace-44105.html)。操作如下:
sudo mkinitramfs -o /boot/initrd-2.6.30.5.img 2.6.30.5
该操作完成后/boot下会有以下几个文件(用ls -l *30*查看)
wuting@wuting-desktop:/boot$ ls -l *.30.*
-rw-r--r-- 1 root root    98728 2009-09-01 17:20 config-2.6.30.5
-rw-r--r-- 1 root root    98772 2009-09-01 17:13 config-2.6.30.5.old
-rw-r--r-- 1 root root    98738 2009-09-01 17:51 config-2.6.30.5xiyoulinux
-rw-r--r-- 1 root root 53412979 2009-09-01 17:53 initrd.img-2.6.30.5
-rw-r--r-- 1 root root  1096373 2009-09-01 17:20 System.map-2.6.30.5
如果这些都有了,祝贺你,你离成功就差一步之遥了。继续努力,胜利在向你招手。
接下来,给/boot/grub/menu.lst中添加一个新的启动项,如我的menu.lst增加了如下一段文字 ,然后保存就OK!
title           Ubuntu 8.04.1, kernel 2.6.30.5
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.30.5  root=UUID=b59e9873-f657-4190-8648-750ddeebfa92 ro splash locale=zh_CN
initrd          /boot/initrd.img-2.6.30.5
#quiet
(这里罗嗦一下,操作很简单,用Vim打开menu.lst,只要把里面没#号的拷贝一段,将其中的2.6.24改为2.6.30即可。这里的内容只是在启动的时候作为选项。当然了,initrd          /boot/initrd.img-2.6.30.5这一项的名称一定要与自己的/boot目录下的名称相同,否则,在系统启动时将找不到启动项。另外,注意到quiet,可以在前面加上#将它注释掉,这样在系统启动时,就可以显示具体的启动过程。)

大功告成,万事具备,只欠东风啦!赶紧从新启动一下。注意哦,启动开始会提示你按Esc键,进入选择栏进行选择,只需选择自己编译的内核即可。(就是你在Grub中添加的那个名称。)

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册
验证问答 换一个 验证码 换一个

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部