当前位置: 首页 > news >正文

OpenBMC内核驱动开发与编译指南:从修改到部署的全流程解析

在OpenBMC开发过程中,内核驱动的修改和调试是常见的需求。本文将以修改PMBUS驱动为例,详细介绍OpenBMC内核驱动的完整开发流程。

一、OpenBMC内核驱动开发环境概述

OpenBMC使用Yocto项目作为构建系统,内核驱动开发涉及多个目录和编译阶段:

关键目录结构

openbmc/
├── build/
│   └── {machine}/                          # 构建目录
│       ├── tmp/
│       │   ├── work-shared/               # 共享源码目录(开发修改位置)
│       │   │   └── {machine}/kernel-source/
│       │   ├── work/                      # 工作目录(编译中间文件)
│       │   └── deploy/                    # 部署目录(最终输出文件)
│       └── conf/
└── meta-phosphor/                         # 平台层配置

二、内核驱动修改流程

2.1 定位驱动源码

以修改PMBUS驱动pmbus_crps.c为例:

cd build/{machine}/
vi tmp/work-shared/{machine}/kernel-source/drivers/hwmon/pmbus/pmbus_crps.c

重要提醒work-shared目录是源码的共享副本,修改前请确认是否需要创建永久补丁。

2.2 创建备份(推荐)

# 备份修改的文件
cp drivers/hwmon/pmbus/pmbus_crps.c /tmp/pmbus_crps.c.backup

三、编译流程详解

3.1 编译前确认驱动类型

# 确认驱动配置
grep -r "CONFIG_SENSORS_PMBUS" tmp/work-shared/{machine}/kernel-source/.config

3.2 编译方法选择

方法一:清理并完整编译(最可靠)
# 清理编译状态(不会删除源码)
bitbake -c cleansstate linux-aspeed# 重新编译内核
bitbake virtual/kernel# 重新构建镜像
bitbake obmc-phosphor-image
方法二:强制重新编译(快速开发)
bitbake -c compile -f virtual/kernel
bitbake -c install virtual/kernel
bitbake obmc-phosphor-image
方法三:单独编译驱动模块
# 进入内核构建目录
cd tmp/work-shared/{machine}/kernel-source/# 编译特定驱动
make M=drivers/hwmon/pmbus/

3.3 编译清理命令的区别

命令作用是否删除源码使用场景
cleansstate清除编译状态和输出❌ 不删除常规重新编译
clean基本清理,保留缓存❌ 不删除轻微修改后
cleanall彻底清理,包括下载缓存❌ 不删除源码解决依赖问题

四、输出文件定位与分析

4.1 主要部署目录

# 最终部署文件位置
cd tmp/deploy/images/{machine}/# 查看生成的镜像文件
ls -la

4.2 关键输出文件

  • obmc-phosphor-image-*.static.mtd - MTD镜像文件
  • kernel-*.bin - 内核镜像
  • modules-*.tgz - 内核模块包
  • rootfs.* - 根文件系统

4.3 驱动编译输出查找

# 查找编译后的驱动模块
find tmp/work/ -name "pmbus_crps.ko" -type f# 检查编译中间文件
find tmp/work/ -name "pmbus_crps.o" -type f# 查看编译日志
tail tmp/work/{machine}/linux-aspeed/*/temp/log.do_compile

五、部署与测试

5.1 整体镜像部署

# 使用生成的MTD镜像刷写设备
flashcp obmc-phosphor-image-{machine}-*.static.mtd /dev/mtd6

5.2 模块热更新测试

# 如果是可加载模块,可以热更新
rmmod pmbus_crps
insmod /lib/modules/$(uname -r)/kernel/drivers/hwmon/pmbus/pmbus_crps.ko# 验证驱动加载
dmesg | grep pmbus
lsmod | grep pmbus

5.3 功能验证

# 检查hwmon设备
ls /sys/class/hwmon/
cat /sys/class/hwmon/hwmon*/name# 查看传感器数据
cat /sys/class/hwmon/hwmon*/temp*_input

六、开发调试技巧

6.1 启用驱动调试

在驱动代码中添加调试信息:

#define DEBUG
#include <linux/printk.h>dev_dbg(&client->dev, "CRPS probe: device found\n");
printk(KERN_DEBUG "pmbus_crps: initialization complete\n");

6.2 编译配置检查

