Linux内核配置和编译详解

本文详细介绍Linux内核的配置与编译流程,包括配置命令、编译选项、内核安装等步骤。同时介绍了内核配置系统的组成及其工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  版权声明本文章参考了《Linux内核官方文档》。未经作者允许,严禁用于商业出版,否则追究法律责任。网络转载请注明出处,这是对原创者的起码的尊重!!!


1 内核配置及编译

1.1 配置内核

  • $make mrproper——该命令确保目录下没有相关的文件和配置,如果已经编译过linux内核,建议使用该命令

  每个选项要么是二选一yes或no,要么是三选一yes、no、module。yes表示把代码编译进内核映像,module表示以模块方式编译。

  • $ make ARCH=xxx config——逐一遍历每个选项
  • $ make ARCH=xxx menuconfig——使用ncurse图形界面
  • $ make ARCH=xxx gconfig——使用图形界面工具,要求装有GTK+
  • $ make ARCH=xxx xconfig——要求装有Qt
  • $ make ARCH=xxx defconfig——直接使用默认配置

  内核配置好后,配置项存放在源代码内核源码根目录的.config文件中,可以直接修改该文件,修改后应该更新用$ make oldconfig更新配置。

  选项CONFIG_IKCONFIG_PROC把压缩过的内核配置文件放在/proc/config.gz中,如果当前内核启用了该选项,则可以直接克隆该配置。

  如果不想在命令行输入ARCH=XXX,则可以直接在顶层Makefile中进行修改。

1.2 编译内核

  • make cleanmake distclean,清楚之前编译产生的文件。

    • make clean仅仅是清除之前编译的可执行文件及配置文件。
    • make distclean 要清除所有生成的文件。
  • $make ARCH=xxx zImage或bzImage xxxxxx,编译内核,xxxxxx为make编译选项与参数,2.6版本之前每次编译需要运行$make dep

  • $make ARCH=xxx modules xxxxxx,编译模块,xxxxxx为编译选项。

  • 如果想减少编译时的垃圾信息可以使用

    • $make XXXX > 文件名 : 把编译细节、警告、错误输出到指定文件。
    • $make XXXX > /dev/null:不记录任何编译信息
  • 如果不想在命令行输入ARCH=XXX和CROSS_COMPILE=XXX,则可以直接在顶层Makefile中进行修改。

1.3 安装内核

  • make install,安装内核

1.4 安装模块

  • #make modules_install,安装模块

2 内核配置过程详解

  • Linux内核的配置系统由三个部分组成,分别是:

    • Makefile——分布在 Linux 内核源代码根目录及各层目录中,定义 Linux 内核的编译规则;
    • Kconfig——分布在 Linux 内核源代码根目录及各层目录中,给用户提供配置选择的功能;
    • scripts——分布在 Linux内核源代码根目录下,包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面、基于 Ncurses 图形界面以及基于 Xwindows 图形界面的用户配置界面,各自对应于 Make config、Make menuconfig 和 make xconfig)。

  

  • 当我们使用make menuconfig这个命令时(其它配置命令类似):

    • 首先由make编译生成scripts/kconfig/mconf.c生成scripts/kconfig/mconf。(xconfig对应qconf,gconfig对应gconf,config对应conf)
    • 然后执行scripts/kconfig/mconf Konfig
    • mconf程序读取内核根目录下的Kconfig文件,Kconfig载入了arch/$SRCARCH/Kconfigarch/$SRCARCH/Kconfig又分别载入各目录下的Kconfig文件,以此递归下去,最后生成主配置界面以及各级配置菜单。$SRCARCH是由顶层Makefile中定义的,它等于$ARCH,而$ARCH由Makefile或make的命令行参数指定。
    • 在完成配置后,mconf会将配置保存在Linux内核源代码根目录下的.config文件中。
  • 当我们使用make defconfig这个命令时:

    • 系统直接将arch/$SRCARCH/configs该目录存放内核的默认配置文件)下的对应的默认配置文件拷贝到Linux内核源代码根目录下的.config文件。

