Ubuntu 8.04 Linux系统下面编译更新内核版本


在 VirtualBox 虚拟机上面测试的,ubuntu 8.04系统。
1. 下载内核源代码
http://www.kernel.org/
下载The latest stable version of the Linux kernel is:  2.6.25.7  ,点后面的“F”  按钮下载
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.7.tar.bz2
  文件。
2. 在终端 su root命令切换到root权限,然后把linux-2.6.25.7.tar.bz2  文件复制到/usr/src/ 目录下。
在ubuntu中不能以root身份登录界面,很奇怪
3. cd 到/usr/src/ 目录下, 执行  tar  -jxvf  linux-2.6.25.7.tar.bz2     命令解压源代码包。就会解压到
/usr/src/ linux-2.6.25.7,我又把它复制到 /usr/src/ linux-2.6.25.7-widebrihgt 目录下了,/usr/src/
linux-2.6.25.7-widebrihgt     挂载了一个 8G的盘。
4.root用户,cd到/usr/src/ linux-2.6.25.7-widebright  目录下
# make mrproper (该命令可确保源代码目录下没有不正确的.o文件     .config文件等)
内核配置工具
(1) make config (纯字符提示模式)
      
(2)
# make menuconfig (配置内核各选项,居于ncurse 的菜单选择模式)
需要ncurse 库的支持, ubuntu中默认没有安装  需要安装一下
# apt-get install libncurses5-dev   
(3)
# make xconfig     (X窗口的图形界面,配置内核各选项)     
xconfig基于X11, 使用qt库, 在Ubuntu中先安装qt库:
# apt-get install libqt3-headers libqt3-mt-dev
我是安装libncurses5-dev     之后用 menuconfig  来配置的,  都是用他默认配置,
除了
General setup --->
()  Local version - append to kernel release ()
这个可以在内核版本后面加上个性字符串,我输入了widebrighgt
然后选最后一条,保存配置文件就行了,他会在 /usr/src/ linux-2.6.25.7-widebright 生成 .config 文件


5.编译内核
只需要运行 make就行了
#make
执行之前可以先运行make clean 清空生成的内核文件,或者编译中间有问题了,想重新编译,可以用这
个先清空已经生成的内核文件
我在VirtualBox虚拟机的ubuntu8.04 系统里面执行make 命令, 结果make一次花的编译时间应该在两个
小时以上。注意 /usr/src/ linux-2.6.25.7-widebright的剩余空间要在2.5G以上,我一开始mount到一个
2G的盘,结果编译时候提示没有空间。后来重试了几次,花了很多时间,最后mount了一个8G的盘,终
于编译成功了。 看他完成后,占用的控件大概在1.8G左右。
这个make相当于,手工执行了一下两步:
# make bzImage
# make modules (编译可加载模块)
其中make bzImage  将在  /usr/src/ linux-2.6.25.7-widebrihgt/arch/i386/boot 目录下生成一个名字为
bzImage的内核镜像文件。  make zImage  命令其实可以生成内核镜像的,bzImage 的区别就是它是压
缩的。
make modules 则是生产大量的 *.ko  内核文件,就是模块化的内核驱动等等吧,你不把它编译进去
bzImage里面去的都会另外单独生成的一个ko文件了,以后需要的时候再由内核加载这个ko模块。
6.安装内核
(1)
执行 make install  命令
           
