问题本质
测试项目:EolEnforcementTest#KernelNotEol
目的:验证设备的内核是否处于维护支持期内(非终止维护状态)。
失败原因:
系统检测到内核已被标记为eol(End-of-Life,终止维护),而测试预期要求内核处于活跃维护状态(eol=false)。
关键错误信息:
test/vts-testcase/kernel/gki/eol_enforcement_test.cpp:193
Value of: isReleaseEol(latest_release->gt;Attribute(“eol”))
Actual: true // 实际检测到 eol=true(已终止维护)
Expected: false // 测试要求 eol=false(未终止维护)
根本原因分析
内核版本问题
设备使用的内核版本过于陈旧(如已超过厂商支持周期),被系统标记为EOL状态。
提交测试的内核未通过官方GKI(Generic Kernel Image)认证,缺乏维护支持标识。
配置错误
内核的 eol属性被错误启用(例如在编译配置中添加了CONFIG_LATEST_RELEASE_EOL=true)。
内核元数据文件(如android-base.json)中错误标记了"eol": true。
代码逻辑缺陷
isReleaseEol() 函数逻辑错误(如误判内核发布时间与EOL时间的关系)。
获取内核属性时解析失败(如latest_release->Attribute(“eol”)返回异常)。
基础设施问题
测试服务器未能正确获取最新的内核兼容性数据库(例如Android GKI认证列表)。
解决方案步骤
验证内核状态
查看设备内核版本和发布日期
adb shell cat /proc/version_signature
示例:Linux 5.10.43-android12-9-00001-g1a5c8d9e8eab-ab123456
检查内核版本是否在https://source.android.com/docs/core/architecture/kernel/gki内。若版本不在列表中,需升级内核。
修改内核配置
在编译时确保禁用EOL标记:
修改内核配置文件(如gki_defconfig)
CONFIG_LATEST_RELEASE_EOL=n # 明确禁止eol标记
检查内核属性文件
打开内核项目的元数据文件(android/vendor_kernel_bootconfig.json 或 android-base.json):
“release”: “5.10.123”,
"eol": false // 确保此处为false
修复测试代码逻辑
检查测试源码中isReleaseEol()函数的实现(位于eol_enforcement_test.cpp):
bool isReleaseEol(const std::string& eolAttr) {
return (eolAttr == “true”); // 确保仅当属性明确为"true"时返回true
// 修复常见的误判情况(如空值、大小写问题)
更新内核分支
从官方仓库同步最新受支持的内核分支:
git checkout android13-5.10-lts # 使用长期支持(LTS)分支
注意:Android 12之后的内核需强制通过https://source.android.com/docs/compatibility/gki。
重新运行测试
修复后触发VTS测试验证:
atest vts_kernel_gki_eol_enforcement_test
验证是否解决
测试通过标志:
✅ Result列背景变为绿色
✅ 显示 EolEnforcementTest#KernelNotEol → PASSED
关键预防措施
使用GKI合规内核:确保内核通过Android官方认证(AOSP项目提供工具验证)。
自动化检测:在CI/CD流程中集成kernel_requirements_tool检查EOL标记。
定期同步上游:每月检查https://groups.google.com/g/android-kernel中的EOL公告。
补充:测试错误中的符号->gt;可能是代码拼写错误(应为->),建议同步检查源码中的XML属性解析逻辑。