linux-2.6.38的编译详细过程
来源:互联网 发布:iphone导入照片到mac 编辑:程序博客网 时间:2024/05/21 06:51
linux-2.6.38的编译详细过程
说明:
1.操作系统:SUSE Linux 10 SP3
2.操作系统内核版本:linux-2.6.16.60
3.编译内核版本:linux-2.6.38
内核下载地址:
linux-2.6.38 :http://www.kernel.org/pub/linux/kernel/v2.6/
知识储备:
关于内核文件和内核镜像文件
镜像是什么意思?怎么理解?
有玩过3C吗?有没有见过里面黑暗方的剑圣的分身,剑圣的镜像!
能辨析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文件)
--至于大家对具体配置有兴趣,我推荐一个牛人的网址,大家可以去研究
一下,配置项写的是我找到资料最详细:http://lamp.linux.gov.cn/Linux/kernel_options.html
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引导界面你就可以看到新编译的内核选项了。
- linux-2.6.38的编译详细过程
- 编译Linux内核的详细过程
- 编译Linux内核的详细过程
- 牛人给出的编译Linux内核的详细过程
- Wince的详细编译过程
- Wince的详细编译过程
- Wince的详细编译过程
- GCC编译hello.c的详细过程
- 编译链接过程的详细分析
- C语言编译的详细过程
- make输出详细的编译过程
- 【C语言】编译链接的详细过程
- QGIS编译详细过程
- Linux内核的编译过程
- linux内核的编译过程
- linux源码编译的过程
- linux添加硬盘的详细过程
- linux系统的详细启动过程
- Today is beautiful day,let's go to play~
- const 和 非const函数重载
- GDB使用手册
- 黑马学习-------------------android小游戏--飞机大战(初步)
- 数据库设计原则
- linux-2.6.38的编译详细过程
- 安卓软件管家(EasyAppManager)
- encrypted file system(NTFS) recovery--EFS
- 常春藤 ,高了
- eclipse、myeclipse 打开当前文件所在文件夹的方法
- Windows 的企业内存体系结构
- 安卓任务杀手(EasyTaskManager)
- 编写FireFox的Extension Hello World程序小结
- 微软算法数据结构100题解答 2:设计包含min函数的栈