ImageVerifierCode 换一换
格式:DOCX , 页数:39 ,大小:174.09KB ,
资源ID:5427450      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5427450.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(linux内核配置makemenuconfig菜单详解.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

linux内核配置makemenuconfig菜单详解.docx

1、linux内核配置makemenuconfig菜单详解linux内核配置make menuconfig菜单详解前言一、配置系统的基本结构Linux内核的配置系统由三个部分组成,分别是:1、Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义 Linux 内核的编译规则; 2、配置文件(config.in(2.4内核,2.6内核)):给用户提供配置选择的功能; 3、配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面、基于 Ncurses 图形界面以及基于 Xwindows 图形界面的用户配置界面,各自对应于 Make confi

2、g、Make menuconfig 和 make xconfig)。这些配置工具都是使用脚本语言,如 Tcl/TK、Perl 编写的(也包含一些用 C 编写的代码)。本文并不是对配置系统本身进行分析,而是介绍如何使用配置系统。所以,除非是配置系统的维护者,一般的内核开发者无须了解它们的原理,只需要知道如何编写 Makefile 和配置文件就可以。二、makefile menuconfig过程讲解当我们在执行make menuconfig这个命令时,系统到底帮我们做了哪些工作呢?这里面一共涉及到了一下几个文件我们来一一讲解Linux内核根目录下的scripts文件夹arch/$ARCH/Kcon

3、fig文件、各层目录下的Kconfig文件Linux内核根目录下的makefile文件、各层目录下的makefile文件Linux内核根目录下的的.config文件、arm/$ARCH/下的config文件Linux内核根目录下的 include/generated/autoconf.h文件1)scripts文件夹存放的是跟make menuconfig配置界面的图形绘制相关的文件,我们作为使用者无需关心这个文件夹的内容2)当我们执行make menuconfig命令出现上述蓝色配置界面以前,系统帮我们做了以下工作: 首先系统会读取arch/$ARCH/目录下的Kconfig文件生成整个配置界

4、面选项(Kconfig是整个linux配置机制的核心),那么ARCH环境变量的值等于多少呢?它是由linux内核根目录下的makefile文件决定的,在makefile下有此环境变量的定义:或者通过 make ARCH=arm menuconfig命令来生成配置界面,默认生成的界面是所有参数都是没有值的 比如教务处进行考试,考试科数可能有外语、语文、数学等科,这里相当于我们选择了arm科可进行考试,系统就会读取arm/arm/kconfig文件生成配置选项(选择了arm科的卷子),系统还提供了x86科、milps科等10几门功课的考试题3)假设教务处比较“仁慈”,为了怕某些同学做不错试题,还给

5、我们准备了一份参考答案(默认配置选项),存放在arch/$ARCH/configs下,对于arm科来说就是arch/arm/configs文件夹:此文件夹中有许多选项,系统会读取哪个呢?内核默认会读取linux内核根目录下.config文件作为内核的默认选项(试题的参考答案),我们一般会根据开发板的类型从中选取一个与我们开发板最接近的系列到Linux内核根目录下(选择一个最接近的参考答案)#cp arch/arm/configs/s3c2410_defconfig .config4).config 假设教务处留了一个心眼,他提供的参考答案并不完全正确(.config文件与我们的板子并不是完全匹

6、配),这时我们可以选择直接修改.config文件然后执行make menuconfig命令读取新的选项 但是一般我们不采取这个方案,我们选择在配置界面中通过空格、esc、回车选择某些选项选中或者不选中,最后保存退出的时候,Linux内核会把新的选项(正确的参考答案)更新到.config中,此时我们可以把.config重命名为其它文件保存起来(当你执行make distclean时系统会把.config文件删除),以后我们再配置内核时就不需要再去arch/arm/configs下考取相应的文件了,省去了重新配置的麻烦,直接将保存的.config文件复制为.config即可.5)经过以上两步,我们

7、可以正确的读取、配置我们需要的界面了那么他们如何跟makefile文件建立编译关系呢?当你保存make menuconfig选项时,系统会除了会自动更新.config外,还会将所有的选项以宏的形式保存在Linux内核根目录下的include/generated/autoconf.h文件下内核中的源代码就都会包含以上.h文件,跟宏的定义情况进行条件编译。当我们需要对一个文件整体选择如是否编译时,还需要修改对应的makefile文件,例如:当我们需要对一个文件整体选择如是否编译时,还需要修改对应的makefile文件,例如: 我们选择是否要编译s3c2410_ts.c这个文件时,makefile会

