全志平台BSP裁剪(3)附件二 Kernel hacking配置说明

以下技术在盈鹏飞嵌入式的A40I/T3核心板(CoM-X40I)和主控板(SBC-X40I)上经过验证,欢迎 交流! CoM-X40I核心板和SBC-X40I主板见下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

 Kernel hacking

说明:内核hack选项

Show timing information on printks

CONFIG_PRINTK_TIME

在控制台和syslog()系统调用的输出中包含printk()消息的时间戳,以便于直接显示内核启动过程中各步骤所用的时间.注意:无论此项是否开启,时间戳总会被记录在/dev/kmsg中,开启此项仅相当于使用"printk.time=1"内核引导参数.

Default message log level (1-7)

CONFIG_DEFAULT_MESSAGE_LOGLEVEL

printk()内核消息日志的默认级别,取值范围是[1,7].任何由printk显示的字符串通常记录在/var/log/messages文件里.数值越大显示的消息就越详细:1=ALERT,2=CRIT,3=ERR,4=WARNING,5=NOTICE,6=INFO,7=DEBUG.

Enable __deprecated logic

CONFIG_ENABLE_WARN_DEPRECATED

编译时开启"反对使用"逻辑检查,关闭此项将不会显示类似"warning: 'foo' is deprecated (declared at kernel/power/somefile.c:1234)"这样的警告消息.

Enable __must_check logic

CONFIG_ENABLE_MUST_CHECK

编译时开启"必须检查"逻辑检查,关闭此项将不会显示类似"warning: ignoring return value of 'foo', declared with attribute warn_unused_result"这样的警告消息.

Warn for stack frames larger than (needs gcc 4.4)

CONFIG_FRAME_WARN

堆栈帧大小警告阈值,设置过小会导致编译时警告太多,设为"0"可以关闭警告,需要GCC-4.4或更高版本

Strip assembler-generated symbols during link

CONFIG_STRIP_ASM_SYMS

连接时剥离汇编器产生的内部符号(类似'.Lxxx'),这样可以净化get_wchan()之类的输出,同时还可以减小内核尺寸.建议开启.

Magic SysRq key

CONFIG_MAGIC_SYSRQ

开启"魔法键"(SysRq,允许用户按下Alt+PrintScreen后发送给内核特殊的命令)支持(可以通过"echo 0 > /proc/sys/kernel/sysrq"关闭).由于SysRq会带来安全隐患(允许未经登录的操作),所以你应该仅在确实需要的场合开启.更多详情参见"Documentation/sysrq.txt"文档

Enable magic SysRq key functions by default

CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE

设置默认开启哪些魔法键.设为"1"表示开启所有魔法键,设为"0"表示禁用所有魔法键.或者按照"Documentation/sysrq.txt"文档的指引设置特定的码位.

Generate readable assembler code

CONFIG_READABLE_ASM

生成人类易读的汇编输出,以方便内核调试.这会禁用一些编译优化措施,也会降低内核的运行速度.

Enable unused/obsolete exported symbols

CONFIG_UNUSED_SYMBOLS

导出无用和废弃的符号,这将使内核不必要的增大.建议关闭.

Debug Filesystem

CONFIG_DEBUG_FS

debugfs是内核开发者用来存储调试信息的虚拟文件系统.不搞内核开发就别选

Run 'make headers_check' when building vmlinux

CONFIG_HEADERS_CHECK

在编译内核时运行'make headers_check'命令检查内核头文件的正确性,当你修改了与用户空间相关的内核头文件后应该启用该选项

Enable full Section mismatch analysis

CONFIG_DEBUG_SECTION_MISMATCH

在编译时检查无效的引用.仅供内核开发者使用

Make section mismatch errors non-fatal

CONFIG_SECTION_MISMATCH_WARN_ONLY

若选"N",那么一旦出现"section mismatch",将会直接导致编译失败(而不是仅仅抛出警告).建议选"N".

Kernel debugging

CONFIG_DEBUG_KERNEL

仅供内核开发者使用.[提示]如果你开启了CONFIG_EXPERT,此项会被强制选中,如果这不是你想要的,可以到内核源码树的根目录下使用"sed -i '/select DEBUG_KERNEL/d' usr/src/linux/init/Kconfig"命令去掉这个依赖.

Panic on Oops

CONFIG_PANIC_ON_OOPS

当内核oops时,直接panic掉(相当于Windows蓝屏死机),这样可以确保内核停止工作,避免导致无法预料的后果.等价于使用"oops=panic"内核引导参数.不确定的选"Y".

