内核配置与裁剪

2019-07-13 08:59发布

Linux 内核的编译菜单有好几个版本,运行:
1)make config:进入命令行,可以一行一行的配置,这不好使用所以我们不具体介绍。
2)make menuconfig:进入我们熟悉的 menuconfig 菜单,相信很多人对此都不陌生。
3)make xconfig:在2.4.X 以及以前版本中 xconfig 菜单是基于 TCL/TK 的图形库的。
所有内核配置菜单都是通过 Config.in 经由不同脚本解释器产生.config。而目前刚刚推出的 2.6.X 内核用 QT 图形库。由 KConfig 经由脚本解释器产生。
我们以较稳定,且不够友好的menuconfig为主进行介绍。 在选择相应的配置时,有三种选择方式,它们分别代表的含义如下:
Y--将该功能编译进内核
N--不将该功能编译进内核
M--将该功能编译成可以在需要时动态插入到内核中的模块,只有<>才能选择M
如果你是使用的是 make xconfig,那使用鼠标就可以选择对应的选项。这里使用的是 make menuconfig,所以需要使用空格键进行选取。在每一个选项前都有一个括号, 有的是中括号有的是尖括号,还有圆括号。用空格键选择时可以发现,中括号里要么是空,要么是”“, 而尖括号里可以是空,”“和”M”这表示前者对应的项要么不要,要么编译到内核里;后者则多一样选择,可以编译成模块。而圆括号的内容是要你在所提供的几个选项中选择一项。
(注:其中有不少选项是目标板开发人员加的,对于陌生选项,自己不知道该选什么时建议
使用默认值)
下面我们来看看具体配置菜单,进入内核所在目录,键入 make menuconfig 你就会看到配置菜单具有如下一些项: 对于每一个配置选项,用户可以回答”y”、”m”或”n”。其中”y”表示将相应特性的支持或设备驱动程序编译进内核;”m”表示将相应特性的支持或设备驱动程序编译成可加载模块,在需要时,可由系统或用户自行加入到内核中去;”n”表示内核不提供相应特性或驱动程序的支持。

1. General setup(通用选项)