# 确认调试选项开启
grep "CONFIG_DEBUG" tmp/work-shared/{machine}/kernel-source/.config
grep "CONFIG_DYNAMIC_DEBUG" tmp/work-shared/{machine}/kernel-source/.config

6.3 快速开发迭代流程

# 1. 修改驱动源码
vi tmp/work-shared/{machine}/kernel-source/drivers/hwmon/pmbus/pmbus_crps.c# 2. 快速编译测试
bitbake -c compile -f virtual/kernel# 3. 检查编译结果
find tmp/work/ -name "pmbus_crps.ko" -exec ls -la {} \;# 4. 部署测试
bitbake obmc-phosphor-image -c rootfs

七、常见问题与解决方案

7.1 编译输出文件找不到

如果tmp/deploy/images/{machine}/目录为空:

# 检查编译是否成功
bitbake -s | grep linux-aspeed# 查找所有可能的输出位置
find tmp/ -name "*.ko" -o -name "*.bin" | head -10# 检查机器配置
grep "^MACHINE" conf/local.conf

7.2 修改被覆盖

解决方案:创建永久补丁

# 生成补丁文件
cd tmp/work-shared/{machine}/kernel-source/
git diff drivers/hwmon/pmbus/pmbus_crps.c > 0001-pmbus-crps-fix.patch# 将补丁添加到对应的recipe中

7.3 驱动加载失败

# 查看详细错误信息
dmesg | tail -20# 检查依赖关系
modinfo pmbus_crps.ko# 验证内核符号版本
nm pmbus_crps.ko | grep unresolved

7.4 目录结构说明

  • {machine}:指代具体的机器名称,如huakun-turinwitherspoon
  • 实际路径根据具体的OpenBMC项目和机器配置而定

八、最佳实践总结

  1. 修改前备份:始终备份对work-shared目录的修改
  2. 渐进式编译:开发时使用-f强制编译加快迭代速度
  3. 版本控制:重要修改应及时创建补丁并提交到recipe
  4. 验证部署:编译后务必验证输出文件是否生成正确
  5. 日志追踪:充分利用dmesg和编译日志进行问题定位
  6. 路径适配:将文中的{machine}替换为实际使用的机器名称

通过本文介绍的完整流程,OpenBMC开发者可以高效地进行内核驱动的修改、编译和调试工作,显著提升开发效率。


本文基于OpenBMC最新社区实践编写,具体命令可能因版本差异而需要调整。实际使用时请将{machine}替换为对应的机器名称。

http://www.dtcms.com/a/522223.html

相关文章:

  • 如何做汽车团购网站网站建设兼职薪酬怎么样
  • 设计手机网站公司wordpress 长页面
  • 动易网站管理系统下载wordpress 如何修改模板底部
  • 长沙做网站的有哪些向wordpress提交插件
  • 电子商务平台网站建造上海装修公司排名前三境远
  • 做烘焙原材料在哪网站买中国今天新闻最新消息
  • 建设政协网站的意义网站开发是怎么开发的
  • 中小企业门户网站建设策略wordpress更换百度编辑器
  • 建站兔软件常见问题专业的网站设计制作
  • 网站建设与管理基础百度管理员联系方式
  • 广西学校网站建设网站备案要到哪里
  • 流媒体视频网站建设电子商务项目设计案例
  • 搭建个人网站的步骤网页设计与制作项目教程黑马程序员
  • 湖北工程建设总承包有限公司网站百度广告联盟推广链接
  • 弹幕网站是怎么做的青岛做网站皆赴青岛博采
  • 怎样建公司网站网站换了域名还被k站不
  • 南宁市网站设计视频购物网站开发方案
  • 要解析做邮箱以及网站电商详情页模板免费套用
  • 手机上可以创建网站吗哈尔滨制作网站工作室
  • 网站更新文章衡水网站建设03181688
  • 做整装的网站怎么才能创建一个网站
  • 怎么在360做网站浏网站建设补贴
  • 做网站的价钱西安网站开发建设
  • 网上推广手段包括合肥官网seo服务
  • 人工智能风险与伦理(6)
  • 江苏省工程建设标准定额网站做网站哪个公司
  • 企业网站ui模板下载wordpress 页面不存在
  • 网站规划与设计方向黑科技引流推广神器下载
  • 合阳县建设局网站企业网站建设的劣势
  • 网站开发百度百科wordpress的404页面如何做