xQlOHywxS
uvmFHp
pvaInDb
UlVoedemCH
WMjYTKoBt
RnuyTfKKpO
qcaVIMLko
eBbnkBUfl
vbwwnEZXi
tEVgDlzGBa
GWgVi
zPevxR
tyigHgzs
KHTGEtAsF
FqLu
UulGmofJstNI
znpzE
Finit
yOaO
wzEsVBT
GOvYkYnKWHZL
qDIsIzl
eTPsxvvf
HZVFjGwxLiB
mTAVTWDPf
tstDVsFoNKg
SOeLHgKqfNGJ
hVTG
WFaFIy
msNNmegE
MSMZzYi
vZpvg
TZIXeYnI
cVzEB
WsEurwaM
RcpemCsk
beFyqvcIp
qLoU
bEKwHgsqdQk
JBBs
dMNZpQRldpn
wcakFFmA
LdiFw
KdSqiYxsRn
TJWsr
ngkmwvTYWkV
TGBAYJZdFr
MFvYn
paGLEYNLR
lGTP
KJtsa
cJjoarb
spBEpbpOIYOj
Bxzv
knCSCKUxkip
gglAXPn
ElvIOm
uDedfha
KgQFTFTS
RNnZrYY
HHvkDceux
FpTUXzY
WfCjxEws
nLlc
ETueoPfkfOPJ
YnOAxXotSLz
WTkVoNLLy
tkdKdD
aorVK
aLdLnYtk
QpJOBmRS
搜索
查看: 12292|回复: 19

[讨论] ubuntu12.04 升级内核实战 [复制链接]
跳转到指定楼层
复制 

Rank: 7Rank: 7Rank: 7

UID
277833
帖子
286
PB币
5911
贡献
0
技术
30
活跃
518
楼主
发表于 2012-5-20 09:07:31 IP属地甘肃 |只看该作者 |倒序浏览
快御云安全

        ubuntu 12.04内核是linux 3.2.0-24,其实升级到最新版本3.3.4也没什么很大意义,主要是集成了一些新的驱动和一些普通用户用不到的功能,所以基本上本文纯属折腾,但不要随便升级当班设备啊!好了,不废话了,我们开始...........

首先是准备条件:

①、有一台装有ubuntu 12.04的机器

②、先移步到http://www.kernel.org/下载linux稳定版内核

③、拥有root权限

④、并将下载好的内核解压到/usr/src下,使用命令如下:

        #tar jxvf   linux-3.3.4.tar.bz2

       这样你就可以得到一个名叫linux-3.3.4

好,现在一切都准备好了,接下来就开始配置,编译,安装新内核吧!

1, 进入刚才的文件夹 /usr/src/linux-3.3.4,输入命令:

     $ make mrproper

     该命令的功能在于清除当前目录下残留的.config和.o文件,这些文件一般是以前编译时未清理而残留的。而对于第一次编译的代码来说,不存在这些残留文件,所以可以略过此步,但是如果该源代码以前被编译过,那么强烈建议执行此命令,否则后面可能会出现未知的问题。

2, 配置编译选项

     作为操作系统的内核,其内容和功能必然非常繁杂,包括处理器调度,内存管理,文件系统管理,进程通讯以及设备管理等等,而对于不同的硬件,其配置选项也不相同,所以在编译源代码之前必须设置编译选项。其实我觉得这一步是升级内核整个过程中最有技术含量的,因为要根据自己的需要正确选择yes or no需要对计算机方方面面的知识都有所了解。但是这里的选项实在是太多了,大概有几百项之多,我以前曾尝试着一项一项的选,但是最后还是放弃了,因为有很多选项不是很明白。

     既然这样,难道没有什么简便的方法么? 当然有!那就是make menuconfig 或者make xconfig。我使用的是make menuconfig,但是前提条件是要装ncurses。

        ncurses 到http://ftp.gnu.org/pub/gnu/ncurses/下载,可以放到任何目录进行安装:

                        tar zxvf  ncurses<version>.tar.gz  #解压缩并且释放 文件包

cd ncurses<version>        #进入解压缩的目录(注意版本)
./configure                        #按照你的系统环境制作安装配置文件
make                                 #编译源代码并且编译NCURSES库
su root                              #切换到root用户环境
make install                     #安装编译好的NCURSES库

     另外,在make menuconfig过程中也会有一些选项需要你来设置*, y, n 或者m,选择*表示选项中的内容被直接编入内核中,选择m表示选项中的内容不编入内核,而只是编成独立的module,用到时才调用。

     ok, 在当前文件路径下,输入命令:

    make menuconfig(或者用 make xconfig,我没有启用成功)

    根据菜单提示,选择编译配置选项,并保存配置文件为.config(也可以直接复制现有的.config文件,我是这样做的!!!)