[*]Prompt for development and/or incomplete code/drivers,设置界面中显示还在开发或者还没有完成的代码与驱动,最好选上,许多设备都需要它才能配置。该选项是对那些还在测试阶段的代码,驱动模块等的支持。一般应该选这个选项,除非你只是想使用 LINUX 中已经完全稳定的东西。但这样有时对系统性能影响挺大。 [ ]Cross-compiler tool prefix,交叉编译工具前缀,如果你要使用交叉编译工具的话输入相关前缀。默认不使用。嵌入式linux更不需要。 [ ]Local version - append to kernel release,自定义版本,也就是uname -r可以看到的版本,可以自行修改,没多大意义。 [ ]Automatically append version information to the version string,自动生成版本信息。这个选项会自动探测你的内核并且生成相应的版本,使之不会和原先的重复。这需要Perl的支持。由于在编译的命令make-kpkg 中我们会加入- – append-to-version 选项来生成自定义版本,所以这里选N。 Kernel compression mode (LZMA),选择压缩方式。 [ ]Support for paging of anonymous memory (swap),交换分区支持,也就是虚拟内存支持,嵌入式不需要。 [*]System V IPC,为进程提供通信机制,这将使系统中各进程间有交换信息与保持同步的能力。有些程序只有在选Y的情况下才能运行,所以不用考虑,这里一定要选。 [*]POSIX Message Queues,这是POSIX的消息队列,它同样是一种IPC(进程间通讯)。建议你最好将它选上。 [*]BSD Process Accounting,允许进程访问内核,将账户信息写入文件中,主要包括进程的创建时间/创建者/内存占用等信息。可以选上,无所谓。 [*]BSD Process Accounting version 3 file format,选用的话统计信息将会以新的格式(V3)写入,注意这个格式和以前的 v0/v1/v2 格式不兼容,选不选无所谓。 [ ]Export task/process statistics through netlink (EXPERIMENTAL),通过通用的网络输出工作/进程的相应数据,和BSD不同的是,这些数据在进程运行的时候就可以通过相关命令访问。和BSD类似,数据将在进程结束时送入用户空间。如果不清楚,选N(实验阶段功能,下同)。 [ ]Auditing support,审计功能,某些内核模块需要它(SELINUX),如果不知道,不用选。 [ ]RCU Subsystem,一个高性能的锁机制RCU 子系统,不懂不了解,按默认就行。 [ ]Kernel .config support,将.config配置信息保存在内核中,选上它及它的子项使得其它用户能从/proc/ config.gz中得到内核的配置,选上,重新配置内核时可以利用已有配置 Enable access to .config through /proc/config.gz,上一项的子项,可以通过/proc/ config.gz访问.config配置,上一个选的话,建议选上。 (16)Kernel log buffer size (16 => 64KB, 17 => 128KB) ,内核日志缓存的大小,使用默认值即可。12 => 4 KB,13 => 8 KB,14 => 16 KB单处理器,15 => 32 KB多处理器,16 => 64 KB,17 => 128 KB。 [ ]Control Group support(有子项),使用默认即可,不清楚可以不选。 Example debug cgroup subsystem,cgroup子系统调试例子 Namespace cgroup subsystem,cgroup子系统命名空间 Device controller for cgroups,cgroups设备控制器 Cpuset support,只有含有大量CPU(大于16个)的SMP系统或NUMA(非一致内存访问)系统才需要它。 [ ]enable deprecated sysfs features to support old userspace tools,在某些文件系统上(比如debugfs)提供从内核空间向用户空间传递大量数据的接口,一般不选。 [ ]Kernel->user space relay support (formerly relayfs),内核系统区和用户区进行传递通讯的支持,这个选项在特定文件系统(relayfs)中提供数据接口支持,它可以支持从内核空间到用户空间的大批量数据传递的支持。不清楚可以不选。 [ ]Namespaces support,(有子项)命名空间支持,允许服务器为不同的用户信息提供不同的用户名空间服务,不清楚可以不选。 [ ]Initial RAM filesystem and RAM disk (initramfs/initrd) support,初始RAM的文件和RAM磁盘( initramfs /initrd)支持(如果要采用initrd启动则要选择,否则可以不选),不需要,不用选。嵌入式linux一般不选。 [ ]Optimize for size,优化大小,-Os代替-O2参数,可能会有二进制错误问题,一般不选。 (0)Default panic timeout,添0即可。 [*]Configure standard kernel features (for small systems),特殊内核用到,可以不选,嵌入式linux则必选。 [ ]Enable the Anonymous Shared Memory Subsystem,启用匿名共享内存子系统,不清楚可以不选。 [ ]Enable AIO support,支持AIO(Asynchronous I/O 异步事件非阻塞I/O),(包含aio.h, aio_read,向内核发出读命令,aio_write向内核写命令,详细见‘AIO介绍‘文档),AIO机制为服务器端高并发应用程序提供了一种性能优化的手段。加大了系统吞吐量,所以一般用于大型服务器,一般不用选。 [ ]Kernel Performance Events And Counters(有子项),不清楚,不选。 [*]Enable VM event counters for /proc/vmstat,允许在/proc/vmstat中包含虚拟内存事件记数器。 [*]Enable SLUB debugging support,支持SLUB内存分配管理器调试, [ ]Disable heap randomization,禁用随即head,选不选均可。 Choose SLAB allocator (SLUB (Unqueued Allocator)) —>, 选择内存分配管理器,强烈推荐使用SLUB。 [ ]Profiling support,剖面支持,用一个工具来扫描和计算计算机的剖面图,支持系统测评,一般开发人员使用,不选。 [ ]Kprobes,调试人员使用,不选。 GCOV-based kernel profiling —>(有子项),默认即可。

