赞
踩
以下技术在盈鹏飞嵌入式的A40I/T3核心板(CoM-X40I)和主控板(SBC-X40I)上经过验证,欢迎 交流! CoM-X40I核心板和SBC-X40I主板见下图:
1. BSP包裁剪主要包括两个部分
2. kernel裁剪涉及的部分主要分为:
在内核目录运行make ARCH=平台 menuconfig,通过配置内核进行裁剪。
kernel 支持了非常多的调试工具,同时也能支持向proc等导出调试信息,这对于开发调试有很多用处,但也大大加大了内核的尺寸,如果一个产品准备量产,为了优化BSP的大小,可以去掉内核的调试工具和调试信息,其中主要涉及到的有General setup 和 kernel hacking 两个配置选项。
(1)General setup介绍
General setup是代码成熟度配置选项,主要配置编译的工具,编译的优化选项,软件子系统的支持等,
各个选项详细含义,可查看附件一,帖子如下:
BSP裁剪(2)附件一 General setup配置说明_jzwjzw19900922的博客-CSDN博客
详细说明 | |
裁剪选项:General setup | 作用 |
<>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等庞大的系统,也可以选择裁剪.
kernel hacking 主要向开发者提供各种调试工具和调试手段,工具的数量和手段太多,根据具体的作用来裁剪不需要的工具,如果要裁剪到一个最精简的内核,这部分的东西大部分都可以被裁剪。
详细说明可以查看附件二,地址如下:
https://blog.csdn.net/jzwjzw19900922/article/details/103822446
参考如下:
裁剪选项:kernel hacking | 作用 |
[]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 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。