【转】内核编译时, 到底用make clean, make mrproper还是make distclean(转载)

原文网址:http://dongyulong.blog.51cto.com/1451604/449470

内核编译时, 到底用make clean, make mrproper还是make distclean

在编译内核时,  被make clean, make mrproer 和 make distclean搞的纠结, 稍微总结一下这三者之间的区别:
 
解压内核源码包后, 到内核源代码目录树的顶层目录, 执行
# make help
Cleaning targets:
  clean           - Remove most generated files but keep the config and
                    enough build support to build external modules
  mrproper        - Remove all generated files + config + various backup files
  distclean       - mrproper + remove editor backup and patch files
看帮助可以发现删除的文件范围从小到大依次为: make clean < make mrproper < make distclean, 查看源码目录树的顶层目录下的Makefile求证, 可以发现:
clean: archclean $(clean-dirs)
        $(call cmd,rmdirs)
        $(call cmd,rmfiles)
        @find . $(RCS_FIND_IGNORE) \
                \( -name ‘*.[oas]‘ -o -name ‘*.ko‘ -o -name ‘.*.cmd‘ \
                -o -name ‘.*.d‘ -o -name ‘.*.tmp‘ -o -name ‘*.mod.c‘ \
                -o -name ‘*.symtypes‘ -o -name ‘modules.order‘ \
                -o -name ‘Module.markers‘ \) \
                -type f -print | xargs rm -f
 
mrproper: clean archmrproper $(mrproper-dirs)
        $(call cmd,rmdirs)
        $(call cmd,rmfiles)
 
distclean: mrproper
        @find $(srctree) $(RCS_FIND_IGNORE) \
                \( -name ‘*.orig‘ -o -name ‘*.rej‘ -o -name ‘*~‘ \
                -o -name ‘*.bak‘ -o -name ‘#*#‘ -o -name ‘.*.orig‘ \
                -o -name ‘.*.rej‘ -o -size 0 \
                -o -name ‘*%‘ -o -name ‘.*.cmd‘ -o -name ‘core‘ \) \
                -type f -print | xargs rm -f
也就是说, 执行make mrproper, 会先执行make clean, 执行make distclean之前, 会先执行make mrproper。
再回到make help的结果:
make clean      删除大多数的编译生成文件, 但是会保留内核的配置文件.config, 还有足够的编译支持来建立扩展模块
make mrproper   删除所有的编译生成文件, 还有内核配置文件, 再加上各种备份文件
make distclean  mrproper删除的文件, 加上编辑备份文件和一些补丁文件。
 
其 实, 对于一个刚刚从kernel.org上下载的内核源码包, 可以不用执行make clean/make mrproper/make distclean, 因为源码包的状态本身就是clean的。
 
另外, 就算编译过内核之后, 需不需要clean一下,  个人觉得应该具体问题具体对待, 且看linuxsir上也有兄弟对这个问题有疑问:
Q: 很多内核编译的教程都说在make之前要先make mrproper,清除以前编译的产物。但编译器/链接器本身就会检查文件的日期,并确定是否需要重新编译/链接。如果清除了,很多以前已经编译过的代码 又得重新编译。如果说这样能节省硬盘空间的话,那只有那些先前编译过而现在不再需要的模块的空间被节省了,而代价则是编译时间延长了。个人觉得得不偿失, 至少不需要每次编译都来一次make mrproper。
 
A:  我没有make mrproper,每次修改内核配置后很快就能编译完成,很方便,也没发现什么问题
如果make不能确定那些文件要重新编译,那还要make做什 么
个人观点,尽信书则不如无书,实践出真知,呵呵
 
A:  不执行make mrproper是否出错,取决于Makefile的智能化程度。如果Makefile没能完成你所要求的全部改动,很可能编译出来的内核不如你所愿,甚 至可能导致panic。建议重新编译的时候注意看看改动是否都落实了。

时间: 2024-08-25 17:25:33

【转】内核编译时, 到底用make clean, make mrproper还是make distclean(转载)的相关文章

make clean、make mrproper、make distclean的区别【转】

本文转载自:http://blog.csdn.net/liyayao/article/details/6818061 内核编译时, 到底用make clean, make mrproper还是make distclean 在编译内核时,  被make clean, make mrproer 和 make distclean搞的纠结, 稍微总结一下这三者之间的区别: 解压内核源码包后, 到内核源代码目录树的顶层目录, 执行# make helpCleaning targets:  clean   