2. Enable loadable module support(可加载模块)

[ ]Forced module loading, 强行加载模块,不建议选。 [*]Module unloading,支持模块卸载,必须选上。 [ ]Forced module unloading,强行卸载模块,即使内核认为这样并不安全,也就是说你可以把正在使用中的模快卸载掉。如果你不是内核开发人员或者骨灰级的玩家,不建议选。 [ ]Module versioning suppor,这个功能可以让你使用其它版本的内核模块,除非特殊需要,一般不选。 [ ]Source checksum for all modules,这个功能是为了防止更改了内核模块的代码但忘记更改版本号而造成版本冲突,现在很少使用,不选。

3. Enable the block layer(块设备层)

[*]Support for large (2TB+) block devices and files,仅在使用大于2TB的块设备时需要 [*]Block layer SG support v4,通用SCSI设备第四版支持。 [*]Block layer data integrity support,块设备数据完整性支持。 [*]IO Schedulers —>(有子项),IO调度器 [ ]Anticipatory I/O scheduler,抢先式I/O调度器,大多数块设备只有一个物理查找磁头(例如一个单独的SATA硬盘),将多个随机的小写入流合并成一个大写入流,用写入延时换取最大的写入吞吐量.适用于大多数环境,特别是写入较多的环境(比如文件服务器) [ ]Deadline I/O scheduler,期限式I/O调度器,轮询的调度器,简洁小巧,提供了最小的读取延迟和尚佳的吞吐量,特别适合于读取较多的环境(比如数据库)。 [ ]CFQ I/O scheduler,使用QoS策略为所有任务分配等量的带宽,避免进程被饿死并实现了较低的延迟,可以认为是上述两种调度器的折中.适用于有大量进程的多用户系统CFQ调度器尝试为所有进程提供相同的带宽。它将提供平等的工作环境,对于桌面系统很合适。 Default I/O scheduler (CFQ) —>默认IO调度器有上面三个IO调度器:抢先式是传统的,它的原理是一有响应,就优先考虑调度。如果你的硬盘此时在运行一项工作,它也会暂停下来先响应用户。期限式则是:所有的工作都有最终期限,在这之前必须完成。当用户有响应时,它会根据自己的工作能否完成,来决定是否响应用户。CFQ则是平均分配资源,不管你的响应多急,也不管它的工作量是多少,它都是平均分配,一视同仁的。

4. System Type

(arm 占用配置,一般是厂家提供,与第7项代替了原有的Processor type and features)

5. [ ]FIQ Mode Serial Debugger,一般不选。

6. Bus support(总线支持)

PCI support,PCI总线支持,主板上最长用的插槽,最好选上,arm linux可以不选,arm一般没有PCI总线。 PCCard (PCMCIA/CardBus) support,一般笔记本有这种插槽,笔记本选上,arm linux 不选。

7. Kernel Features(内核特征)

