You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pixel 6的Android13 5.15自定义aarch64内核缺失syscall tracepoints

问题:Android 13 5.15 aarch64(Pixel 6)内核syscall tracepoints无法启用

我为搭载Android 13的Pixel 6重新编译了启用事件跟踪(重点是syscall tracepoints)的5.15自定义内核,但启动后出现以下异常:

  • /sys/kernel/tracing/events/syscalls 目录不存在
  • syscall tracepoints未在 /sys/kernel/debug/tracing/available_events 中注册

已知正常场景:

  • x86_64架构(Cuttlefish)编译同版本5.15内核可正常启用syscall tracepoints
  • Android 14、6.1版本的aarch64内核也能正常工作

失效场景编译步骤

  1. 基于分支 gs-android13-gs-raviole-5.15
  2. 执行配置命令:BUILD_CONFIG=common/build.config.gki.aarch64 build/config.sh
  3. 启用以下内核配置项:
CONFIG_DEBUG_INFO=y 
CONFIG_DEBUG_INFO_BTF=y
CONFIG_SECURITY=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_NETWORK=y  # 注:原配置存在拼写错误,应为NETWORK而非NEWORK
CONFIG_FUNCTION_TRACER=y
CONFIG_FTRACE_SYSCALLS=y
  1. 执行编译命令:tools/bazel run --lto=thin //gs/google-modules/soc-modules:slider_dist(尝试去掉--lto=thin参数仍无效)
  2. 按官方文档刷入boot.img、dtbo.img等镜像

已通过/proc/config.gz确认上述配置项均已正确启用,怀疑预构建元素导致问题,但无法理解为何x86_64通用GKI内核正常,而Pixel 6的aarch64内核失效。


排查方向与解决方案

1. 确认配置项拼写修正

首先修正配置中的拼写错误:CONFIG_SECURITY_NEWORK=y 改为 CONFIG_SECURITY_NETWORK=y。虽然你已通过/proc/config.gz确认配置无误,但仍需验证该错误是否在实际编译流程中已被修正——错误的配置项可能导致相关依赖模块未正确编译,间接影响tracepoint功能。

2. 排查Pixel 6专属分支的定制补丁影响

gs-android13-gs-raviole-5.15分支包含Google为Raviole平台(Pixel 6系列)定制的SOC补丁与模块,这些内容可能干扰tracepoint功能:

  • 对比该分支与正常工作的common-android13-5.15分支,重点查看kernel/trace/、arch/arm64/kernel/syscall/目录下的提交差异,确认是否存在禁用syscall tracepoints的补丁
  • 尝试编译纯GKI内核(不含SOC模块)测试:执行BUILD_CONFIG=common/build.config.gki.aarch64 build/config.sh后,用tools/bazel run //common:kernel_aarch64编译纯GKI镜像,刷入后检查tracepoints是否恢复正常

3. 检查Bazel编译的预构建依赖

Pixel 6的SOC模块编译可能依赖预构建内核组件,这些预构建元素可能未启用CONFIG_FTRACE_SYSCALLS:

  • 查看//gs/google-modules/soc-modules:slider_dist的Bazel配置文件,确认是否引用了预构建内核片段,尝试修改构建规则跳过预构建依赖,强制全量编译
  • 在build.config中添加CONFIG_PREBUILT_KERNEL=n(若存在该配置),禁用预构建内核依赖后重新编译测试

4. 验证arm64架构tracepoint初始化逻辑

x86_64与aarch64的syscall tracepoint初始化逻辑存在差异,Android 13 5.15的arm64分支可能存在bug:

  • 启动后执行dmesg | grep ftrace,查看Ftrace初始化阶段是否存在报错信息
  • 对比Android 14 6.1分支的arch/arm64/kernel/syscall.c实现,确认当前分支是否正确注册了syscall tracepoints
  • 手动尝试加载syscall tracepoints:执行echo syscalls > /sys/kernel/debug/tracing/set_event,观察是否报错或生成对应目录

5. 排查SELinux策略限制

Android 13的SELinux策略可能限制tracepoint目录的访问:

  • 执行getenforce确认SELinux状态,若为Enforcing模式,临时切换为Permissive(setenforce 0)后检查tracepoints是否出现
  • 执行dmesg | grep avc查看是否有SELinux拒绝访问tracepoint节点的日志,若存在需调整SELinux策略允许相关访问

内容的提问来源于stack exchange,提问作者Pete1234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 07:12:42