Linux内核裁剪的具体过程和方法
- 格式:doc
- 大小:166.50 KB
- 文档页数:26
Linux内核裁剪的具体过程和方法
根据部分网摘资料和实际烧录结果进行整理:
内核功能:
在能够实现AT91SAM9260开发板基本功能的基础上,通过串口连接上读卡器后能进行一系列的操作和控制功能等,将读卡器的相应数据进行存储或者通过网络传输到远程的PC机上。远程PC机能够通过网络方式在开发板上对所连接的读卡器参数进行更新配置,如设置天线接口、设置读卡方式等。(待与读卡器配套使用后再对内核的功能描述进行补充和完善。)
编译环境:
源代码解压完成后,进入linux 2.6.19目录下,使用VI命令编辑Makefile。确定编译环境为arm交叉编译工具与本机的安装路径一致ARCH = arm
CROSS_COMPILE = /opt/timesys/toolchains/armv5l-linux/bin/armv5l-linux-
内核版本是linux 2.6.19 ,开发板的版本是AT91SAM9260 BOARD V1.01 ,主机系统是ubuntu11.10
内核配置:
内核配置的方法很多,make config、make xconfig、make menuconfig、make oldconfig等等,它们的功能都是一样的,区别应该从名字上就能看出来,只有make oldconfig是指用系统当前的设置(./.config)作为缺省值。这里用的是make menuconfig。需要牢记:不必要的驱动越多,内核就越大,不仅运行速度慢、占用内存多,在少数情况下、还会引发其他问题。具体步骤如下:首先确定shell是bash。然后$make menuconfig。 有一些默认的符号其含义如下:"[ ]"表示该选项有两种选择方式;[*] 直接编译进内核;[] 不编译;"<>"表示该选项有三种选择方式; <*>直接编译进内核;
在menuconfig中配置:(详细介绍内核配置选项及删改情况)
第一部分:
Code maturity level options ---> 代码成熟等级选项
[]Prompt for development and/or incomplete code/drivers 默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动。当内核中含有不成熟的代码或驱动,需要选上,主要用在测试阶段。(产品成熟后,再去掉此选项) 这里选上
第二部分:
General setup ---> 通用的一些选项
2.1 () Local version - append to kernel release 在内核版本后追加的字符串,字符串不得超过64字节
2.2 [ ] Automatically append version information to the version string 自动在内核版本后追加的字符串,这个选项是与git库相关的,通常可以不选 这里不选
2.3 [ ] Support for paging of anonymous memory (swap) 支持交换内存,没有特殊要求请选择 这里不选
2.4 [*] System V IPC 进程间通信(IPC)支持,许多程序需要这个功能.必选,除非有自己的其他要求 这里选上
2.5 [ ] IPC Namespaces IPC命名空间支持,不确定可以不选 这里不选
2.6 [*] POSIX Message Queues POSIX消息队列,通常需要配置 这里选上
2.7 [ ] BSD Process Accounting 可以将行程资料记录下来,通常建议配置
《在读卡器项目中没用到此项功能,其后选项以后再进行相关说明》 这里不选
2.8 [ ] Export task/process statistics through netlink (EXPERIMENTAL) 通过netlink接口向用户空间导出任务/进程的统计信息,与BSD Process Accounting的不同之处在于这些统计信息在整个任务/进程生存期都是可用的 《在读卡器项目中没用到此项功能,其后选项以后再进行相关说明》 这里不选
2.9 [ ] UTS Namespaces UTS名字空间支持,不确定可以不选 这里不选
2.10 [*] Auditing support 审计支持,某些内核模块(例如SELinux)需要它,只有同时选择其子项才能对系统调用进行审计 这里选上
2.11 <*> Kernel .config support 把内核的配置信息编译进内核中,以后可以通过scripts/extract-ikconfig脚本来提取这些信息 这里选上
2.12 [*] Enable access to .config through /proc/config.gz
允许通过/proc/config.gz访问内核的配置信息 这里选上
2.13 [ ] Kernel->user space relay support (formerly relayfs) 在某些文件系统上(比如debugfs)提供从内核空间向用户空间传递大量数据的接口 这里不选
2.14 () Initramfs source file(s) initrd已经被initramfs取代,如果你不明白这是什么意思,请保持空白 这里不选
2.15 [*] Optimize for size (Look out for broken compilers!) 编译时优化内核尺寸(使用"-Os"而不是"-O2"参数编译),有时会产生错误的二进制代码 这里选上
2.16 Configure standard kernel features (for small systems) --->配置标准的内核特性(为小型系统)
2.16.1 --- Configure standard kernel features (for small systems)
配置标准的内核特性(为小型系统)
2.16.2 --- Load all symbols for debugging/kksymoops 装载所有的调试符号表信息,仅供调试时选择
2.16.3 [ ] Do an extra kallsyms pass 除非你在kallsyms中发现了bug并需要报告这个bug才打开该选项 这里不选
第三部分:
Loadable module support --->提供系统模块的选择配置
3.1 [*] Enable loadable module support 启用模块支持 这个选项可以让你的内核支持模块,模块是什么呢?模块是一小段代码,编译后可在系统内核运行时动态的加入内核,从而为内核增加一些特性或是对某种硬件进行支持。一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。在运行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以移除它)。一些特性是否编译为模块的原则是,不常使用的,特别是在系统启动时不需要的驱动可以将其编译为模块,如果是一些在系统启动时就要用到的驱动比如说文件系统,系统总线的支持就不要编为模块了,否在无法启动系统。 这里选上
3.2 [*] Module unloading
提供模块卸载功能。如果模块不需要卸载,可以不选择本选项 这里选上
3.3 [ ] Forced module unloading 强迫模块卸载 这里不选
3.4 [ ] Module versioning support
模块版本,如果选中,则该模块可以支持多种版本的内核 这里不选
3.5 [ ] Source checksum for all modules 源文件的校验和,可以不选 这里不选
3.6 [*] Automatic kernel module loading 自动装载模块的功能 这里选上
第四部分:
Block layer --->该菜单选项(Block layer)主要提供系统调度方式的选择
4.1 --- Enable the block layer
4.2 [ ] Support for tracing block io actions 支持追踪块I/O调度的动作
这里不选
4.3 IO Schedulers ---> 选择I/O调度方式
4.3.1 <*> Anticipatory I/O scheduler 占先式调度方式 这里选上
4.3.2 < > Deadline I/O scheduler 比Anticipatory更为小巧,在数据吞吐量非常大的数据库系统中表现得更有优势
这里不选(在后期实验后再定)
4.3.3 < > CFQ I/O scheduler 桌面系统适用,采用平均分配策略的调度
4.3.4 Default I/O scheduler (Anticipatory) ---> 选择默认的调度方式
4.3.4.1 (X) Anticipatory 这里选上
4.3.4.2 ( ) No-op 这里不选
第五部分:
System Type ---> 主要提供处理器型号及其特性的配置
5.1 ARM system type (Atmel AT91) ---> 从中选择适合的处理器型号,如我们选择Samsung S3C2410。当然下面一系列选项都是仅针对S3C2410处理器而设计的。它们的配置文件在arch/arm/mach-s3c2410/Kconfig文件中
5.1.5 (X) Atmel AT91 选择Atmel AT91系列,前面选项和后面选项都不选
5.2 Atmel AT91 System-on-Chip ---> 选择Atmel AT91系列芯片
5.2.1 Atmel AT91 Processor (AT91SAM9260) ---> 5.2.1.2 (X) AT91SAM9260 《针对读卡器项目选择》,其他选项都不选
5.2.2 [*] Atmel AT91SAM9260-EK Evaluation Kit 这里选上
5.2.3 [ ] Enable DataFlash Card support 这里不选
5.2.4 [ ] Enable 16-bit data bus interface to NAND flash 这里不选
5.2.5 [*] Programmable Clocks 这里选上
5.3 [*] Support ARM926T processor 这里选上
5.4 [ ] Support Thumb user binaries 如果希望内核支持用户空间的thumb程序就选择该选项 这里不选
5.5 [ ] Disable I-Cache (I-bit) 这里不选
5.6 [ ] Disable D-Cache (C-bit) 用于开启或关闭I-Cache 这里不选
5.7 [ ] Force write through D-cache 强制通过D-Cache写入 这里不选
5.8 [ ] Round robin I and D cache replacement algorithm 这里不选
第六部分:
Bus support ---> 主要选择总线PCCARD接口支持,大多数嵌入式系统可以不选择。
6.1 PCCARD (PCMCIA/CardBus) support ---> 总线PCCARD接口支持 《在读卡器项目中没用到此项功能,其子选项以后再进行相关说明》 这里不选
第七部分:
Kernel Features ---> 主要选择内核特性。这里针对ARM平台,一般可以采用默认值。
7.1 [ ] Preemptible Kernel (EXPERIMENTAL) 抢占式内核。这是2.6内核提供的新特性,建议使用 这里不选
7.2 [ ] Dynamic tick timer 动态tick定时器
这里不选
7.3 [ ] Use the ARM EABI to compile the kernel 使用ARM EABI编译内核 《在读卡器项目中没用到此项功能,其后选项以后再进行相关说明》
这里不选
7.4 Memory model (Flat Memory) ---> 这里只有Flat Memory可以选择
7.4.1 (X) Flat Memory 这里选上
7.5 [ ] 64 bit Memory and IO resources (EXPERIMENTAL) 这里不选
7.6 [ ] Timer and CPU usage LEDs 《在读卡器项目中没用到此项功能,其后选项以后再进行相关说明》 这里不选
第八部分:
Boot options --->主要选择内核启动选项,包括系统启动时传递的内核命令行参数
8.1 (0x0) Compressed ROM boot loader base address zImage存放的基地址
8.2 (0x0) Compressed ROM boot loader BSS address BSS地址
8.3 (mem=64M console=ttyS0,115200 root=/dev/mtdblock0) Default kernel
8.4 [ ] Kernel Execute-In-Place from ROM 从ROM中直接运行内核,该内核使用