[ ] Tickless System (Dynamic Ticks),非固定平率系统,能让内核运行的更有效率,并且省电,pc下可选,特别是笔记本,arm linux一般不用选。 [ ] High Resolution Timer Support,支持高频率时间发生器,需要硬件兼容,但大多数PC和ARM都不支持,不选 Memory split (2G/2G user/kernel split) —>,内核与用户空间各占2G,内核空间0-0x7FFFFFFF,用户空间80000000-FFFFFFFF Preemption Model (No Forced Preemption (Server)) —>,内核抢占模式。普通PC用户一般选2,arm linux 选1就可以。 No Forced Preemption (Server),禁止内核抢占,适合服务器环境。针对于高吞吐量的设计,但有可能延时较长,适用于服务器或科学运算,或向要最大的运算能力,而不理会调度上的延时。 Voluntary Kernel Preemption (Desktop),自愿内核抢占,适合普通的桌面环境。已降低吞吐量为代价,降低内核调度的最大延时,提供更快的应用程序响应,即使系统已经高负荷运转,应用程序仍然能运行的很“流畅”,适合用户桌面环境 Preemptible Kernel (Low-Latency Desktop),主动内核抢占,适合运行实时程序的环境。更低的吞吐量,进一步降低内核的调度延时,使应用程序更加流畅。 [ ]Compile the kernel in Thumb-2 mode,编译Thumb-2 mode内核,一般不选 [*] Use the ARM EABI to compile the kernel,与下面绑定配置。 [*] Allow old ABI binaries to run with this kernel (EXPERIMENTAL),对于嵌入式系统(jffs2 yaffs2),这两个要选上,否则很可能启动的时候报错(kernel panic- not syncing: Attempted to kill init!) [ ] High Memory Support (EXPERIMENTAL)(有子项), 1G物理内存以下不选,超过1G才选。(配置略有变化,以前的选项是OFF(<1G),4G(>1G && <4G),64G(>4G))。 Allocate 2nd-level pagetables from highmem,1G物理内存以下不选,超过1G(小于4G)才选 Allocate 3nd-level pagetables from highmem,大于4G,选择此项目。 Memory model (Flat Memory) —>,一般选”Flat Memory”,其他选项涉及内存热插拔。 [ ] Enable KSM for page merging,允许linux内核识别出包含相同内容的内存页,然后合并这些内存页,将数据整合在一个位置可以多次引用,特殊功能,不用选。 (4096) Low address space to protect from user allocation,默认4096即可 [ ] Use kernel mem{cpy,set}() for {copy_to,clear}_user() (EXPERIMENTAL),不清楚可以不选。
附:yaffs2 文件系统:Kernel panic - not syncing: Attempted to kill init! 在内核挂载根文件系统时,提示Kernel panic - not syncing: Attempted to kill init!的解决方法: 方法1: Kernel Features —> [*] Use the ARM EABI to compile the kernel [*] Allow old ABI binaries to run with this kernel (EXPERIMENTA) 方法2: 修改busybox的Makefile 修改 CC=$(CROSS_COPILE)gcc 为 CC=$(CROSS_COPILE)gcc -march=armv4t 一般海思编译器选择此选项,linux-gcc-3.4.5 以下的编译器,不用选,如果用4.3.3(支持EABI的编译器)以上的最好选上。

8. Boot options

一般不需要配置,u-boot会把启动参数传递给内核。如果bootloader没有传参数,可以配置启动参数,类似下面这样: (0x0) Compressed ROM boot loader base address (0x0) Compressed ROM boot loader BSS address (mem=32M console=ttySAC0 root=/dev/ram initrd=0x30800000,4M ramdisk_size=4096 rw) Default kernel command string

9. CPU Power Management

[ ] CPU idle PM support,允许软件控制的空闲进程电源管理,arm linux一般不用选。

10. Floating point emulation

(浮点运算,(arm专用)看arm是否支持硬浮点协处理器,支持的话选择VFP,不支持选择NWFPE) [ ] NWFPE math emulation [ ] FastFPE math emulation (EXPERIMENTAL) [*] VFP-format floating point maths [ ] Advanced SIMD (NEON) Extension support
  1. Userspace binary formats(二进制支持)
[*] Kernel support for ELF binaries,必须选,否则内核可能不能启动,其他可以全部不选, [ ] Write ELF core dumps with partial segments < > Kernel support for a.out and ECOFF binaries < > Kernel support for MISC binaries

11. Power management options(电源管理)

一般用于笔记本,PC和arm可以不选。 [*] Power Management support,选择此项,下面的项才能可见 [ ] Power Management Debug Support,调试用,不用选 [*] Suspend to RAM and standby,待机到内存,即内存供电而暂时关闭硬盘等外设。 < > Advanced Power Management Emulation,高级电源管理, [ ] Run-time PM core functionality,允许对运行中接入的I/O设备进行电源管理。

12. Networking support

