Android9 ftrace 填坑指南
Contents
前置:
- pixel3
- 内核分支android-msm-crosshatch-4.9-pie-qpr1
编译方法:
-
下载代码不说了,aosp常规操作,如何编译内核,参考官方文档Building Kernels
-
首先执行build/config.sh配置,选择Kernel Hacking -> Tracers,勾选Function和Dynamic Trace等各项。config.sh完成后你会发现配置保存到了private/msm-google/arch/arm64/configs/b1c1_defconfig。
-
参考官方使用Ftrace的文档,还是手动配置b1c1_defconfig来得实在。
-
配置CONFIG_FTRACE=y和CONFIG_DYNAMIC_FTRACE=y,然后执行SKIP_MRPROPER=1 build/build.sh,开始编译
-
产物在out/android-msm-bluecross-4.9/dist/Image.lz4-dtb
-
使用fastboot boot Image.lz4-dtb 先加载内核测试,先不用刷进去
Ftrace使用:
-
参考文档Using ftrace,功能点很多
-
cd /sys/kernel/debug/tracing //进入tracefs目录
-
echo function > current_tracer //设置函数跟踪
-
echo SyS_kill > set_ftrace_filter //过滤kill调用,可用来跟踪壳的反调试
-
echo 1 > tracing_on //开启跟踪
-
cat trace //查看日志
-
echo 0 > tracing_on //关闭跟踪
问题:
- ftrace的几个编译错误
- 执行优化:LTO vmlinux.o时若提示错误,多半是内存不够,使用mkswap命令开大点
- 内核编译ftrace后,查看available_tracers没有生效
- 因为CONFIG_TRACE和CONFIG_DYNAMIC_FTRACE=y根本没写进去
- 当执行build.sh会在check_config里面提示配置不一致
- 修改build/_setup_env.sh里check_config为return 0,然后手动修改out/android-msm-bluecross-4.9/private/msm-google/defconfig添加两项配置CONFIG_FTRACE=y,CONFIG_DYNAMIC_FTRACE=y。
- PS:这个Kconfig也是奇怪,通过menuconfig死活新增不了这两个配置
相关资料
其他记录
- 构建bootimg (SKIP_MRPROPER=1 BUILD_BOOT_IMG=1 KERNEL_CMDLINE=“console=ttyUSB0,115200” ./build/build.sh)