panic timeout

CONFIG_PANIC_TIMEOUT

如何处理内核崩溃(panic):(1)若设为"0"则表示无限等待,不做任何处理;(2)若设为正整数则表示等待设定的秒数之后重启;(3)若设为负整数则表示立即重启.

Enable extra timekeeping sanity checking

CONFIG_DEBUG_TIMEKEEPING

仅供内核开发者使用

Detect Hung Tasks

CONFIG_DETECT_HUNG_TASK

探测挂起的任务(进程被锁住或者冻结了,处于不可中断的"D"状态).由于仅能检测,不能做进一步的处理,所以仅用于帮助内核调试.

Collect scheduler debugging info

CONFIG_SCHED_DEBUG

提供一个"/proc/sched_debug"文件以帮助调试调度程序.仅供内核开发以及调试调度程序使用.

Collect scheduler statistics

CONFIG_SCHEDSTATS

收集调度程序的统计信息,并展示在"/proc/schedstat"文件中.可以用于调试调度程序,或者调整特定的应用程序.不确定的选"N".

Collect kernel timers statistics

CONFIG_TIMER_STATS

收集内核计时器的统计信息,并展示在"/proc/timer_stats"文件中.使用"echo 1 > /proc/timer_stats"开启统计,使用"echo 0 > /proc/timer_stats"关闭统计.不确定的选"N".

Debug object operations

CONFIG_DEBUG_OBJECTS

跟踪各种对象的生命周期(life time),并校验对这些对象的各种操作.仅供内核调试.

Debug slab memory allocations

CONFIG_DEBUG_SLAB

对slab内存分配进行检查

SLUB debugging on by default

CONFIG_SLUB_DEBUG_ON

默认开启SLUB内存分配器调试功能.仅供调试,切勿用于生产环境.

Enable SLUB performance statistics

CONFIG_SLUB_STATS

收集SLUB内存分配器的性能统计信息.仅供调试,切勿用于生产环境.

Kernel memory leak detector

CONFIG_DEBUG_KMEMLEAK

内核内存泄漏检测.仅供内核调试.

Debug preemptible kernel

CONFIG_DEBUG_PREEMPT

对内核的主动抢占特性进行调试.仅供内核开发者使用

RT Mutex debugging, deadlock detection

CONFIG_DEBUG_RT_MUTEXES

对Rr Mutex 语义进行检查和死锁检测并上报。

Built-in scriptable tester for rt-mutexes

CONFIG_RT_MUTEX_TESTER

rt-mutex 检查器

Spinlock and rw-lock debugging: basic checks

CONFIG_DEBUG_SPINLOCK

spinlock rw-lock锁语义检查和上报

Mutex debugging: basic checks

CONFIG_DEBUG_MUTEXES

mutex语义检查和上报

Lock debugging: detect incorrect freeing of live locks

CONFIG_DEBUG_LOCK_ALLOC

仅供内核开发者使用

Lock debugging: prove locking correctness

CONFIG_PROVE_LOCKING

仅供内核开发者使用

Lock usage statistics

CONFIG_LOCK_STAT

仅供内核开发者使用

Lock dependency engine debugging

CONFIG_DEBUG_LOCKDEP

仅供内核开发者使用

Sleep inside atomic section checking

CONFIG_DEBUG_ATOMIC_SLEEP

如果在原子里面休眠或者动用锁机制,将会警告上报

Locking API boot-time self-tests

CONFIG_DEBUG_LOCKING_API_SELFTESTS

在内核启动时运行一个简短的加锁/解锁函数(spinlocks,rwlocks,mutexes,rwsems)自我测试.仅供内核开发者使用

Stack utilization instrumentation

CONFIG_DEBUG_STACK_USAGE

仅供内核开发者使用

kobject debugging

CONFIG_DEBUG_KOBJECT

kobject 调试信息会被发送到syslog

Verbose BUG() reporting (adds 70K)

CONFIG_DEBUG_BUGVERBOSE

在内核panic时让BUG()函数报告更详细的信息.内核将会增大70-100K.

Compile the kernel with debug info

CONFIG_DEBUG_INFO

以调试方式编译内核(gcc -g).,编译时加入了调试信息

Debug VM

CONFIG_DEBUG_VM

仅供内核开发者使用

Debug VM translations

CONFIG_DEBUG_VIRTUAL

仅供内核开发者使用

Debug filesystem writers count