(协议层的网络支持,socket等,硬件层的支持在Device Drivers中配置) Networking options —>,网络选项 <*> Packet socket,这种socket能够让应用程序(tcpdump,iptables)直接与网络设备通讯,而不通过内核中的其他中介协议,最好选上。 <*> Unix domain sockets,一种仅运行于本机上的效率高于TCP/IP 的socket,简称Unix socket.许多程序都使用它在操作系统内部进行进程间通信(IPC),比如X Window 和syslog,最好选上。 < > Transformation user configuration interface,为IPsec(可在ip层加密)之类的工具提供XFRM 用户配置接口支持,不清楚可以不选。 [ ] Transformation sub policy support (EXPERIMENTAL),XFRM子策略支持,仅供开发者使用,不清楚不要选。 [ ] Transformation migrate database (EXPERIMENTAL), [ ] Transformation statistics (EXPERIMENTAL), < > PF_KEY sockets,用于可信任的密钥管理程序和操作系统内核内部的密钥管理进行通信,IPsec也依赖于它,可以不选。 [ ] PF_KEY MIGRATE (EXPERIMENTAL),子项,不用选。 [*] TCP/IP networking,TCP/IP协议,必须要选 [*] IP: multicasting,群组广播,选上 [] IP: advanced router,高级路由功能,做路由器的话选上,可以不选。 Choose IP: FIB lookup algorithm (choose FIB_HASH if unsure) (FIB_HASH),子项,不懂的话就选FIB_HASH吧 [ ] IP: policy routing,策略路由,不清楚可以不选。 [ ] IP: equal cost multipath,用于路由的基于目的地址的均衡。不清楚可以不选。 [ ] IP: verbose route monitoring,显示冗余的路由监控信息,可以不选 [ ] IP: kernel level autoconfiguration,内核启动时自动配置IP地址、路由表等,需要从网络启动的无盘工作站需要这个,普通用户不需要。 < > IP: tunneling,IP隧道,将一个IP报文装在另一个IP报文的技术。不清楚不用选。 < > IP: GRE tunnels over IP,基于IP的GRE(通用路由封装)隧道,不清楚可以不选。 [] IP: multicast routing,多重传播路由,没有特殊需求可以不选。 [ ] IP: multicast policy routing,子项,不清楚可以不选 [ ] IP: PIM-SM version 1 support,子项,不清楚可以不选 [ ] IP: PIM-SM version 2 support,子项,不清楚可以不选 [ ] IP: ARP daemon support,废弃功能,不选。 [ ] IP: TCP syncookie support,抵抗SYN flood攻击的好东西,要启用它必须同时启用/proc文件系统和”Sysctlsupport”, 然后在系统启动并挂载了/proc 之后执行”echo 1>/proc/sys/net/ipv4/tcp_syncookies”命令,不清楚可以不选。 < > IP: AH transformation,IPsec验证头(AH),实现了数据发送方的验证处理,可确保数据既对于未经验证的站点不可用也不能在路由过程中更改,不清楚可以不选。 < > IP: ESP transformation,IPsec封闭安全负载(ESP),实现了发送方的验证处理和数据加密处理,用以确保数据不会被拦截/查看或复制。不清楚可以不选。 < > IP: IPComp transformation,IPComp(IP静荷载压缩协议),用于支持IPsec,不清楚可以不选。 < > IP: IPsec transport mode,IPsec传输模式,常用于对等通信,用以提供内网安全.数据包经过了加密但IP头没有加密,因此任何标准设备或软件都可查看和使用IP头,不清楚可以不选。 < > IP: IPsec tunnel mode,IPsec隧道模式,用于提供外网安全(包括虚拟专用网络).整个数据包(数据头和负载)都已经过加密处理且分配有新的ESP 头/IP 头和验证尾,从而能够隐藏受保护站点的拓扑结构,不清楚可以不选。 < > IP: IPsec BEET mode,IPsec BEET模式,不清楚可以不选。 [*] Large Receive Offload (ipv4/tcp),针对 TCP 流量的 LRO (Large Receive Offload) 支持,选上。 <*> INET: socket monitoring interface,socket监视接口,一些Linux 本地工具(如:包含ss的iproute2)需要使用它,选上 [] TCP: advanced congestion control —>,高级拥塞控制,如果没有特殊需求(比如无线网络)就别选了,内核会自动将默认的拥塞控制设为”Cubic”并将”Reno”作为候补,可以不选。如果网络用处较多,还是选上为好(如网络视频服务器)。 关于拥塞控制,见tcp拥塞控制.doc文档。 [ ] TCP: MD5 Signature Option support (RFC2385) (EXPERIMENTAL),不清楚可以不选。 <*> The IPv6 protocol —>,IPV6支持的话,就选上, [*] Only allow certain groups to create sockets,只允许特定的群体创建socket,选上,没什么坏处。 [*] Network activity statistics tracking,最好选上。 …….网络选项中,后面的不清楚的话 可以不选,选上基本几项,网络就可以工作了,有时间进一步深入研究。 -*- Wireless —>(无线,没有无线网卡的话可以不选) <*> cfg80211 - wireless configuration API,暂时未会,使用默认配置

