全部博文(142)
分类: 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引导界面你就可以看到新编译的内核选项了。 |