8、根据CONFIG_TOUCHSCREEN_S3C2410来决定是编译此文件,此宏是在Kconfig文件中定义,当我们配置完成后,会出现在.config及autconf中,至此,我们就完成了整个linux内核的编译过程。 最后我们会发现,整个linux内核配置过程中,留给用户的接口其实只有各层Kconfig、makefile文件以及对应的源文件。 比如我们如果想要给内核增加一个功能,并且通过make menuconfig控制其声称过程 首先需要做的工作是:修改对应目录下的Kconfig文件,按照Kconfig语法增加对应的选项; 其次执行make menuconfig选择编译进内核或者不编译进内

9、核,或者编译为模块,.config文件和autoconf.h文件会自动生成; 最后修改对应目录下的makefile文件完成编译选项的添加; 最后的最后执行make zImage命令进行编译。以上内容摘自网络我们在linux内核裁剪过程中,进入内核所在目录,键入 make menuconfig 就会看到一堆的配置菜单,它们具体代表什么含义呢?我们该如何取舍呢?这里把近期收集到的一些信息做一个总结。make menuconfig图形化的内核配置make mrproper -删除不必要的文件和目录.#make config(基于文本的最为传统的配置界面,不推荐使用)#make menuconfig(

10、基于文本选单的配置界面,字符终端下推荐使用)#make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用)#make oldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)1、General setup 代码成熟度选项,它又有子项: 1.1、prompt for development and/or incomplete code/drivers 该选项是对那些还在测试阶段的代码,驱动模块等的支持。一般应该选这个选项,除非你只是想使用 LINUX 中已经完全稳定的东西。但这样有时对系统性能影响挺大。 1.2、Cross-compiler tool

11、 prefix 交叉编译工具前缀,例如:Cross-compiler tool prefix值为: (arm-linux-) 1.3、Local version - append to kernel release 内核显示的版本信息,填入 64字符以内的字符串,你在这里填上的字符口串可以用uname -a命令看到。 1.4、Automatically append version information to the version string 自动在版本字符串后面添加版本信息,编译时需要有perl以及git仓库支持 1.5、Kernel compression mode (Gzip) -

12、 有四个选项,这个选项是说内核镜像要用的压缩模式,回车一下,可以看到gzip,bzip2,lzma,lxo,一般可以按默认的gzip,如果要用bzip2,lzma,lxo要先装上支持 1.6、Support for paging of anonymous memory (swap) 使用交换分区或交换文件来做为虚拟内存,一定要选上。 1.7、System V IPC 表示系统的进程间通信Inter Process Communication,它用于处理器在程序之间同步和交换信息,如果不选这项,很多程序运行不起来,必选。 1.8、POSIX Message Queues POSIX标准的消息队列

13、,它同样是一种IPC。建议你最好将它选上 1.9、BSD Process Accounting 用户进程访问内核时将进程信息写入文件中。通常主要包括进程的创建时间/创建者/内存占用等信息。建议最好选上。 1.10、BSD Process Accounting version 3 file format 使用新的第三版文件格式,可以包含每个进程的PID和其父进程的PID,但是不兼容老版本的文件格式。2解释进程统计文件使用V3格式。注:V3格式是一种二进制的格式,如果想明码保存,则不应该选择此项。1.11、Export task/process statistics through netlink

14、 (EXPERIMENTAL) 通过netlink接口向用户空间导出任务/进程的统计信息,netlink是一种在内核与用户应用之间进行双向数据传输的非常好的方式,用户应用使用标准的socket API就可以使用netlink提供的强大功能。1.12、Enable per-task delay accounting (EXPERIMENTAL) 统计数据包含每个任务/进程的延时(y)1.13、Enable extended accounting over taskstats (EXPERIMENTAL) 统计数据包含扩展任务读取数据和发送数据使用的时间(y)1.14、Enable per-tas

