概述
1. BSP包裁剪主要包括两个部分
- kernel裁剪
- rootfs裁剪
2. kernel裁剪涉及的部分主要分为:
- 调试工具和调试信息的裁剪
- File systems 的裁剪
- driver的裁剪
- 杂项优化
在内核目录运行make ARCH=平台 menuconfig,通过配置内核进行裁剪。
调试工具和调试信息的裁剪
kernel 支持了非常多的调试工具,同时也能支持向proc等导出调试信息,这对于开发调试有很多用处,但也大大加大了内核的尺寸,如果一个产品准备量产,为了优化BSP的大小,可以去掉内核的调试工具和调试信息,其中主要涉及到的有General setup 和 kernel hacking 两个配置选项。
1. General setup
(1)General setup介绍
General setup是代码成熟度配置选项,主要配置编译的工具,编译的优化选项,软件子系统的支持等,对于General setup中各个选项的含义,可以参考如下:
详细说明 | ||||||||||||||||||
裁剪选项:General setup | 作用 | 优化大小:537784 | ||||||||||||||||
<>kernel .config support | 把内核的配置信息编译进内核中,以后可以通过scripts/extract-ikconfig脚本从内核镜像中提取这些信息 | |||||||||||||||||
<>Contorl Group support相关子选项 | ||||||||||||||||||
-->Example debug cgroup subsystem | 导出cgroups框架的调试信息,仅用于调试目的. | |||||||||||||||||
<>Confugure standard kernel features | ||||||||||||||||||
-->Load all symbols for debugging/ksymoops | ||||||||||||||||||
-->Include all sysmbols in kallsyms | 在/proc/kallsyms中包含内核知道的所有符号,内核将会增大300K,仅在你确实需要的时候再开启 | |||||||||||||||||
<>Enable VM event counters for /proc/vmstat | "/proc/vmstat"中包含了从内核导出的虚拟内存的各种统计信息.开启此项后可以显示较详细的信息(包含各种事件计数器),关闭此项则仅仅显示内存页计数.主要用于调试和统计 | |||||||||||||||||
<>Profiling support | 添加扩展的性能分析支持,可以被OProfile之类的工具使用.仅用于调试目的. | |||||||||||||||||
<>Kprobes | Kprobes是一个轻量级的内核调试工具,能在内核运行的几乎任意时间点进行暂停/读取/修改等操作的调试工具.仅供调试使用. | |||||||||||||||||
Support initial ramdisks compressed using bzip2 | 支持经过以下压缩后的格式 | |||||||||||||||||
Support initial ramdisks compressed using LZMA | ||||||||||||||||||
Support initial ramdisks compressed using XZ | ||||||||||||||||||
Support initial ramdisks compressed using LZO |
(2) General setup部分调试选项
Kernel .config support
作用:支持通过proc/config.gz接口来查看.config的配置
IRQ subsystem
--> Expose hardware/virtual IRQ mapping via debugfs
作用:通过defugfs可以查看硬件中断号跟Linux irq 号的对应关系
CPU/Task time and stats accounting
--> Expose task/process statistics through netlink
作用:通过netlink接口导出tasks/processes的统计信息
Configure standard kernel features
--> Load all symbols for debugging/ksymoops
作用:让内核打印出符号信息和栈回溯,会让内核增加300k左右字节。
-->BUG() support
作用:支持BUG和WRAN。
Kernel Performance Events And Counters
-->Debug:use vmalloc to back perf mmap() buffers
作用:大部分平台调试vmalloc的代码不用需要这个选项。
Enable VM event counters for /proc/vmstat
作用:通过/proc/vmstat可以查看VM event
Kprobes
作用:Kprobes工具支持(作用??可否去掉???)
另外如cgroup这些功能,如果你的项目不是用到Andriod等庞大的系统,也可以选择裁剪.
2. Kernel hacking
kernel hacking 主要向开发者提供各种调试工具和调试手段,工具的数量和手段太多,,根据具体的作用来裁剪不需要的工具,如果要裁剪到一个最精简的内核,这部分的东西大部分都可以被裁剪。
参考如下:
裁剪选项:kernel hacking | 作用 | 优化大小:641316 | ||||||||||||||||||||||||
[]show timing information on printks | 在控制台和syslog()系统调用的输出中包含printk()消息的时间戳,以便于直接显示内核启动过程中各步骤所用的时间.注意:无论此项是否开启,时间戳总会被记录在/dev/kmsg中,开启此项仅相当于使用"printk.time=1"内核引导参数.(??什么意思) | |||||||||||||||||||||||||
[]Enable __deprecated logic | 编译时开启"反对使用"逻辑检查,关闭此项将不会显示类似"warning: 'foo' is deprecated (declared at kernel/power/somefile.c:1234)"这样的警告消息. | |||||||||||||||||||||||||
[]Enable __must_check_ logic | 编译时开启"必须检查"逻辑检查,关闭此项将不会显示类似"warning: ignoring return value of 'foo', declared with attribute warn_unused_result"这样的警告消息. | |||||||||||||||||||||||||
[]Collect scheduler statistics | 收集调度程序的统计信息,并展示在"/proc/schedstat"文件中.可以用于调试调度程序,或者调整特定的应用程序.不确定的选"N". | |||||||||||||||||||||||||
[]Collect kernel timers statistics | 收集内核计时器的统计信息,并展示在"/proc/timer_stats"文件中.使用"echo 1 > /proc/timer_stats"开启统计,使用"echo 0 > /proc/timer_stats"关闭统计.不确定的选"N". | |||||||||||||||||||||||||
[]Debug slab memory allocations | 调试slab内存分配器 | |||||||||||||||||||||||||
[]Debug preemptible kernel | 对内核主动抢占特性进行调试 | |||||||||||||||||||||||||
[]Verbose BUG() reporting (adds 70K) | 在内核panic时让BUG()函数报告更详细的信息.内核将会增大70-100K | |||||||||||||||||||||||||
[]Compile the kernel with debug info | 以调试方式编译内核(gcc -g).仅供内核开发者使用 | |||||||||||||||||||||||||
RCU Debugging | ||||||||||||||||||||||||||
-->Print additional per-task information for RCU_CPU_STALLDETECTOR | 打印每个人物附加的信息给RCU检测器,默认选N | |||||||||||||||||||||||||
Tracers | 追踪器应该是对开发调试作用的 | |||||||||||||||||||||||||
[]Sample kernel code | 内核示例代码 | |||||||||||||||||||||||||
[]KGDB: kernel debugger | gdb调试工具 | |||||||||||||||||||||||||
[]Early printk | 将内核日志直接输出到VGA缓冲或串口.这有助于调试那些在控制台尚未完成初始化之前就造成系统崩溃的bug |
来源:CSDN
作者:free文
链接:https://blog.csdn.net/jzwjzw19900922/article/details/103808476