CONFIG_DEBUG_WRITECOUNT

会抓住vfsmount writer错误的使用

Debug memory initialisation

CONFIG_DEBUG_MEMORY_INIT

在内存初始化时增加额外的合理性检查.不确定的选"Y".

Debug linked list manipulation

CONFIG_DEBUG_LIST

启动list_sort函数,在系统启动时调用,会影响启动时间

Linked list sorting test

CONFIG_TEST_LIST_SORT

启动list_sort函数,在系统启动时调用,会影响启动时间

Debug SG table operations

CONFIG_DEBUG_SG

SG表的检查,可以检查出驱动中没有初始化scatter-gather的情况

Debug notifier call chains

CONFIG_DEBUG_NOTIFIERS

仅供内核开发者使用

Debug credential management

CONFIG_DEBUG_CREDENTIALS

证书管理调试

Compile the kernel with frame pointers

CONFIG_FRAME_POINTER

调试证书管理,仅供内核开发者使用

Delay each boot printk message by N milliseconds

CONFIG_BOOT_PRINTK_DELAY

能让你去读内核的启动信息,每条打印都会有个delay 毫秒,boot_delay = N

Stack backtrace support

CONFIG_STACKTRACE

栈回溯支持

RCU Debugging

仅供内核开发者使用.建议所有子项全选"N".

Kprobes sanity tests

CONFIG_KPROBES_SANITY_TEST

仅供内核开发者使用

Self test for the backtrace code

CONFIG_BACKTRACE_SELF_TEST

栈回溯的自我检测代码

Force extended block device numbers and spread them

CONFIG_DEBUG_BLOCK_EXT_DEVT

仅供内核开发者使用

Force weak per-cpu definitions

CONFIG_DEBUG_FORCE_WEAK_PER_CPU

仅供内核开发者使用

Debug access to per_cpu maps

CONFIG_DEBUG_PER_CPU_MAPS

仅供内核开发者使用

Linux Kernel Dump Test Tool Module

CONFIG_LKDTM

仅供内核开发者使用

Notifier error injection

CONFIG_NOTIFIER_ERROR_INJECTION

仅供内核开发者使用

Fault-injection framework

CONFIG_FAULT_INJECTION

这个可以看下 Documentation/fault-injection

Latency measuring infrastructure

CONFIG_LATENCYTOP

仅供内核开发者使用

Strict user copy size checks

CONFIG_DEBUG_STRICT_USER_COPY_CHECKS

仅供内核开发者使用

Debug page memory allocations

CONFIG_DEBUG_PAGEALLOC

检查页内存的申请,

Tracers

CONFIG_FTRACE

仅供内核开发者使用.建议选"N".

Runtime Testing

运行时自我检查.建议子项全选"N".

Red-Black tree test

CONFIG_RBTREE_TEST

仅供内核开发者使用

Interval tree test

CONFIG_INTERVAL_TREE_TEST

仅供内核开发者使用

Remote debugging over FireWire early on boot

CONFIG_PROVIDE_OHCI1394_DMA_INIT

仅供内核开发者使用

Remote debugging over FireWire with firewire-ohci

CONFIG_FIREWIRE_OHCI_REMOTE_DMA

仅供内核开发者使用

Build targets in Documentation/ tree

CONFIG_BUILD_DOCSRC

编译内核源码树下"Documentation"目录中的目标.不确定的选"N".

Enable dynamic printk() support

CONFIG_DYNAMIC_DEBUG

仅供内核开发者使用

Enable debugging of DMA-API usage

CONFIG_DMA_API_DEBUG

DMA-API用法的检查

Perform an atomic64_t self-test at boot

CONFIG_ATOMIC64_SELFTEST

启动时启动一个aatomic64_t的自我检测

Self test for hardware accelerated raid6 recovery

CONFIG_ASYNC_RAID6_TEST

仅供内核开发者使用

Sample kernel code

CONFIG_SAMPLES

内核示例代码.仅供内核开发者使用

KGDB: kernel debugger

CONFIG_KGDB

KGDB调试工具

kmemcheck: trap use of uninitialized memory

CONFIG_KMEMCHECK

仅供内核开发者使用

Test functions located in the string_helpers module at runtime

CONFIG_TEST_STRING_HELPERS

仅供内核开发者使用

Test kstrto*() family of functions at runtime

CONFIG_TEST_KSTRTOX

仅供内核开发者使用

Filter access to /dev/mem

CONFIG_STRICT_DEVMEM