13. Device Drivers(设备驱动)

Generic Driver Options —>,通用选项 (/sbin/mdev) path to uevent helper,不理解,用的默认值 [ ] Maintain a devtmpfs filesystem to mount at /dev,让devtmpfs文件系统安装在/dev,不清楚可以不选。 [*] Select only drivers that don’t need compile-time external firmware,只显示那些不需要内核对外部设备的固件作map支持的驱动程序,除非你有某些怪异硬件,否则请选上。 [ ] Prevent firmware from being built,不编译固件(固化的软件,如bios).固件一般是随硬件的驱动程序提供的,仅在更新固件的时候才需要重新编译。可以不选,但想要更新固件的话就要重新编译内核了。 {*} Userspace firmware loading support,提供某些内核之外的模块需要的用户空间固件加载支持,在内核树之外编译的模块可能需要它,选上。 [*] Include in-kernel firmware blobs in kernel binary () External firmware blobs to build into the kernel binary < > Connector - unified userspace <-> kernelspace linker —>,用户空间和内核空间连接器,工作在netlink socket协议的顶层,不清楚可以不选。 <*> Memory Technology Device (MTD) support —>,特殊的存储技术,如常用语数码相机或嵌入式系统的闪存卡,一般是NOR flash和Nand的支持,arm linux必选,PC不用选。 [ ] Debugging,调试模式,不选。 < > MTD tests support,MTD测试支持,不清楚可以不选。 < > MTD concatenating support,连接多个MTD设备,例如使用JFFS2文件系统管理多片Flash的情形。只有一片Flash时不选。 [*] MTD partitioning support,分区支持,选上。 < > RedBoot partition table parsing,使用RedBoot解析Flash分区表,如果需要读取这个分区表的信息选择此项 [*] Command line partition table parsing,允许通过内核命令行传递MTD分区表信息, < > ARM Firmware Suite partition parsing,使用AFS分区信息 < > TI AR7 partitioning support,AR7分区支持 <*> Direct char device access to MTD devices,将系统中的MTD设备看做字符设备进行读写,需要与驱动同步的。 -*- Common interface to block layer for MTD ‘translation layers’ <*> Caching block device access to MTD devices,文件系统挂载后,模拟块设备进行访问。常用于只读文件系统。如果是DiskOnChip使用NFTL方式。 < > FTL (Flash Translation Layer) support,提供对Flash翻译层支持,可以不选 < > NFTL (NAND Flash Translation Layer) support,NAND Flash翻译层支持,可以不选 < > INFTL (Inverse NAND Flash Translation Layer) support,提供INFTL支持,DiskOnChip使用 < > Resident Flash Disk (Flash Translation Layer) support,提供RFD支持,为嵌入式系统提供类似BIOS功能,不清楚可以不选,使用Uboot驱动的话也不用选。 < > NAND SSFDC (SmartMedia) read only translation layer,NAND SSFDC只读翻译层,不清楚可以不选。 < > SmartMedia/xD new translation layer,不清楚可以不选。 < > Log panic/oops to an MTD buffer,MTD缓冲日志,不清楚可以不选。 RAM/ROM/Flash chip drivers —>,RAM/ROM/Flash芯片驱动,不清楚可以不选。 Mapping drivers for chip access —>,为芯片的访问方式选择Mapping驱动,不清楚可以不选。 Self-contained MTD device drivers —>,自身包含MTD设备驱动,一般不选。 < > Include chip ids for known NAND devices.,NAND flash信息,不用选。 < > NAND Device Support —>,Nand设备支持,有nand的话选上,子项默认配置即可,如果支持Nand,加选这一项就够了。 < > OneNAND Device Support —>,One nand支持,不清楚可以不选。 LPDDR flash memory drivers —>,LPDDR Flash内存驱动,未用,不用选。 UBI - Unsorted block images —>未分类block影响,不清楚不选。 附:配置支持jffs2两步 1) 在“memory technology devices(mtd)”选项中选择: <*>memory technology device(mtd)support <*>mtd partitioning support <*>cashing block device access to mtd devices ram/rom/flash chip drivers—> <*> detect flash chips by common flash interface(cfi) probe <*> support for intel/sharp flash chips mapping drivers for chip access—> <*> cfi flash device in physical memory map (0) physical start address of flash mapping (1000000)physical length of flash mapping (2)buswidthin octets <*> intel strataflash device mapped on at91rm9200 这里设置了flash芯片的起始地址、大小以及宽度,比如:起始地址为“0”,大小为“1000000”,即16mb,宽度为“2”,即16字节。然后选中自己加入的“intel strataflash device mapped on at91rm9200”这一项 2) 在“file systems”选项中选择: <*>joumalling flash file system v2(jffs2)support 对于其他功能,可根据自己的实际情况,进行裁减,然后保存退出,接下来编译出操作系统内核映像。(详细见 linux支持nor flash.txt 文档) < > Parallel port support —>,配置并口,如打印机,arm linux可以不用配置 < > PC-style hardware (NEW), < > AX88796 Parallel Port (NEW), [ ] IEEE 1284 transfer modes (NEW), [*] Block devices —>,块设备,一般都不用选,除非有特殊需要 < > Loopback device support,拿文件来模拟块设备,想要mount ios文件的话必须选上,一般不选。 < > Network block device support,网络块设备支持,让PC成为网络块设备的客户端。一般不选 < > Low Performance USB Block driver,低性能USB块设备驱动程序,一般不选。 <*> RAM block device support,RAM块设备支持,子选项保持默认就好了。 < > Packet writing on CD/DVD media,不清楚可以不选。 < > ATA over Ethernet support,不清楚可以不选。 [*] Misc devices —>,混杂设备驱动,一般不选。 < > ATA/ATAPI/MFM/RLL support (DEPRECATED) —>,不清楚可以不选。 SCSI device support —>,支持u盘的话,需要选上。 < > RAID Transport Class,不清楚可以不选。 <*> SCSI device support,支持u盘选上,子选项默认配置即可。 < > Serial ATA and Parallel ATA drivers —>,SATA和PATA支持,没有硬盘的话可以不选。 [ ] Multiple devices driver support (RAID and LVM) —>,特殊服务器管理用到,如LVM,一般用户不会用到,不用选, [*] Network device support —>,网络设备支持,必选。包括前兆网卡,PPPOE等的支持。 [*] HID Devices —>,HID支持,选上 [*] USB support —>,USB支持,选上 <*> MMC/SD/SDIO card support —>,SD卡支持,选上。 …… 其他选项根据需求来。在嵌入式linux中一般IIC SPI等device都自己写驱动,不用选。