我运行了这一步后,提示需要在GRUB menu.lst 配置文件中把 入口 点指向 /boot/vmlinuz-
2.6.25.7widebright  文件。  应该是已经把上面一步生成的bzImage复制到系统的 /boot 目录去了, ls
-l看一下 /boot 目录,可以已经把vmlinuz 文件链接到 vmlinuz-2.6.25.7widebright 文件  System.map
文件链接到     System.map-2.6.25.7widebright 文件,config 文件链接到 config-2.6.25.7widebright 文
件。
(2)
没有看到模块的配置信息输出,所以我又执行了一下 make modules_install 命令,这个是安装模块的。
这个会安装很多 ko文件,最后输出 DEPMOD  2.6.25.7widebright。不懂这个流程是什么样子的。不过
在/lib/modules/ 目录下面生成了一个 2.6.25.7widebright的目录,下面 目录就是上面make modules生
成的那些ko内核模块文件。
(3)  我上面的编译过程好像没有生成initrd镜像文件,不知道怎么回事,只好手工来了。什么是initrd镜
像请看最后附的那篇文章
生成initrd镜像文件,redhat系统下面用new-kernel-pkg  命令应该就可以了,后面那篇文章说的mkinitrd
命令不知道是什么系统。 ubuntu系统下面在网上搜索了一下,应该是用 mkinittramfs 命令来生成的。
运行一下 "mkinitramfs  -o  initrd.img-2.6.25.7widebrihgt     2.6.25.7widebrihgt" ,将在当前目录下生成
一个名字为 initrd.img-2.6.25.7widebrihgt大小7.1M左右的initrd 镜像文件。最后我把它移到 /boot/ 目
录里面去。
注意:最后那个参数“2.6.25.7widebrihgt” 是version,指定 内核版本,就是/lib/modules/  目录下相应的
文件夹名字。这个一定要指定的,不然他默认使用的是正在运行的系统的版本,最后系统就不能引导成
功。
(4)检查一下 grub的配置文件
cat  /boot/grub/menu.lst ,  看来make install 命令没有自动把新编译的内核的配置写到grub的配置文
件里面。修改 timeout  属性 为 10,让等待的时间长一点,然后仿造原有的配置新建一项放在最前面,因为一开始的default 的值设置为0的,默认是第一项。增加的内容如下
title          Ubuntu 8.04, kernel 2.6.25-7-widebright
root          (hd0,0)
kernel          /boot/vmlinuz-2.6.25.7widebright root=UUID=a082d103-894e-443a-bf58-8b128c7e5dd1 ro quiet splash locale=zh_CN
initrd          /boot/initrd.img-2.6.25.7widebright
quiet
注意其中的 kernel 和initrd 都指向自己的镜像文件。 root的 UUID可能没个人都不一样的,可以参考GRUB的配置文件说明。






做完上面步骤之后,重启系统,等到系统提示按 ESC 键的时候,可以选择和进入GRUB的菜单。可以看到自己的内核版本已经显示出来了。
选择进入之后,一切正常。
使用uname -a 命令查看,可以看到当前内核已经被更新了
widebright@widebright-desktop:~$ uname -r
2.6.25.7widebright
widebright@widebright-desktop:~$ uname -a
Linux widebright-desktop 2.6.25.7widebright #1 SMP Sat Jun 21 05:37:09 CST 2008 i686 GNU/Linux
widebright@widebright-desktop:~$




=======另附一篇initrd镜像相关文章==============================================
initrd 镜像文件的作用与制作
我们在安装新内核的时候,通常都会编辑lilo.conf 和grub.conf 文件。里面有一段“initrd=/boot/initrd-
***.img”(其中的***表示内核的版本号)的我们都很少会注意到,有时候还会发现这 一行不要也可以
正常开机。那这个initrd***.img究竟是用来干什么的呢?
其实initrd***.img是一个镜像文件,类似ramdisk,把一段程序打包到img里,然后在开机的时候在内存
里开辟一段区域,一般是2m,释 放到那里运行,都是一些初始化的程序,比如sisc_mod、ext3、
sd_mod等模块和insmod、nash等命令。不同内核,初始化的img可 以相同,也可以不同,如果没有,
可以在grub.conf里加上no initrd,它就跳过initrd的检测和执行了,以前好像就没有,后来才有的。
它的作用是在没有mount /分区以前,系统要执行一些操作,比如挂载scsi驱动,它就把initrd释放到内
存里,作一个虚拟的/,然后执行其根目录下的一个脚本 “linuxrc”,运行insmod和nash命令挂装模块。
为什么有的时候我们在lilo或grub的配置文件中不加入该行都可以正常开机呢?这是因 为我们一般的PC
机都没有使用scsi硬盘等需要先加载其驱动的设备,所以就算没有initrd***.img也可以正常开机。但是
如果我们要在服务器上 为其编译新内核那就一定不要忘记也为其新建一个initrd文件呀!
好,下面来看看如何查看initrd***.img里面的内容和如何为你的新内核创建一个新的initrd.img文件。
查看initrd.img:
initrd***.img虽然后缀是“img”,但其实它是一个gz格式的文件,我们可以先把它解压,然后载挂装到
目录下:
1、cp initrd.img initrd.gz
2、guzip initrd.gz
3、mount -o loop initrd /mnt/floppy
进入/mnt/floppy目录,我们就可以看到initrd***.img文件的庐山真面目了。
制作initrd文件
当我们编译了一个新的内核,也不要忘了为我们的scsi设备做一个新的initrd镜像:
语法:
mkinitrd 文件名 内核的目录名
示例:
mkinitrd initrd-2.4.19.img 2.4.19
initrd-2.4.19.img文件是自己任意取的,但最好对应自己的内核版本号。
2.4.19是在/lib/modules中的目录名,对应内核的版本。
当然,我们也可以在挂装了initrd***.img文件后直接添加模块到/lib目录中,然后修改linuxrc脚本让其开
机进行挂装。但必须具备一定的shell脚本的能力才行。
               
               
               

 

