Chinaunix首页 | 论坛 | 博客
  • 博客访问: 90783
  • 博文数量: 32
  • 博客积分: 960
  • 博客等级: 准尉
  • 技术积分: 335
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-22 23:09
文章分类

全部博文(32)

文章存档

2011年(31)

2010年(1)

我的朋友

分类: LINUX

2011-02-25 23:55:54

编译步骤

1:下载内核源码。
直接从下载,速度很慢,可以从这个地址下载:
这次下载linux-2.6.32.tar.bz2(其中的6是偶数,表示稳定版本)。

2:源码解压缩
先通过bzip2将linux-2.6.32.tar.bz2解压为linux-2.6.32.tar;在通过tar将linux-2.6.32.tar解压成linux-2.6.32,得到源码。

3:源代码放置
将源代码拷贝到/usr/src中。如果原来已经有源码,注意不要覆盖,保险的做法是先删除链接,然后拷贝,再重新链接。
创建一个linux符号链接,方便后续的编译。
#rm -f linux   先删除老linux链接
#ln -s linux-2.6.32  linux  再创建新linux链接,指向需要的版本,方面后续编译。

4:源代码检查
  确保源代码目录下没有不正确的.o文件以及文件的互相依赖。由于我们使用刚下载的完整的源程序包进行编译,所以本步可以省略。而如果你多次使用了这些源程序编译内核,那么最好要先运行一下这个命令。
    cd /usr/src/linux
    make mrproper

  确保/usr/include/目录下的asm、linux和scsi等链接是指向要升级的内核源代码的。它们分别链向源代码目录下的真正的、该计算机体系结构(对于PC机来说,使用的体系结构是i386)所需要的真正的include子目录。若没有这些链接,就需要手工创建,按照下面的步骤进行:
  # cd /usr/include/
  # rm -r asm linux scsi
  # ln -s /usr/src/linux/arch/x86/include/asm asm
  # ln -s /usr/src/linux/include/asm-generic asm-generic
  # ln -s /usr/src/linux/include/linux linux
  # ln -s /usr/src/linux/include/scsi scsi
  这些头文件目录包含着保证内核在系统上正确编译所需要的重要的头文件。前面在/usr/src下创建了一个linux链接,就是为了方面这里的设置。

5:配置
  cd /usr/linux
  然后根据需要与爱好使用下面命令中的一个:
  #make config    (基于文本的最为传统的配置界面,不推荐使用)
  #make menuconfig(基于文本选单的配置界面,字符终端下推荐使用)
  #make xconfig   (基于图形窗口模式的配置界面,Xwindow下推荐使用)
  #make oldconfig (如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)
  这三个命令中,make xconfig的界面最为友好,如果你可以使用Xwindow,那么就推荐你使用这个命令
  选择相应的配置时,有三种选择,它们分别代表的含义如下:
  Y--将该功能编译进内核
  N--不将该功能编译进内核
  M--将该功能编译成可以在需要时动态插入到内核中的模块
  配置完内核,需要对内核源代码文件的依赖性和完整性进行检验。第一次编译内核源码,这个操作是不必要的,但是经过多次编译之后,就很有必要检查了:
    make dep    (确保关键文件在正确的位置)

6:编译
  make clean    (确保所有有关文件都处于最新版本状态)
    make bzImage  (编译压缩形式的大内核;大内核是相对于小内核,以前内核功能和外设不多时,通过make zImage编译小内核;现在一般只能编译大内核了。)
 生成的bzImage在/usr/src/linux/arch/x86/boot目录下。
    make modules   (编译选择的模块;因为选择了可加载模块,编译完内核后,要对选择的模块进行编译)。
    make modules_install  (将编译后的模块转移到系统标准位置,目录是/lib/modules/2.6.32。)
    make install   (执行之前,注意保存/boot目录下原有的vmlinuz和System.map指向的文件,以免覆盖。)

7:设置grub
  运行新内核之前,请检查一下/boot/grub/grub.conf的内容.。

8:重启
------------------------------------------------------------------------------------
问题解决

1:重启系统之后,出线报错 mount:could not find filesystem '/dev/root'
产生问题的主要原因是无法加载磁盘硬件的模块驱动。
解决方式主要是通过make menuconfig中加载sata sici的devices设备模块驱动。

如果你initrd中已包含了相应的SATA驱动,出现这种现象的原因就可能是因为initrd是旧版本mkinitrd生成的。解决方法就是加入对旧版sysfs路径的支持,方法有:

    a) 通过make menuconfig选中以下对应的选项

General setup--> [*] enable deprecated sysfs features to support old userspace tools

    b) 修改.config文件

   修改.config文件中CONFIG_SYSFS_DEPRECATED_V2

    CONFIG_SYSFS_DEPRECATED_V2=y #默认该选项为not set。  注:修改这项是因为旧版的mkinitrd及其nash在内核没有CONFIG_SYSFS_DEPRECATED_V2参数时默认使用旧版sysfs路径格式,从而在新内核下无法正确访问/sys内的硬盘信息节点。

参考了很多网络资料,部分链接如下,在此一并致谢!
http://www.linuxdiyf.com/blog/batch.viewlink.php?itemid=2277
声明:本人博客仅供个人学习用途,无意侵权;如果任何人有任何异议,请及时发消息通知本人修改。谢谢!
阅读(1180) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~