15、k storage I/O accounting (EXPERIMENTAL) 统计数据包括I/O设备产生的字节数(y) 1.15、Auditing support 审记支持,用于和内核的某些子模块同时工作,例如Security Enhanced Linux。只有选择此项及它的子项,才能调用有关审记的系统调用。支持审计功能,某些内核模块需要它(SELinux,Security-Enhanced Linux)(y)1.16、Enable system-call auditing support 支持对系统调用的审计 开启系统调用的审计功能(y)1.17、RCU Subsystem - 非对称读写

16、锁系统 是一种新的kernel锁机制,适用于读多写少环境。对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它,但写者在访问它时首先拷贝一个副本,然后对副本进行修改,最后使用一个回调(callback)机制在适当的时机把指向原来数据的指针重新指向新的被修改的数据。(1)RCU Implementation (Tree-based hierarchical RCU) -RCU实现机制(X) Tree-based hierarchical RCU:CONFIG_TREE_RCU=y基于树的等级划分(2) Enable tracing for RCU:CONFIG_RCU_TRACE=y

17、打开RCU追踪(3)(32) Tree-based hierarchical RCU fanout valueCONFIG_RCU_FANOUT=32RCU树的分支数(4) Disable tree-based hierarchical RCU auto-balancing CONFIG_RCU_FANOUT_EXACT=y关闭RCU自动均衡功能(5)* Accelerate last non-dyntick-idle CPUs grace periodsCONFIG_RCU_FAST_NO_HZ=y提高非休眠CPU的使用时间1.18、 Kernel .config support y|m把编

18、译内核时使用的.config文件保存在编译好的内核中.1.19、(17) Kernel log buffer size (16 = 64KB, 17 = 128KB) 17内核日志缓存的大小。这个值是以2的平方取的,取值范围12-211.20、Control Group support -是一种进程管理机制,可以针对一组进程进行系统资源的分配和管理,可用于Cpusets,CFS(完全公平调度器),内存管理等子系统.此外,systemd与Docker/LXC等容器也依赖于它(不确定可以不选择)Control Group support Example debug cgroup subsystem

19、 /子系统调试例子 * Namespace cgroup subsystem /子系统命名空间 * Freezer cgroup subsystem Device controller for cgroups * Cpuset support * Include legacy /proc/cpuset file * Simple CPU accounting cgroup subsystem * Resource counters Memory Resource Controller for Control Groups/ cgroup内存资源控制器 * Group CPU scheduler

20、 - Block IO controller (NEW) 1.21、enable deprecated sysfs features to support old userspace tools在某些文件系统上(比如debugfs)提供从内核空间向用户空间传递大量数据的接口1.22、Kernel-user space relay support (formerly relayfs)内核系统区和用户区进行传递通讯的支持。这个选项在特定的文 件系统中提供数据传递接口支持,它可以提供从内核空间到用户空间的大批量的数据传递工具和设施。如果不清楚,选N。1.23、-*- Namespaces suppo

21、rt命名空间支持,允许服务器为不同的用户信息提供不 同的用户名空间服务 * UTS namespace 通用终端系统的命名空间。它允许容器,比如Vservers利用UTS命名空间来为不同的服务器提供不同的UTS。如果不清楚,选N。 * IPC namespace IPC命名空间,不确定可以不选 * User namespace (EXPERIMENTAL) User命名空间,不确定可以不选 * PID Namespaces PID命名空间,不确定可以不选 * Network namespace 1.24、Initial RAM filesystem and RAM disk (initramf

22、s/initrd) support 初始RAM的文件和RAM磁盘( initramfs /initrd)支持(如果要采用initrd启动则要选择,否则可以不选)1.25、Initramfs source file(s) / initrd已经被initramfs取代,如果你不明白这是什么 意思,请保持空白1.26、Optimize for size这个选项将在GCC命令后用 “-Os” 代替 “-O2参数,这样可以得到更小的内核。没必要选。一个编译好的内核才710多M,大家不会少这么点空间吧。选上了可能会出一些问题。最好不选。有时会产生错误的二进制代码。1.27、Configure standa

23、rd kernel features (for small systems) -配置标准的内核特性(为小型系统)。这个选项可以让内核的基本选项和设置无效或者扭曲。这是用于特定环境中的,它允许“非标准”内核。你要是选它,你一定要明白自己在干什么。这是为了编译某些特殊用途的内核使用的,例如引导盘系统。- Configure standard kernel features (for small systems) -*- Load all symbols for debugging/ksymoops /装载所有的调试符号表信息,仅供调试时选择 -*- Include all symbols in k