14. File systems(文件系统)

<*> Second extended fs support,EXT2文件系统支持。 [*] Ext2 extended attribute,EXT2文件系统支持。 <*> Ext3 journalling file system support,EXT3文件系统支持,子项默认就行。 <*> The Extended 4 (ext4) filesystem ,EXT4文件系统支持,子项默认就行。 …… 有JFS(IBM所用)文件系统等,省略,用的不多。 …… [*] Enable POSIX file locking API,使能POSIX文件锁的API,最好选上。 [*] Dnotify support,基于目录的文件变化的通知机制,不选nfsd起不来,比选的。 [ ] Inotify file change notification support,新式的文件体统的变化通知机制,用以替代老旧的Dnotify,选了Dnotify就不要选它了。 [*] Inotify support for userspace,用户空间的Inotify支持,最好选上。(notify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建)。 <*> FUSE (Filesystem in Userspace) support,允许在用户空间实现一个文件系统,如果打算开发一个自己的文件系统或使用一个机遇FUSE的文件系统,最好打开。 <*> Character device in Userpace support,允许在用户空间实现一个字符设备, -*- Miscellaneous filesystems —>,杂项文件系统,子项很复杂,主要配置jffs2 和 yaffs2文件系统,一般用于嵌入式设备。 [*] Network File Systems —>,网络文件系统,NFS等。 …… 其他没有特殊需求可以不选。