3 内核编译过程详解

  • 在输入编译命令后,make首先调用脚本来读取.config文件,并根据内容载入对应文件到include/config/,并将一些配置项写入include/config/auto.conf
  • 脚本程序将include/config/auto.conf中的配置项CONFIG_XXXX=y|m|xxx翻译为宏定义#define CONFIG_XXXX[_MODULE] 1|xxx,并写入include/generate/autoconf.h中。
  • autoconf.h作用就是将.config翻译为C语言当中能识别的头文件,以便在以后使用的时候作为宏定义出现,以实现条件编译。
  • make根据Makefile执行编译。

4 在内核中添加程序

  • 将源代码拷贝到内核源码的相应目录
  • 修改对应目录下的Kconfig文件,按照Kconfig语法增加对应的选项;
  • 修改对应目录下的Makefile文件完成编译选项的添加obj-$(CONFIG_symbol)+= filename.o

  版权声明本文章参考了《Linux内核官方文档》。未经作者允许,严禁用于商业出版,否则追究法律责任。网络转载请注明出处,这是对原创者的起码的尊重!!!


linux内核编译详解 。。。。。 Linux 编译内核详解 内核简介 内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件 网络系统,决定着系统的性能稳定性。 Linux 的 一 个 重 要 的 特 点 就 是 其 源 代 码 的 公 开 性 , 所 有 的 内 核 源 程 序 都 可 以 在 /usr/src/linux 下找到,大部分应用软件也都是遵循 GPL 而设计的,你都可以获取相应的源程 序代码。 全世界任何一个软件工程师都可以将自己认为优秀的代码加入到其中, 由此引发的 一个明显的好处就是 Linux 修补漏洞的快速以及对最新软件技术的利用。 Linux内核则 而 是这些特点的最直接的代表。 想象一下, 拥有了内核的源程序对你来说意味着什么?首先, 我们可以了解系统是如何 工作的。通过通读源代码,我们就可以了解系统的工作原理,这在 Windows 下简直是天方 夜谭。其次,我们可以针对自己的情况,量体裁衣,定制适合自己的系统,这样就需要重新 编译内核。在 Windows 下是什么情况呢?相信很多人都被越来越庞大的 Windows 整得莫名 其妙过。再次,我们可以对内核进行修改,以符合自己的需要。这意味着什么?没错,相当 于自己开发了一个操作系统, 但是大部分的工作已经做好了, 你所要做的就是要增加并实现 自己需要的功能。在 Windows 下,除非你是微软的核心技术人员,否则就不用痴心妄想了。 内核版本号 由于 Linux 的源程序是完全公开的, 任何人只要遵循 GPL, 就可以对内核加以修改并发 布给他人使用。Linux 的开发采用的是集市模型(bazaar,与 cathedral--教堂模型--对应) ,为 了确保这些无序的开发过程能够有序地进行, Linux 采用了双树系统。 一个树是稳定树 (stable ,另一个树是非稳定树(unstable tree)或者开发树(development tree) 。一些新特性、 tree) 实验性改进等都将首先在开发树中进行。如果在开发树中所做的改进也可以应用于稳定树, 那么在开发树中经过测试以后, 在稳定树中将进行相同的改进。 一旦开发树经过了足够的发 展,开发树就会成为新的稳定树。开发数就体现在源程序的版本号中;源程序版本号的形式 为 x.y.z:对于稳定树来说,y 是偶数;对于开发树来说,y 比相应的稳定树大一(因此,是 奇数) 到目前为止, 。 稳定树的最高版本是 2.2.16, 最新发布的 Redhat7.0 所采用的就是 2.2.16 的内核;开发树的最新版本是 2.3.99。也许你已经发现多网站上都有 2.4.0-test9-pre7 之类 的内核,但是这并不是正式版本。内核版本的更新可以访问 http://www.kernel.org/。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝月心语

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值