可通过cat /proc/version、grep kbuild_build_timestamp /lib/modules/$(uname -r)/build/makefile、readelf -n /boot/vmlinuz | grep -a1 "build time"及ls -ld /usr/src/kernels/$(uname -r)四种方式精确获取银河麒麟v10内核原始编译时间。

如果您需要确认银河麒麟V10系统当前运行内核的原始编译时间,以判断构建时效性、验证补丁应用状态或开展安全合规审计,则必须提取内核镜像中嵌入的编译元数据。该信息不显示在常规版本号中,需通过底层接口直接读取。以下是四种可交叉验证的精确获取方式:
一、解析 /proc/version 获取内核编译时间戳
/proc/version 是内核运行时动态生成的虚拟文件,其中包含 GCC 编译器版本、构建主机名及精确到秒的编译完成时间,该时间由构建环境系统时钟写入,不可篡改且与官方发布包一致。
1、打开终端(Ctrl+Alt+T)。
2、执行命令:cat /proc/version。
3、在输出结果中定位形如 #1 SMP Thu Apr 25 18:20:10 CST 2024 的字段,其右侧时间即为内核实际编译完成时刻。
二、检查 /lib/modules/$(uname -r)/build/Makefile 中的 KBUILD_BUILD_TIMESTAMP
该 Makefile 由内核源码构建过程自动生成,其中 KBUILD_BUILD_TIMESTAMP 变量明确记录了构建开始时的时间戳,是上游内核标准机制,麒麟定制版完整保留此字段,可用于比对 /proc/version 中的 SMP 时间是否一致。
1、在终端中运行:uname -r,记下返回的内核版本字符串(如 4.19.90-89.11.v2401.ky10.aarch64)。
2、执行:cat /lib/modules/$(uname -r)/build/Makefile | grep KBUILD_BUILD_TIMESTAMP。
3、输出示例为:KBUILD_BUILD_TIMESTAMP := Thu Apr 25 18:19:45 CST 2024,该时间通常比 /proc/version 中的 SMP 时间早数十秒,反映构建起始点。
三、读取内核镜像文件的 ELF 段时间信息
vmlinuz 内核镜像是压缩的 ELF 格式可执行文件,其 .note 段中嵌入了构建工具链写入的原始时间戳。该方法不依赖运行时内核状态,即使系统未启动该内核亦可离线分析,适用于审计已安装但未激活的旧内核镜像。
1、确认目标内核镜像路径:ls /boot/vmlinuz*,选择待查版本(如 /boot/vmlinuz-4.19.90-89.11.v2401.ky10.aarch64)。
2、使用 readelf 工具提取构建时间:readelf -n /boot/vmlinuz-4.19.90-89.11.v2401.ky10.aarch64 2>/dev/null | grep -A1 "Build ID\|Time"。
3、若输出含时间字段,格式为 Build Time: Wed Apr 24 15:33:02 2024,即为原始构建时间;若无则说明该镜像未嵌入完整 note 段,需回退至前两种方法。
四、查看 /usr/src/kernels/ 目录下对应源码包的修改时间
银河麒麟V10服务器版与部分桌面版默认安装内核源码包(kernel-devel),其顶层目录时间戳由 RPM 包管理器在安装时设定,通常与源码包构建完成时间高度吻合,可作为辅助参考依据,尤其适用于未启用 systemd-journald 或 /proc/version 被裁剪的极简环境。
1、执行:ls -ld /usr/src/kernels/$(uname -r)*。
2、观察输出中形如 drwxr-xr-x. 11 root root 4096 Apr 25 18:20 /usr/src/kernels/4.19.90-89.11.v2401.ky10.aarch64 的行。
3、该行末尾的 Apr 25 18:20 即为源码包解压完成时间,与编译时间误差通常不超过 2 分钟,可视为有效近似值。