linux、内核源码、内核编译与配置、内核模块开发、内核启动流程(转)

linux是如何组成的?答:linux是由用户空间和内核空间组成的为什么要划分用户空间和内核空间?答:有关CPU体系结构,各处理器可以有多种模式,而LInux这样的划分是考虑到系统的安全性,比如X86可以有4种模式RING0~RING3  RING0特权模式给LINUX内核空间RING3给用户空间linux内核是如何组成的?答:linux内核由SCI(System Call Interface)系统调用接口.PM(Process Management)进程管理.MM(Memory Managem

OpenSUSE 内核编译教程 (kernel 2.6.x)

http://cn.opensuse.org/OpenSUSE_%E5%86%85%E6%A0%B8%E7%BC%96%E8%AF%91%E6%95%99%E7%A8%8B_(kernel_2.6.x) Contents [hide] 1 声明 2 简述 3 基础知识 3.1 什么是内核 3.2 什么是补丁 3.3 为什么要重新编译内核 3.4 若升级不成功,如何恢复官方内核 4 编译步骤 4.1 需求 4.2 下载内核源代码及补丁 4.2.1 哪里获得内核源码 4.3 给内核源代码打补丁 4.

Linux内核编译与安装

平台:虚拟机Ubuntu10.04 内核版本:3.0.80 ---------------------------------------------------------------------------------------------------- 内核的编译分为两种:X86平台和ARM嵌入式平台 一.X86 平台:虚拟机Ubuntu10.04 内核版本:3.0.80 1.下载(并安装)源码:linux-3.0.08 https://www.kernel.org/pub/linux/

Linux内核编译步骤

编译之前,一定要查看,内核源码中,Documentation/Changes文件,查看内核编译时,需要的运行环境,如果不适合编译和有可能失败. 由于2.4和2.6内核的编译方法不是完全一样,所以我们分开两种情况讨论 编译2.4内核:                                                         编译2.6内核 第一步:make mrproper -清理内核源代码树(清理垃圾信息)             make mrproper 第二步:mak

《鸟哥的Linux私房菜》读书笔记:Linux内核编译和管理

1.内核简介与获取内核源代码 1.1 什么是内核 kernel:内核(kernel)是整个操作系统的最底层,他负责了整个硬件的驱动,以及提供各种系统所需的内核功能,包含防火墙机制.是否支持LVM或Quota等文件系统.若你的内核不能识别某个最新的硬件,那该硬件也就无法被驱动,你当然也就无法使用该硬件.其实内核就是系统上面的一个档案而已, 这个档案包含了驱动主机各项硬件的侦测程序和驱动模块.内核档案一般放在/boot/vmlinuz目录下 内核模块(Kernel module)的用途:将一些不常用

linux内核编译与开发

一.Linux内核简介linux kernel map: linux 系统体系结构: linux kernel体系结构: arm有7种工作模式,x86也实现了4个不同级别RING0-RING3,RING0级别最高, 这样linux用户代码运行在RING3下,内核运行在RING0,这样系统本身就得到了 充分的保护 用户空间(用户模式)转到内核空间(系统模式)方法: ·系统调用 ·硬件中断 linux kernel 体系结构: 虚拟文件系统VFS: VFS(虚拟文件系统)隐藏各种文件系统的具体细节,

内核编译

核心:/boot/vmlinuz-version 模块:.ko/lib/modules/version/ 内核设计: 1.单内核:linux 模块化设计 2.微内核 装载模块: insmod modprobe www.kernel.org 用户空间访问,监控内核的方式: /proc /sys 伪文件系统 /proc/sys/:该目录下文件很多是可读写 /sys/:某些文件也是可读写的 设定内核参数的方法 清除cache和buffer : echo 1 >/proc/sys/vm/drop_cac

Linux入门之CentOS7内核编译三部曲(1)

Linux入门之CentOS7内核编译三部曲(1) 我们知道,一个Linux系统的主要组成是由liunx内核核心和一些支持模块组合而成的.但是在某些场合中,需要某项功能,而当前内核的核心或者模块不支持此功能,那么就需要对内核进行一个升级或者重新编译内核添加相应的功能,以此提供了对此功能的支持. 编译前的准备 认识kernel 所为kernel,就是一种操作系统的核心,当然也是一个文件,而这种核心提供了对一些硬件的支持,一般来说其中包含了一些对常见硬件核心驱动的核心代码.启动系统时会通过加载MBR