BSP裁剪(1)kernel裁剪--调试工具和调试信息的裁剪

徘徊边缘 提交于 2020-01-02 19:10:24

概述

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                                                  
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!