在开发ipmb相关功能时,需要使用devmem修改相关寄存器,但是openUBMC没有携带devmem程序,经过指导可以将busybox作为conan组件编入openUBMC,从而在openUBMC中使用busybox的devmen功能。
1、新建busybox组件目录
创建原始的conan组件,由于使用的是第三方开源软件,所以不需要通过bmcgo创建。
conan文件相关概念,具体查看官方文档
conanfile.py:定义 Conan 包的元数据(如名称、版本、许可证)、依赖关系、构建配置、编译选项等,是 Conan 包的核心配置文件、
#!/usr/bin/python
#-*-coding:utf-8-*-
import os
from conans import ConanFile, tools, AutoToolsBuildEnvironment
class busyboxConan(ConanFile):
name = "busybox"
license = "Mulan PSL v2"
description = "The SoftWare Freedom Conservancy acts as the GPL enforcement agent for various BusyBox"
settings = "os", "compiler", "build_type", "arch"
requires = []
_env_build = None
generators = "make"
_cmake = None
options = {"devmem": [True, False]}
default_options = {"devmem": True}
@property
def _source_subfolder(self):
return "source_subfolder"
def source(self):
git = tools.Git(verify_ssl=False)
git.clone(**self.conan_data["sources"][self.version])
def build(self):
autotools = AutoToolsBuildEnvironment(self)
chost = os.environ.get("CHOST")
if chost is not None:
os.environ["CROSS_COMPILE"] = chost + "-"
autotools.make(target="defconfig")
# 开启 devmem
if self.options.devmem:
os.system("sed -i 's/# CONFIG_DEVMEM is not set/CONFIG_DEVMEM=y/' .config")
autotools.make()
def package(self):
self.copy("busybox", dst="opt/debug")
conandata.yml:存储依赖库的版本范围、构建选项等元数据
sources:
"1.34.1":
url: "https://github.com/mirror/busybox.git"
branch: "1_34_stable"
shallow: true
2、创建本地busybox组件
再目录下执行命令,创建本地组件,要带上build_type=Debug,bmcgo publish默认出Debug包
conan create . busybox/1.34.1@hw.ibmc.release/rc -s build_type=Debug
3、上传本地busybox组件到远程conan仓
conan upload busybox/1.34.1@hw.ibmc.release/rc --all -r=ibmc_dev
4、验证busybox组件
清除本地缓存后,验证能否从远程下载
conan install busybox/1.34.1@hw.ibmc.release/rc -r=ibmc_dev
确保 Options 设置正确,导出table.html浏览器查看
conan search busybox/1.34.1@hw.ibmc.release/rc -r=ibmc_dev --table=table.html
5、manifest引用busybox组件
- conan: byo_general/0.0.1@hw.ibmc.common/rc
- conan: busybox/1.34.1@hw.ibmc.release/rc
options:
devmem: true
6、ssh中使用busybox
opt/debug/busybox ifconfig
opt/debug/busybox devmem
...
7、其他组件使用busybox devmem
在ssh中使用opt/debug/busybox devmem会提示权限错误,猜测是Administrator用户权限问题,经过实践,可改在其他组件服务中调用。
[Service]
User=root
Restart=always
RestartSec=1
StartLimitInterval=0
EnvironmentFile=/dev/shm/dbus/.dbus
Environment="ROOT_DIR="
Environment="PROJECT_DIR="
WorkingDirectory=/opt/bmc/apps/byo_709bmc
ExecStartPre=/opt/debug/busybox touch /tmp/ipmb
ExecStartPre=/opt/debug/busybox devmem 0x08745044 w 3
ExecStartPre=/opt/debug/busybox devmem 0x08745048 w 3
ExecStartPre=/opt/debug/busybox devmem 0x0874504c w 3
ExecStartPre=/opt/debug/busybox devmem 0x08745050 w 3
ExecStartPre=/opt/debug/busybox devmem 0x0871d334 w 0x00007f6
ExecStartPre=/bin/sh -c "/opt/debug/busybox devmem 0x08745044 >> /tmp/ipmb"
ExecStartPre=/bin/sh -c "/opt/debug/busybox devmem 0x08745048 >> /tmp/ipmb"
ExecStartPre=/bin/sh -c "/opt/debug/busybox devmem 0x0874504c >> /tmp/ipmb"
ExecStartPre=/bin/sh -c "/opt/debug/busybox devmem 0x08745050 >> /tmp/ipmb"