转载于:https://www.cnblogs.com/hankering/archive/2013/06/05/3118999.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/408780.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python-100 | 练习题 01 列表推导式

最近打算好好练习下 python,因此找到一个练习题网站,打算每周练习 3-5 题吧。http://www.runoob.com/python/python-100-examples.html另外,这个网站其实也还有 Python 的教程,从基础到高级的知识都有。Example-1 三位数组合题目&…

html5qq邮箱代码,使用qq邮箱批量发送邮件 实例源码(支持富文本)

资源下载此资源下载价格为3D币,请先登录资源文件列表MailSending/MailSending/App.config , 184MailSending/MailSending/Form1.Designer.cs , 15243MailSending/MailSending/Form1.cs , 10655MailSending/MailSending/Form1.resx , 438794MailSending/MailSending/…

Python-100 练习题 01 列表推导式

最近打算好好练习下 python,因此找到一个练习题网站,打算每周练习 3-5 题吧。 http://www.runoob.com/python/python-100-examples.html 另外,这个网站其实也还有 Python 的教程,从基础到高级的知识都有。 Example-1 三位数组合…

Python dict 调试技巧 —— 利用YAML存储dict内容

我们经常跑一些程序时dict生成会比较久或比较大,这时候我们可以中途将其保存在临时调试文件。一般可考虑保存成如json,xml或yaml。 我这里用一个比较简单的实现,利用PyYAML。 1 $ sudo pip install pyyaml 保存dict的时候利用dump函数 1 import yaml 2 …

nginx html解析插件,nginx配置信息的解析流程

nginx配置信息的解析流程2011年9月9日 1,744 次浏览请关注最新修正合订:这一系列的文章还是在09年写的,存在电脑里很久了,现在贴出来。顺序也不记得了,看到那个就发那个吧,最近都会发上来。欢迎转载,但请保…

机器学习数据集的获取和测试集的构建方法

这是机器学习入门系列(2)–如何构建一个完整的机器学习项目的第二篇 上一篇机器学习入门系列(2)–如何构建一个完整的机器学习项目(一)介绍了开始一个机器学习项目需要明确的问题,比如当前任务属于有监督还是无监督学习问题,然后…

SQL日期格式化

Sql Server 中一个非常强大的日期格式化函数 Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06 Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16 Select CONVERT(varchar(100), GETDATE(), 3…

[资源推荐] 必须收藏的两个查找论文和代码实现的网站!

2019年第 13 篇文章,总第 37 篇文章无论是研究方向是 AI 方面的学生,或者是做机器学习方面的算法工程师,在掌握基础的机器学习相关知识后,都必须掌握搜索论文的技能,特别是研究或者工作领域方向的最新论文,…

dw html怎么导入视频,如何在dw中将视频插入

如何在dw中将视频插入电脑版Dreamweaver工具被很多人使用,用来编辑视频等,有的用户在使用该软件时,想要插入需要编辑的视频,但是却不知道如何插入,那么小编就来为大家介绍一下吧。具体如下:1. 第一步&#…

editplus注释快捷键

Tools->Preferences Tools-Keyboard-Edit-LineComment Line Uncomment为取消注释 转载于:https://www.cnblogs.com/yiwd/archive/2013/06/06/3121689.html

Python-100 练习题 02

2019年第 10 篇文章,总第 34 篇文章 练习题2 的网址: http://www.runoob.com/python/python-exercise-example2.html Example-2 企业发放奖金 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%&#xff…

html input file 置空,清空 HTML File Input

因为浏览器安全限制,通常的方法,如把value设为null或空字符串,是无法清空HTML file input的。大多数浏览器中,给file input的value设置null值,要么无效,要么产生错误。解决办法是,复制老元素的属…

oseicq介绍

介绍Oseicq是目前中国最好的可进行2次开发的即时通讯软件,Oseicq是专为需要进行互联网应用或企业系统集成而设计即时通讯产品,使用oseicq源码可以让用户拥有即时沟通,更高效率,突破空间约束,缩短管理距离等行业优势。 …

特征工程之数据预处理(上)

机器学习入门系列(2)–如何构建一个完整的机器学习项目,第三篇! 该系列的前两篇文章: 机器学习入门系列(2)–如何构建一个完整的机器学习项目(一)机器学习数据集的获取和测试集的构建方法 分别介绍了确定项目终极目…