24、allsyms /在kallsyms中包含内核知道的所有符号,内核将会 增大300K * Do an extra kallsyms pass /除非你在kallsyms中发现了bug并需要 报告这个bug才打开该选项 1.28、Kernel Performance Events And Counters -CPU性能监听器,包括CPU同一时间执行指令数,cache miss数,分支预测失败次数(Branch misprediction)。调优其他程序时或许会用到,比如JVM-*- Kernel performance events and counters Kernel performance

25、 counters (old config option) (NEW) Debug: use vmalloc to back perf mmap() buffers (NEW) 选择内存分配管 理器(强烈推荐使用SLUB)( ) SLAB /各种环境通用的内存分配管理器 (X) SLUB (Unqueued Allocator) /更加优秀的内存分配管理器1.31、Profiling support剖面支持,用一个工具来扫描和提供计算机的剖面图。支持系统评测(对于大多数用户来说并不是必须的)1.32、OProfile system profiling(上一项关闭,这一项就没有了)OProfil

26、e评测和性能监控工具1.33、Kprobes /调试内核除非开发人员,否则不选1.34、GCOV-based kernel profiling - Enable gcov-based kernel profiling (NEW)1.35、Slow work debugging through debugfs (NEW)2、Enable loadable module support2.1 Forced module loading 允许强制加载模块 2.2 Module unloading 允许卸载已经加载的模块 2.3 Forced module unloading 允许强制卸载正在使用中的

27、模块(比较危险)这个选项允许你强行卸除模块,即使内核认为这不安全。内核将会立即移除模块,而不管是否有人在使用它(用 rmmod -f 命令)。这主要是针对开发者和冲动的用户提供的功能。如果不清楚,选N。 2.4 Module versioning support 有时候,你需要编译模块。选这项会添加一些版本信息,来给编译的模块提供独立的特性,以使不同的内核在使用同一模块时区别于它原有的模块。这有时可能会有点用。如果不清楚,选N。允许使用其他内核版本的模块(可能会出问题) 2.5 Source checksum for all modules 为所有的模块校验源码,如果你不是自己编写内核模块就不

28、需要它这个功能是为了防止你在编译模块时不小心更改了内核模块的源代码但忘记更改版本号而造成版本冲突。如果不清楚,选N。 3、Enable the block layer3、Enable the block layer 块设备支持,使用硬盘/USB/SCSI设备者必选这选项使得块设备可以从内核移除。如果不选,那么 blockdev 文件将不可用,一些文件系统比如 ext3 将不可用。这个选项会禁止 SCSI 字符设备和 USB 储存设备,如果它们使用不同的块设备。选Y,除非你知道你不需要挂载硬盘和其他类似的设备。不过此项无可选项 3.1 Support for large (2TB+) block

29、 devices and files 仅在使用大于2TB的块设备时需要 3.2 Block layer SG support v4 通用scsi块设备第4版支持 3.3 Block layer data integrity support 块设备数据完整性支持 3.4 IO Schedulers - /几乎默认IO调度器IO是输入输出带宽控制,主要针对硬盘,是核心的必須的东西。这里提供了三个IO调度器。 Deadline I/O scheduler 使用轮询的调度器,简洁小巧,提供了最小的读取延迟和尚佳的吞吐量,特别适合于读取较多的环境(比如数据库)Deadline IO调度器简单而又紧密,在性能上和抢先式调度器不相上下,在一些数据调入时工作得更好。至于在单进程IO磁盘调度上,它的工作方式几乎和抢先式调度器相同,因此也是一个好的选择。 CFQ I/O scheduler 使用QoS策略为所有任务分配等量的带宽,避免进程被饿死并实现了较低的延迟,可以认为是上述两种调度器的折中.适用于有大量进程的多用户系统CFQ调度器尝试为所有进程提供相同的带宽。它将提供平等的工作环境,对于桌面系统很合适。 Default I/O scheduler (CFQ) - 默认IO调度器我这样理解上面三个IO调度器: 抢先式是传统的,它的原理是一有响应,就优

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1