15. Kernel hacking

(内核hack选项,基本上选Enable __must_check logic和Stacktrace就可以了,有需要再深入研究) [ ] Show timing information on printks,在printk的输出中包含时间信息,可以用来分析内核启动过程各步骤所用时间,需要时选上。 [ ] Enable __deprecated logic,不清楚不要选。 [*] Enable __must_check logic,在编译内核的过程中使用”必须检查”的逻辑,禁用它将不会显示某些警告信息,选上。 [ ] Magic SysRq key,不懂,千万别选。 [ ] Strip assembler-generated symbols during link,,不清楚不要选。 [ ] Enable unused/obsolete exported symbols,没用的信息符号,会使内核增大,不选. [ ] Debug Filesystem,不是内核开发者的别选。 [ ]Run ‘make headers_check’ when building vmlinux,在编译内核时运行’make headers_check’命令检查内核头文件,当你修改了与用户空间相关的内核头文件后建议启用该选项。 [ ] Kernel debugging,不是内核开发者的别选。 [ ] SLUB debugging on by default,不清楚不要选。 [ ] Enable SLUB performance statistics,不清楚不要选。 [*] Stacktrace,支持调用栈,用于出错排查问题。 [ ] Debug memory initialization,调试内存初始化,不选, [ ] Check for stalled CPUs delaying RCU grace periods ,检查停止CPU延缓RCU的宽限期, [ ] Latency measuring infrastructure,不清楚不要选。 [ ] Sysctl checks,不清楚不要选。 [ ] Tracers —>,不清楚不要选。 [ ] Perform an atomic64_t self-test at boot,不清楚不要选。 [ ] Sample kernel code —> ,不清楚不要选。 [*] Enable stack unwinding support,可以不选(31没选)。 [*] Verbose user fault messages,可以不选(31没选)。 [ ] On-chip ETM and ETB,片上ETM、ETB,不清楚可以不选。

16. Security options(安全选项,一般不需要配置,)

[ ] Enable the /proc/keys file by which keys may be viewed,允许有权限的进程通过/proc/keys读取所有的key,最好不要选。 [ ] Restrict unprivileged access to the kernel syslog,限制未经授权访问内核日志。 [ ] Enable different security models,允许内核选择不同的安全模式,如果未选择按默认处理。 [*] Enable the securityfs filesystem,不清楚可以不选(16没选)。 Default security module (Unix Discretionary Access Controls) —>,默认安全模式。

17. Cryptographic API(支持的加密算法)

加密API ,这部分选项会根据此前的优化自动调整,默认即可。

18. Library routines(库子程序)

库子程序,这部分选项会根据此前的优化自动调整,默认即可 。