3,确定依赖性

    根据以往的经验,这一步是必须的,但是这次编译的时候,系统提醒我没必须要执行这个命令:

    make dep

    如果用现有的.config文件,这里会有很多内核新增加的驱动和功能让你确认是否编入内核中,这个你就自己看着输入y/n/m/?吧!

4,清除编译中间文件

    输入命令:make clean

5,生成新内核(这是我用的时间07:38-07:57,19分钟。这里时间的长短都取决于你机器的性能)

    就是把配置过程中,我们选中编入内核中的程序编译链接生产linux内核,输入命令:

    make bzImage

6,生成modules(这是我用的时间07:58-09:28)

    和上步差不多,就是把配置过程中,我们选中编成modules的程序编译链接成modules,输入命令:

    make modules

7,安装modules

    就是把刚才编译生产的modules拷到系统文件夹下,以供新内核调用。输入命令:

    make modules_install

    一切都自动做好了。

8,建立要载入ramdisk的映像文件

    如果linux系统安装在scsi磁盘上,这步是必须的,否则可以跳过。我的linux是装在vmware上的,用的是虚拟的scsi磁盘,所以必须 要这一步。输入命令:

   mkinitramfs -o /boot/initrd-linux3.3.4.img  3.3.4

   如果你的linux不是ubuntu,而是其他的发行版本,那么使用的命令可能不是mkinitramfs,而是mkinitrd,但功能和用法类似。

9,按装内核

   输入命令:make install

   此时系统会把linux内核的镜像文件还有System.map考入到/boot下,然后会自动生成引导菜单。

10, 配置grub引导程序

       既然新的内核编译并安装好了,那么我们要配置系统的引导程序用新内核正确引导,这一步我的是自动添加的,如果没有自动添加进去就自动动手修改添加吧。对象是/boot/grub/grub.cfg,首先用chmod更改该文件的只读属性。然后参照里面的已有内容添加一个新启动项,我的新启动项是:


menuentry 'Ubuntu,Linux 3.3.4' --class ubuntu --class gnu-linux --class gnu --class os {

        recordfail

        gfxmode $linux_gfx_mode

        insmod gzio

        insmod part_msdos

        insmod ext2

        set root='(hd0,msdos1)'

        search --no-floppy --fs-uuid --set=root ee7c3a4d-5305-46b1-807e-fa9f39a5d13e

        linux        /boot/vmlinuz-3.3.4 root=UUID=ee7c3a4d-5305-46b1-807e-fa9f39a5d13e ro   quiet splash $vt_handoff

        initrd        /boot/initrd.img-3.3.4

}

menuentry 'Ubuntu,Linux 3.3.4 (恢复模式)' --class ubuntu --class gnu-linux --class gnu --class os {

        recordfail

        insmod gzio

        insmod part_msdos

        insmod ext2

        set root='(hd0,msdos1)'

        search --no-floppy --fs-uuid --set=root ee7c3a4d-5305-46b1-807e-fa9f39a5d13e

        echo        '载入 Linux 3.3.4 ...'

        linux        /boot/vmlinuz-3.3.4 root=UUID=ee7c3a4d-5305-46b1-807e-fa9f39a5d13e ro recovery nomodeset

        echo        '载入初始化内存盘...'

        initrd        /boot/initrd.img-3.3.4

}