如果选"N",那么用户空间的root用户将可以通过/dev/mem访问所有内存空间(包括用户空间与内核空间),以方便调试内核.如果选"Y",那么内核空间除了PCI和BIOS部分以及数据区之外,都禁止访问,以保护系统安全.不确定的选"Y".

Enable verbose x86 bootup info messages

CONFIG_X86_VERBOSE_BOOTUP

在启动时显示额外bzimage解压消息,显示详细的内核引导信息.建议选"N"使引导过程更安静(依然会显示错误信息).

Early printk

CONFIG_EARLY_PRINTK

将内核日志直接输出到VGA缓冲或串口.这有助于调试那些在控制台尚未完成初始化之前就造成系统崩溃的bug.

Early printk via EHCI debug port

CONFIG_EARLY_PRINTK_DBGP

支持将内核日志直接通过EHCI调试端口输出.选"N",除非你想调试内核.

Dump the EFI pagetable

CONFIG_EFI_PGT_DUMP

仅供内核开发者使用

Check for stack overflows

CONFIG_DEBUG_STACKOVERFLOW

仅供内核开发者使用

Export kernel pagetable layout to userspace via debugfs

CONFIG_X86_PTDUMP

仅供内核开发者使用

Write protect kernel read-only data structures

CONFIG_DEBUG_RODATA

仅供内核开发者使用

Set loadable kernel module data as NX and text as RO

CONFIG_DEBUG_SET_MODULE_RONX

将内核模块的数据区标记为NX(不可执行),文本段标记为RO(只读),以防止不良模块(例如被植入病毒的模块)对系统的破坏,也能预防某些类型的内核入侵.这需要CPU支持NX位(CPU flags中要含有"nx"标志).但是这也有副作用:会与运行时代码补丁冲突,还会导致动态内核跟踪失效.建议选"Y",除非你需要调试内核,或者需要为运行中的模块打补丁.

Testcase for the NX non-executable stack feature

CONFIG_DEBUG_NX_TEST

对处理器的NX的测试用例.仅供内核开发者使用

Set upper limit of TLB entries to flush one-by-one

CONFIG_DEBUG_TLBFLUSH

仅供内核开发者使用

Enable doublefault exception handler

CONFIG_DOUBLEFAULT

仅供内核开发者使用

Enable IOMMU debugging

CONFIG_IOMMU_DEBUG

仅供内核开发者使用

Enable IOMMU stress-test mode

CONFIG_IOMMU_STRESS

仅供内核开发者使用

IOMMU leak tracing

CONFIG_IOMMU_LEAK

仅供内核开发者使用

x86 instruction decoder selftest

CONFIG_X86_DECODER_SELFTEST

仅供内核开发者使用

IO delay type

IO延迟方式

port 0x80 based port-IO delay

CONFIG_IO_DELAY_0X80

传统的Linux IO延迟方式,久经考验,也是最安全的默认值.

port 0xed based port-IO delay

CONFIG_IO_DELAY_0XED

基于0xed端口的IO延迟方式,主要是为了避免和基于0x80端口的主板诊断卡冲突.绝大多数人都没有主板诊断卡,除非那些专门维修主板的硬件工程师.

udelay based port-IO delay

CONFIG_IO_DELAY_UDELAY

使用内核端udelay()函数作为延迟方法(简单延迟2微秒).可以不占用任何IO端口空间.

no port-IO delay

CONFIG_IO_DELAY_NONE

不使用任何port-IO延迟机制.只要你的机器不是老古董,建议选择此项.

Debug boot parameters

CONFIG_DEBUG_BOOT_PARAMS

仅供内核开发者使用

CPA self-test code

CONFIG_CPA_DEBUG

仅供内核开发者使用

Allow gcc to uninline functions marked 'inline'

CONFIG_OPTIMIZE_INLINING

允许GCC将标记为内联(inline)的函数变成非内联(uninline).选"Y"后将完全无视代码中的"inline"标记,完全由GCC自行决定是否应该将函数内联.由于GCC4.x系列更新了判断函数是否应该内联的算法,选"Y"后,编译出的内核体积会减小(但运行速度未必提升).建议选"Y".

NMI Selftest

CONFIG_DEBUG_NMI_SELFTEST

对不可屏蔽中断(Non Maskable Interrupt)进行自检,仅供内核开发者使用

ATOM Punit debug driver

CONFIG_PUNIT_ATOM_DEBUG

仅供内核开发者使用

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值