Chinaunix首页 | 论坛 | 博客
  • 博客访问: 807808
  • 博文数量: 142
  • 博客积分: 3505
  • 博客等级: 中校
  • 技术积分: 1501
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-30 19:30
文章分类

全部博文(142)

文章存档

2012年(33)

2011年(109)

分类: LINUX

2011-08-05 20:55:02

虽然是转载,但是我自己做了一遍,基本上没有什么问题。:)
说明:
      1.操作系统:SUSE Linux 10 SP3
      2.操作系统内核版本:linux-2.6.16.60
      3.编译内核版本:linux-2.6.38.8

内核下载地址:
      linux-2.6.38 :

知识储备:

关于内核文件和内核镜像文件

镜像是什么意思?怎么理解?
有玩过3C吗?有没有见过里面黑暗方的剑圣的分身,剑圣的镜像!【YUAN】我没玩过。。。

能辨析Image,vmlinux,zImage,bzImage,vmlinuz,uImage之间的联系吗?
make编译内核成功之后,你会在你编译的内核源码目录下面发现vmlinux文件

1.Image:  objcopy处理过的只含有内核代码,数据的文件(代码段,数据段?),Image一般位于/arch/x86/boot/Image
(那么/arch/i386/boot/Image是啥?集合成员,x86是一个系列,包括386)

2.vmlinux:是经过压缩的Image然后加入解压头的elf格式的文件(最初级的内核镜像文件?)

3.vmlinuz :可引导的,压缩的内核,位于/boot/目录下,其实它是一个连接符号文件,一般是指向/boot/目录下面的
vmlinuz-2.X.XX,那么vmlinuz-2.X.XX又是哪里来的呢?是/arch/i386/boot/bzImage(由make bzImage命令产生)
移到/boot/目录下,然后mv bzImage vmlinuz-2.X.XX形成的。

4.zImage:经过objcopy处理,可直接加载到内存执行的内核镜像,zImage有大小限制,大于512k将不能加载启动。
下面看下zImage和bzImage的出处吧,其实就是异卵双胞胎。

               --->gzip----->make zImage---->zImage(路径在哪里?)
              |
vmlinux--
              |
               --->gzip----->make bzImage---->/arch/x86/boot/bzImag

5.uImage:它是U-Boot的专用内核镜像,其实就是zImage加上了64字节长(0x40位置)的"文件头",这个文件头
说明内核的版本,加载位置,生成时间,大小信息等,嵌入式方向的同志应该多了解一些,这里就不深究了。


主要目录说明:

/usr/src/
主要目标文件:
linux-2.X.XX
linux-2.X -> linux-2.X.XX

/usr/src/linux-2.X.XX   内核源码(目录树)
主要目标文件:
System.map   --make install过程是自动会被拷贝到/boot/目录下,并创建软连接System.map-2.X.XX

/lib/modules/2.X.XX  内核模块
modules.dep //各个模块的依赖关系

/boot/
主要目标文件:
System.map -> System.map-2.X.XX (软连接)
vmlinuz -> vmlinuz-2.X.XX (软连接)

/boot/grub/
主要目标文件:
menu.lst


内核编译命令过程:

1.拷贝到/usr/src/目录下面,并使用tar -jxvf linux-2.6.38.tar.bz2命令解压

2.创建连接文件ln -s linux-2.6.38 linux-2.6

3.进入linux-2.6.38目录

make mrproper  --删除之前的内核编译配置文件.config(第一次编译可以不用)

make menuconfig --这里至于具体的需求配置,就要根据个人需求来了,初学者还是直接
                               默认选项吧(建议备份原先的.config文件)
                            --至于大家对具体配置有兴趣,我推荐一个牛人的网址,大家可以去研究
                            一下,配置项写的是我找到资料最详细:

make --可能会有错,一般出现在Documentation里面。提示某些头文件找不到,原因可能是
                            你机子上/usr/src/linux-2.x.xx的源码没有安装好,或是指定目录下的
                             头文件不纯在,可以根据make的提示信息去找下原因,我的土办法就是
                             将#include <> 改成绝对路径)

make modules  --该命令会在/lib/modules/产生对应内核版本的内核模块目录,例如2.X.XX

make modules_install

make install  --这里是个万能命令,它替你办了好多事,包括make bzImage,然后将内核源码
                    目录下面的/arch/i386/boot/的bzImage拷贝到/boot/目录下,并改名为vmlinuz-2.X.XX,
                    同时建立软连接vmlinuz(由命令ln -s vmlinuz-2.X.XX vmlinuz得到);其次内核源码目录下
                    面的System.map被拷贝到/boot/目录下,并建立软连接System.map-2.X.XX。当然
                    /boot/grub/menu.lst也自动做了修改。

reboot --重启,在grub引导界面你就可以看到新编译的内核选项了。
阅读(4036) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~