LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: l_s

如何升级内核

[复制链接]
 楼主| 发表于 2009-4-23 00:22:49 | 显示全部楼层
Post by coderoar;1978214
我知道啊,genkernel 可以指定源码树的 -- 用"--kerneldir"参数就好了,这样就用了不同的版本啊。

用eselect kernel list可以列出当前安装的内核源码树,用eselect kernel set *可以指定默认的源码树。
那大哥能不能举个实例描述下帮帮我,和想要升级内核的朋友。谢谢
回复 支持 反对

使用道具 举报

发表于 2009-4-23 00:33:17 | 显示全部楼层
比如,这有两个内核源码树


  1. ~ # ls -l /usr/src/
  2. total 8
  3. lrwxrwxrwx  1 root root   22 2009-04-05 13:43 linux -> linux-2.6.29-gentoo
  4. drwxr-xr-x 21 root root 4096 2009-04-07 23:20 linux-2.6.29-gentoo
  5. drwxr-xr-x 23 root root 4096 2009-04-17 18:40 linux-2.6.29-gentoo-r1
复制代码


可以看到 linux 这个符号链接是指向 linux-2.6.29-gentoo 的,所以 genkernel 默认就是使用 linux-2.6.29-gentoo 的源码。

你可以删除这个符号链接然后让它指向其它版本,但是 eselect 显然更好用:

  1. ~ # eselect kernel list
  2. Available kernel symlink targets:
  3.   [1]   linux-2.6.29-gentoo *
  4.   [2]   linux-2.6.29-gentoo-r1
  5. ~ # eselect kernel set 2
复制代码


这样就指定了默认内核为 linux-2.6.29-gentoo-r1,然后再用 genkernel 就可以编译这个版本的内核了。

至于那个 "--kerneldir=",它是需要指定绝对路径的。例如:

  1. genkernel all --menuconfig --kerneldir=/usr/src/linux-2.6.29-gentoo-r1
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-23 00:38:23 | 显示全部楼层
回家试试再来请教
回复 支持 反对

使用道具 举报

发表于 2009-4-23 10:07:22 | 显示全部楼层
http://www.gentoo.org/doc/en/kernel-upgrade.xml 这是英文的,中文翻译那份打不开了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-25 17:20:42 | 显示全部楼层
Post by coderoar;1978221
比如,这有两个内核源码树
  1. ~ # ls -l /usr/src/
  2. total 8
  3. lrwxrwxrwx  1 root root   22 2009-04-05 13:43 linux -> linux-2.6.29-gentoo
  4. drwxr-xr-x 21 root root 4096 2009-04-07 23:20 linux-2.6.29-gentoo
  5. drwxr-xr-x 23 root root 4096 2009-04-17 18:40 linux-2.6.29-gentoo-r1
复制代码

可以看到 linux 这个符号链接是指向 linux-2.6.29-gentoo 的,所以 genkernel 默认就是使用 linux-2.6.29-gentoo 的源码。

你可以删除这个符号链接然后让它指向其它版本,但是 eselect 显然更好用:
  1. ~ # eselect kernel list
  2. Available kernel symlink targets:
  3.   [1]   linux-2.6.29-gentoo *
  4.   [2]   linux-2.6.29-gentoo-r1
  5. ~ # eselect kernel set 2
复制代码

这样就指定了默认内核为 linux-2.6.29-gentoo-r1,然后再用 genkernel 就可以编译这个版本的内核了。

至于那个 "--kerneldir=",它是需要指定绝对路径的。例如:
  1. genkernel all --menuconfig --kerneldir=/usr/src/linux-2.6.29-gentoo-r1
复制代码

通过这种方式能行.

但是我还想通过
另一种比较原始的模式.
看下过程

现在我的内核编译完了,但是挂系统,挂起启动不了,好像和其他的有点差异.
gentoo 好像把把bzImage 和vmlinux 打包了在一起.但是我不知道是用什么打包的.
Systerm.map 有的说要ln 哈,
我在/boot 没有发现system.map ln
回复 支持 反对

使用道具 举报

发表于 2009-4-25 21:33:28 | 显示全部楼层
建立/usr/src/linux的联接,然后make menuconfig,再make module && make modules_install,再cp到boot,然后重启module-rebuild rebuild,貌似是这个过程?
回复 支持 反对

使用道具 举报

发表于 2009-4-25 22:08:29 | 显示全部楼层
Post by l_s;1979396
通过这种方式能行.

但是我还想通过
另一种比较原始的模式.
看下过程

现在我的内核编译完了,但是挂系统,挂起启动不了,好像和其他的有点差异.
gentoo 好像把把bzImage 和vmlinux 打包了在一起.但是我不知道是用什么打包的.
Systerm.map 有的说要ln 哈,
我在/boot 没有发现system.map ln

vmlinux是内核通称,而bzImage特指以bzip2格式压缩压缩的内核,它们在各个发行版有各自的名称,genkenel生成的内核名称形如kernel-genkernel-x86_64-2.6.29-gentoo-r1.8。至于System.map,不用管它。

看来你还不太了解内核,还是搜下linux启动过程方面的资料吧,那比学会这项技术更为重要。
Post by oiniya;1979491
建立/usr/src/linux的联接,然后make menuconfig,再make module && make modules_install,再cp到boot,然后重启module-rebuild rebuild,貌似是这个过程?

正解,很简单,复杂的是配置内核的过程。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表