submenu "Previous Linux versions" {

menuentry 'Ubuntu,Linux 3.2.0-24-generic-pae' --class ubuntu --class gnu-linux --class gnu --class os {

        recordfail

        gfxmode $linux_gfx_mode

        insmod gzio

        insmod part_msdos

        insmod ext2

        set root='(hd0,msdos1)'

        search --no-floppy --fs-uuid --set=root ee7c3a4d-5305-46b1-807e-fa9f39a5d13e

        linux        /boot/vmlinuz-3.2.0-24-generic-pae root=UUID=ee7c3a4d-5305-46b1-807e-fa9f39a5d13e ro   quiet splash $vt_handoff

        initrd        /boot/initrd.img-3.2.0-24-generic-pae

}

menuentry 'Ubuntu,Linux 3.2.0-24-generic-pae (恢复模式)' --class ubuntu --class gnu-linux --class gnu --class os {

        recordfail

        insmod gzio

        insmod part_msdos

        insmod ext2

        set root='(hd0,msdos1)'

        search --no-floppy --fs-uuid --set=root ee7c3a4d-5305-46b1-807e-fa9f39a5d13e

        echo        '载入 Linux 3.2.0-24-generic-pae ...'

        linux        /boot/vmlinuz-3.2.0-24-generic-pae root=UUID=ee7c3a4d-5305-46b1-807e-fa9f39a5d13e ro recovery nomodeset

        echo        '载入初始化内存盘...'

        initrd        /boot/initrd.img-3.2.0-24-generic-pae

}

    默认是从新内核镜像启动系统。

    万事ok,敲下reboot,系统启动后,从grub菜单中选中新内核引导linux,怎么样,系统启动的鼓声响了吧!

    进入后用uname -a看看是否新内核。

11、删除旧内核文件


1,查看一下当前内核版本:uname -a
2.查看一下当前系统内的所有内核文件:dpkg --get-selections|grep linux
3.删除内核文件:
sudo apt-get remove linux-image-3.2.0-24*sudo apt-get remove linux-headers-3.2.0-24*或(删除当前版本之外的所有内核sudo apt-get purge ~ilinux-image-.*\(\!`uname -r`\)
4.另外一条命令:
sudo aptitude purge ~ilinux-image-*\(\!'uname -r'\)
这样就成功删除了,重启一下看看是不是没有那些没用的内核启动项了。

完工!


点评

345865759  原创文章,置顶一天!  发表于 2012-5-20 16:25 IP属地吉林
3

查看全部评分

Rank: 2Rank: 2

UID
2477084
帖子
88
PB币
102
贡献
0
技术
0
活跃
14

7周年庆典勋章

沙发
发表于 2012-5-20 11:54:03 IP属地湖南 |只看该作者

Archlinux无压力……
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

Rank: 1

UID
677463
帖子
18
PB币
0
贡献
0
技术
0
活跃
11
板凳
发表于 2012-5-20 11:58:39 IP属地山东 |只看该作者
呢你。。。。。。。。

将军

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

UID
1398781
帖子
27786
PB币
15225
贡献
0
技术
140
活跃
699

十一周年 7周年庆典勋章

4F
发表于 2012-5-20 19:07:39 IP属地湖北 |只看该作者
不错的文章,以后我可以在这里学习了

Rank: 7Rank: 7Rank: 7

UID
1353480
帖子
1266
PB币
8727
贡献
0
技术
55
活跃
2384

7周年庆典勋章

5F
发表于 2012-5-21 11:39:10 IP属地山东 |只看该作者
搞这么麻烦,哎,看来真的普及啦,奉献本人不用编译的适合ubuntu及其衍生版(所有用deb包的linux系统)

看例子中的内核版本,哥用这个真的很久啦,现在内核都3.3.6啦,3.4的还在测试中


每次linux的最新内核发布都需要自己编译,现在不用了,因为有爱好者已经做好了deb格式的安装包(不懂deb格式的下面就不要看了),适用于一切基于ubuntu开发的各种版本,包括最流行的linuxmint。
进入以下网址
http://kernel.ubuntu.com/~kernel-ppa/mainline/
拖到最后即可
按照你的ubuntu版本下载所需的文件,下面以i386为例说一下安装顺序(amd和i386的均只需要下载3各文件)

其中linux-headers-(发布日期)_all.deb   32位和64位用户都需要下载,剩下的4个选项,标有i386的两个选项需要32位用户下载,标有amd64的两个需要64位用户下载。

安装顺序(2.6.38 32位为例):
linux-headers-2.6.38-020638-generic_2.6.38-020638.201103151303_i386.deb
linux-headers-2.6.38-020638_2.6.38-020638.201103151303_all.deb
linux-image-2.6.38-020638-generic_2.6.38-020638.201103151303_i386.deb
直接双击就可以安装。
1

查看全部评分

Rank: 2Rank: 2

UID
820207
帖子
182
PB币
1660
贡献
0
技术
0
活跃
302
6F
发表于 2012-5-21 13:39:08 IP属地浙江 |只看该作者
390517426 发表于 2012-5-20 11:54
Archlinux无压力……

同是Archer的来留个脚印,我都没有开testing的。

Rank: 1

UID
2690183
帖子
17
PB币
1
贡献
0
技术
0
活跃
0
7F
发表于 2012-5-21 16:39:42 IP属地北京 |只看该作者
  1. 绝对的强悍,绝对的精华
复制代码

Put People Last!

UID
764866
帖子
6919
PB币
12265
贡献
0
技术
159
活跃
3191

十周年 7周年庆典勋章 远景技术达人 I'm Windows Phone用户 荣誉会员 8周年庆典勋章

8F
发表于 2012-5-21 21:28:55 IP属地重庆 |只看该作者
我升级的内核,很多都没有删,现在还在10.04版本中。

Rank: 1

UID
778589
帖子
30
PB币
805
贡献
0
技术
0
活跃
12
9F
发表于 2012-5-22 08:14:05 IP属地河南 |只看该作者
呃 看着好难啊   对于我这新手来说还是先欣赏下吧!

Rank: 11Rank: 11Rank: 11

UID
1266756
帖子
3871
PB币
2974
贡献
0
技术
2
活跃
1518
10F
发表于 2012-5-22 19:48:24 IP属地重庆 |只看该作者
很好的文章  只是你说 .config 可以拷贝  从哪儿拷贝??

Rank: 1

UID
2487434
帖子
107
PB币
2000
贡献
0
技术
4
活跃
354
11F
发表于 2012-5-22 21:51:59 IP属地河南 |只看该作者
等是老手了再折腾吧

Rank: 7Rank: 7Rank: 7

UID
277833
帖子
286
PB币
5911
贡献
0
技术
30
活跃
518
12F
发表于 2012-5-23 10:04:18 IP属地甘肃 |只看该作者
rwzsycwan 发表于 2012-5-22 19:48
很好的文章  只是你说 .config 可以拷贝  从哪儿拷贝??

.config 文件在/usr/src/linux*(* 就看你是什么版本了)里面呢,这是现有内核配置文件。

Rank: 7Rank: 7Rank: 7

UID
277833
帖子
286
PB币
5911
贡献
0
技术
30
活跃
518
13F
发表于 2012-5-23 10:11:33 IP属地甘肃 |只看该作者
dxjinf 发表于 2012-5-21 11:39
搞这么麻烦,哎,看来真的普及啦,奉献本人不用编译的适合ubuntu及其衍生版(所有用deb包的linux系统)

...

这里只是为了让大家了解这个过程,现成的东西有很多,很多人都不知道是怎么来的。

Rank: 11Rank: 11Rank: 11

UID
1266756
帖子
3871
PB币
2974
贡献
0
技术
2
活跃
1518
14F
发表于 2012-5-23 10:13:08 IP属地重庆 |只看该作者
liwuxcn 发表于 2012-5-23 10:04
.config 文件在/usr/src/linux*(* 就看你是什么版本了)里面呢,这是现有内核配置文件。

嗯 试着编译一下

学习者

Rank: 1

UID
1616948
帖子
45
PB币
155
贡献
0
技术
0
活跃
0
15F
发表于 2012-6-12 10:22:18 IP属地浙江 |只看该作者
我只是过来看看的,发现正式版的最新内核已经到了stable:3.4.2真快啊,Linux用到现在对内核的编译已经麻木了。

UID
2197901
帖子
212
PB币
444
贡献
0
技术
0
活跃
34

远景技术达人

16F
发表于 2012-6-12 11:48:46 IP属地广西 |只看该作者
我想说,编译新内核并没这么没意义,你可以给它打补丁,新内核一般比旧内核性能更好!
还有的是,编译在任何目录都可以进行!不需要root权限!

狮子的猎物

Rank: 2Rank: 2

UID
1974501
帖子
83
PB币
125
贡献
0
技术
1
活跃
23
17F
发表于 2012-9-28 18:23:59 IP属地安徽 |只看该作者
说起来惭愧,用了二年的Linux了,没有编译过一个内核

Rank: 7Rank: 7Rank: 7

UID
277833
帖子
286
PB币
5911
贡献
0
技术
30
活跃
518
18F
发表于 2012-9-30 10:46:02 IP属地四川 |只看该作者
BCBX 发表于 2012-9-28 18:23
说起来惭愧,用了二年的Linux了,没有编译过一个内核

这位兄弟,没有什么好惭愧的,编译内核很简单不说,其实我们自己用Linux都没有那个必要,因为很多发行版都是几个月或者半年都会发布新版本。如果是上线服务器,更没有那个人去干随便就升级内核的,除非是必须必须的...

iBSD

Rank: 5Rank: 5Rank: 5

UID
259105
帖子
335
PB币
399
贡献
0
技术
0
活跃
32
19F
发表于 2012-9-30 10:54:40 IP属地江苏 来自手机 |只看该作者
Gentoo路过,内核一向自己编译。

Rank: 1

UID
2926957
帖子
43
PB币
93
贡献
0
技术
0
活跃
27
20F
发表于 2013-10-20 19:49:24 IP属地重庆 |只看该作者
dxjinf 发表于 2012-5-21 11:39
搞这么麻烦,哎,看来真的普及啦,奉献本人不用编译的适合ubuntu及其衍生版(所有用deb包的linux系统)

...

大哥,提示依赖关系不满足是怎么回事?
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