S100P开发板编译内核驱动时,遇到linux-header不匹配的问题
在源的网址上只有一个linux headers包:
即下面这个版本:
apt-cache search linux-headers|grep 6.1.158
linux-headers-6.1.158-rt58 - Linux kernel headers for 6.1.158-rt58-DR-4.0.5-2603191535-gf29a43-g94bc27 on arm64
但是内核版本:
uname -r
6.1.158-rt58-DR-4.0.5-2603031328-g9f678e-g6caa4d
请问该如何解决?
问题分析
你遇到的是 S100P 内核版本与 linux-headers 版本不匹配 的典型问题:
当前内核版本 : 6.1.158-rt58-DR-4.0.5-2603031328-g9f678e-g6caa4d
可用 headers 版本 : 6.1.158-rt58-DR-4.0.5-2603191535-gf29a43-g94bc27
两者虽然主版本相同(6.1.158-rt58),但 git commit hash 不同 (g9f678e vs gf29a43),导致编译时版本校验失败。
这是地平线 S100/S100P 平台的常见问题,社区已有多个类似案例(如 PCAN 驱动编译问题 )。
解决方案
方案一:等待官方更新 headers(推荐)
这是最安全的方案。地平线会定期发布匹配的内核头文件包。
操作步骤:
# 1. 更新 apt 源
sudo apt update
# 2. 查看可用的 linux-headers 版本
apt-cache search linux-headers | grep 6.1.158
# 3. 如果有新版本,直接安装
sudo apt install linux-headers-6.1.158-rt58
关注社区动态:
查看 S100P 相关帖子 获取最新版本发布信息
类似案例中官方通常在 1-2 周内发布匹配的 headers
方案二:临时绕过版本检查(仅用于开发测试)
如果急需编译驱动,可以临时禁用内核版本校验:
操作步骤:
# 1. 安装当前可用的 headers
sudo apt install linux-headers-6.1.158-rt58
# 2. 修改驱动 Makefile,添加版本跳过标志
cd <你的驱动源码目录>
# 3. 编辑 Makefile,在 EXTRA_CFLAGS 或 ccflags-y 中添加:
echo "EXTRA_CFLAGS += -DUTS_VERSION='\"$(uname -r)\"'" >> Makefile
# 4. 或者在编译时强制指定 KBUILD_MODPOST_WARN=1
make -C /lib/modules/$(uname -r)/build M=$(pwd) KBUILD_MODPOST_WARN=1 modules
警告:
此方法编译的模块可能存在兼容性问题
仅用于开发测试,不要用于生产环境
如果驱动使用了内核内部 API,仍可能运行失败
方案三:手动下载匹配的 headers(高级用户)
如果官方源未及时更新,可以尝试从地平线内部源手动下载:
# 1. 访问地平线包仓库
wget http://archive.d-robotics.cc/ubuntu-rdk-s100-beta/pool/main/l/linux-upstream/
# 2. 查找最接近你内核版本的 headers 包
# 注意比对 git commit hash (g9f678e vs gf29a43)
# 3. 手动安装
sudo dpkg -i linux-headers-xxx_arm64.deb
排查建议
如果上述方案都不行,请提供以下信息以便进一步诊断:
# 1. 完整的编译错误日志
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules 2>&1 | tee build.log
# 2. 当前安装的 headers 版本
dpkg -l | grep linux-headers
# 3. 内核版本详情
uname -a
cat /proc/version
社区资源
建议: 编译问题请在社区发帖并附上完整日志,方便官方技术支持跟进。你当前的帖子已有标签 rdk-s100p 和 求助帖,保持关注即可。
Marcelo
(Marcelo615)
2026 年6 月 23 日 02:20
3
您好,你的S100P是否烧录了最新版本镜像 4.0.5 根据描述源上的linux headers 为较新版本
你好 有两个4.0.5版本,我烧录的是V4.0.5,是否应该烧录V4.0.5_20260507
结论:建议烧录 V4.0.5_20260507
是的,你应该烧录 V4.0.5_20260507 版本。
版本差异分析
从你的内核版本号可以看出来:
项目
当前系统
Headers 对应版本
内核版本
6.1.158-rt58-DR-4.0.5-260303 1328-g9f678e
6.1.158-rt58-DR-4.0.5-260319 1535-gf29a43
构建日期
2026-03-03
2026-03-19
Git Commit
g9f678e
gf29a43
问题根源: 你当前烧录的是 3 月初的 4.0.5 版本,而源上的 headers 是 3 月 19 日构建的更新版本,两者 git commit 不一致导致校验失败。
V4.0.5_20260507 是 5 月 7 日发布的版本,应该包含更新的内核和匹配的 headers。
操作步骤
1. 下载最新镜像
访问地平线官方下载页面,获取 V4.0.5_20260507 镜像包。
2. 烧录镜像
# 使用 DFU 模式烧录(参考官方烧录教程)
# 确保板子进入 DFU 模式后执行
sudo ./flash_tool.sh -i <镜像路径> -b s100p
3. 烧录后验证
# 重启后检查内核版本
uname -r
# 检查 headers 是否匹配
apt-cache search linux-headers | grep 6.1.158
# 安装 headers
sudo apt update
sudo apt install linux-headers-6.1.158-rt58
4. 测试编译
# 测试驱动编译
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
注意事项
烧录前备份:
备份重要数据和配置文件
记录当前网络配置、SSH 密钥等
版本兼容性:
确认 V4.0.5_20260507 的 release notes,查看是否有 breaking changes
如果之前做过设备树或内核定制,需要重新适配
如果烧录后仍有问题
请提供以下信息继续排查:
# 烧录后的内核版本
uname -a
# headers 安装情况
dpkg -l | grep linux-headers
# 编译错误日志(如有)
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules 2>&1 | tee build.log
参考资源: