当前位置:网站首页>全志平台BSP裁剪(1)kernel裁剪--调试工具和调试信息的裁剪
全志平台BSP裁剪(1)kernel裁剪--调试工具和调试信息的裁剪
2022-06-09 06:05:00 【szembed】
以下技术在盈鹏飞嵌入式的A40I/T3核心板(CoM-X40I)和主控板(SBC-X40I)上经过验证,欢迎 交流! CoM-X40I核心板和SBC-X40I主板见下图:


概述
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是代码成熟度配置选项,主要配置编译的工具,编译的优化选项,软件子系统的支持等,
各个选项详细含义,可查看附件一,帖子如下:
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等庞大的系统,也可以选择裁剪.
2. Kernel hacking
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 |
边栏推荐
- VK Cup 2017 - Round 1 C. Bear and Tree Jumps 换根dp
- Implementation of Excel piecewise linear interpolation function
- El table sets the height, and the header is misaligned
- 圖像處理-特征融合相關延伸
- srs-nodejs
- Educational Codeforces Round 20 C. Maximal GCD
- IP地址的分配原理
- VK Cup 2017 - Round 3 B. Dynamic Problem Scoring
- Ctf: find the most collinear points in the point set
- C multithreading
猜你喜欢

AM335X与全志A40i大比拼

NAND flash Basics
![[reprint] LCD common interface principle](/img/c5/df2fa2703c973b119ef97239656855.jpg)
[reprint] LCD common interface principle

Wireshark illustrates TCP three handshakes and four waves

Xiaomi 4 failed to install wechat

全志T3(A40I)/T5(T507)性能对比,一代更比一代强

测试和线程

Parallels Desktop installation windows10 prompt "safe startup function prevents operating system startup" solution

Ipop-imx6q development board qt5.7 system Mplayer migration - Cross compilation libmad-0.15.1b

Typescript IntelliSense is disabled on template error
随机推荐
Jdbc-dbutils
Unit platform related macros
CountDownLatch
C# 事件
el-table滚动条样式
iTOP-2K1000開發板啟動ramdisk-制作啟動U盤
C generic constraint
Unity3d change item font
Parallels Desktop installation windows10 prompt "safe startup function prevents operating system startup" solution
Singh function sinc (x) and sampling function SA (T)
MySQL master-slave replication (Linux centos7)
Mt2712 platform AGL6 demo adaptation
全志平台BSP裁剪(2)附件一 General setup配置说明
小米4安装微信失败
C# 泛型约束
C anonymous function
VK Cup 2017 - Round 2 A. Voltage Keepsake
Vs2013 secret key
Shopify theme style development
DNS principles 01 introduction to DNS principles