网络安全参考 | UNIX参考 | GPS参考 | 无线参考 | 在线手册 | OSBUG.ORG | SUNNY-NETWORK.COM
天线制作 GPS 地标
网站地图 RSS订阅
高级搜索 收藏本站
Home | 业界动态 | Open source | GNU | Linux | BSD | Solaris | AIX | HP-UX | IRIX | Mac OS X | Minix | Tru64 | SCO UNIX | Network | Security | X-Window | Database | 应用服务 | Programming | 经典著作 | 永远的纪念 | 杂项
 当前位置: Home > Linux > 内核 > 文章  
配置、编译Linux系统内核的实用工具
文章来源: 赛迪网技术社区 文章作者: konmgwu 发布时间: 2007-01-08   字体: [ ]  
 

  GCC

  GCC是GNU的免费编译程序,也是内核惟一指定使用的编译器。GCC在执行一个完整的编译任务时会经过以下步骤:

  ◆预处理 GCC会调用cpp程序来分析各种宏指令,如#define、#if、#include等。
  ◆编译 这一阶段根据输入文件产生汇编语言指令。由于通常情况下是立即调用汇编程序as,所以输出一般不保存在文件中,可以使用-S选项强制输出源程序的汇编版本。
  ◆汇编 这一阶段将汇编语言源程序作为输入,生成.o目标文件。
  ◆链接 这是最后一个阶段。该阶段中,各个.o模块被链接在一起构成可执行文件。

  as 用户可以明确地要求使用as来直接处理汇编文件。as产生的目标文件可以分为文本段(.text)、数据段(.data)和未初始化数据段(.bss)。

  ld 与as相似,用户可以明确地要求使用ld链接程序将几个模块组合成一个单独的可执行文件。其链接过程通常由一个叫ld链接脚本的文件来描述。该脚本使用 Linker Command Language编写。使用“ld --verose”命令可以看到这个默认使用的ld链接脚本。

  ar ar是GNU的二进制文件处理程序,用于创建、修改及从归档文件中抽取文件。由它生成的.a归档文件实际上是一个包含许多可执行二进制代码子程序集合的库文件。

  RPMBuild 使用“make rpm”可以把内核源代码制作成RPM包。在此之前,kbuild会执行“make spec”生成rpmbuild程序用到的spec文件,详见“man rpmbuild”。

  中间件

  根目录scripts下的各种脚本和C源文件都可以称作中间件。它们并不是内核组件的一部分,只是在kbuild执行过程中的辅助程序。以split-include为例,讲述配置文件的运作机理。

  .config由关键字/值对组成,其内容类似于:

CONFIG_MPENTIUMIII=y
# CONFIG_MPENTIUM4 is not set
CONFIG_REISERFS_FS=m

  这些信息在执行“make ”时自动生成。同时include/linux/autoconf.h依照.config的内容生成。它的格式类似于:

#define CONFIG_MPENTIUMIII 1
#undef CONFIG_MPENTIUM4
#undef CONFIG_REISERFS_FS
#define CONFIG_REISERFS_FS_MODULE 1

  对比一下不难发现,include/linux/autoconf.h明确地洞悉了. config的意图:哪些组件不编译,哪些需要编译进内核,而哪些又要作为模块来编译?split-include根据 include/linux/autoconf.h在include/config/下建立相关的目录和.h文件。每个.h文件只包括 include/linux/autoconf.h中的某一行,比如在配置内核选项时支持NTFS文件系统,并把它编译进内核,在.config中就会生成“CONFIG_NTFS_FS=y”,相应地在include/linux/autoconf.h中会生成“#define CONFIG_NTFS_FS 1”一项。这样,所有与NTFS文件系统相关的C源文件都会包含include/config/ntfs/fs.h头文件。

  如果以前编译过内核,并且没有使用过“make mrproper”,.config、include/linux/autoconf.h和include/linux/config/就不会被删除。这里涉及到新旧内核的配置问题。一个全新的内核代码是未经配置的。如果只在原内核的功能基础上增加对NTFS的支持,那么从头开始配置无疑是浪费时间。可以继续使用原内核的.config文件,而所有的配置信息不会有任何更改,并且可以直接在原配置的基础上增加新功能。

  在复杂的情况下,保留的旧内核配置信息还要与新的配置信息进行比较:哪些旧信息需要覆盖,哪些需要保留?下面来看一下几种可能的情况:

The image “/upimg/allimg/20070221/1955030.jpg” cannot be displayed, because it contains errors.

  旧值保存在include/config/下的.h文件中,新值保存在新生成的 include/linux/autoconf.h文件中。split-include的代码不仅描述了如何处理这五种情况,还描述了 include/config/下文件和子目录的生成过程。

  (参考链接: http://linux.ccidnet.com/art/741/20070105/994795_2.html)

 
推荐文章
·浅谈关于Linux系统内核的源代码
·打造适合自己Slackware机器的内
·自己动手做一个最小的Linux kern
·一个Linux爱好者的2.6.11内核编
·定制Linux系统内核,发挥Linux潜
·如何编译一个操作系统内核-Ubunt
·重新编译Linux操作系统的内核指
·快速编译Linux内核需要的模块方
·编译内核以使其支持PS并口改装手
·编译支持NTFS的Linux系统内核模
·Linux操作系统的内核编译详细步
·Linux操作系统的内核编译内幕详
·Linux基础知识:内核编译-内核管
·教你一招,给Linux内核补IPVS补
 
 
共2页: 上一页 [1] 2 下一页
↑返回顶部   打印本页   关闭窗口↓  

Google
 
Web oldhand.org unixreference.net meshmea.org
相关分类
热点文章
·Linux中的Ramdisk与Init
·Linux 初始 RAM 磁盘(i
·一个Linux爱好者的2.6.1
·自己动手做一个最小的Li
·如何在Linux系统中添加
·如何编译一个操作系统内
·udev轻松上路
·Linux2.6内核驱动移植
相关文章
·让你的Linux内核重编译
·编译支持NTFS的Linux系
·编译内核以使其支持PS并
·Linux操作系统的内核编
·快速编译Linux内核需要
·Linux操作系统的内核编
·重新编译Linux操作系统
·Linux基础知识:内核编
更多...
 
 

Copyright(c) 2001-2009 OLDHAND ORGANIZATION, All Rights reserved.
Power by DedeCms 织梦内容管理系统