目的是为Android中的linux内核来配置CONFIG_DYNAMIC_FTRACE选项。
智能硬件Android版本:8.1
智能硬件Linux版本:4.4
智能硬件芯片平台:Arm32
实验PC环境:Ubuntu
1. 找到正确的内核配置文件
查看KERNEL_DEFCONFIG的定义,由于只支持arm32我们只更改arm文件夹下即可。
如果是arm64位芯片,需同时更该arm和arm64文件夹下的内容。
由此非eng编译环境下配置文件应为kernel-4.4/arch/arm/configs/*_defconfig
注:产品代号已经用 * 替代,该处请自行根据需要去替换编译产品名称
ifeq ($(TARGET_BUILD_VARIANT), eng)
KERNEL_DEFCONFIG ?= *_debug_defconfig
else
KERNEL_DEFCONFIG ?= *_defconfig
endif
2. 在配置文件中新增配置项
kernel-4.4/arch/arm/configs/*_defconfig为上述所说的配置文件
CONFIG_DYNAMIC_FTRACE=y
3. 在kernel-4.4/kernel/trace/Kconfig中查看DYNAMIC_FTRACE配置项的定义
发现依赖如下两个depends的配置项
config DYNAMIC_FTRACE
bool "enable/disable function tracing dynamically"
depends on FUNCTION_TRACER
depends on HAVE_DYNAMIC_FTRACE
default y
由此在kernel-4.4/arch/arm/configs/*_defconfig文件中新增如下两个依赖的配置项
CONFIG_DYNAMIC_FTRACE=y
CONFIG_FUNCTION_TRACER=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
4. 继续查看FUNCTION_TRACER 和HAVE_DYNAMIC_FTRACE的定义
由此发现FUNCTION_TRACER的一个配置项
config FUNCTION_TRACER
bool "Kernel Function Tracer"
depends on **HAVE_FUNCTION_TRACER**
select KALLSYMS
select GENERIC_TRACER
select CONTEXT_SWITCH_TRACER
HAVE_DYNAMIC_FTRACE的配置项定义没有依赖项
config HAVE_DYNAMIC_FTRACE
bool
最终把改配置项添加到kernel的配置文件kernel-4.4/arch/arm/configs/*_defconfig中
CONFIG_DYNAMIC_FTRACE=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_FUNCTION_TRACER=y
CONFIG_HAVE_FUNCTION_TRACER=y
5. 最终编译内核make bootimage, 烧录bootimage
6. 验证是否成功
提取出终端kernel配置文件
adb pull /proc/config.gz .
gunzip config.gz
ls config
查看config文件是否包含CONFIG_DYNAMIC_FTRACE=y,大功告成