当前位置: 首页 > 工具软件 > OpenBMC > 使用案例 >

openbmc开发28:fru配置和测试

楚雪松
2023-12-01

openbmc开发23:添加fru信息到ipmi中说明了如何将fru信息添加到ipmi中,本文将讲述如何生成fru以及fru信息获取展示以及修改等。

1 yaml配置文件转换成cpp

在软件包下有一个scripts文件夹,这里边是python脚本、模板、示例yaml文件以及使用说明,本内容介绍fru的yaml文件。在configure阶段,通过autoconf工具,解析configure.ac以及Makefile.am生成Makefile文件,在编译阶段执行fru_gen.py的python脚本,根据fru_config.yaml文件生成fru-gen.cpp文件。
这部分的配置文件和openbmc开发23一文中的配置文件其实是同一个,也需要通过bbappend文件来指定。

2 配置fru配置文件

方法一
通过安装覆盖的方式。
参考openbmc开发23:添加fru信息到ipmi中方法一。但是需要在自己的layer下创建ipmi/phosphor-ipmi-fru_%.bbappend文件,文件内容如下:

DEPENDS_append_${MACHINE} = " yaml-config"

EXTRA_OECONF_${MACHINE} = " \
    YAML_GEN=${STAGING_DIR_HOST}${datadir}/yaml-config/ipmi-fru-read.yaml \
    PROP_YAML=${STAGING_DIR_HOST}${datadir}/yaml-config/ipmi-extra-properties.yaml \
    "

方法二:
在your-layer/conf/machine/machine.conf中指定配置文件。
参考openbmc开发23:添加fru信息到ipmi中的方法二,只不过需要在xxx-ipmi-fru-map-native.bb文件中的do_install_append()函数中添加如下内容:

  IPMI_FRU_SRC=${datadir}/phosphor-ipmi-fru/config
  IPMI_HOST_DEST=${D}${datadir}/phosphor-ipmi-host/config
  install -d ${IPMI_HOST_DEST}
  cat ${IPMI_FRU_SRC}/config.yaml > ${IPMI_HOST_DEST}/fru_config.yaml

这里依赖于openbmc开发23:添加fru信息到ipmi中配置,在之前的配置上增加配置,另外,不要两种方法混用以免导致报错。

3 yaml文件

yaml文件和openbmc开发23:添加fru信息到ipmi中一样,不需要进行修改,这里不做赘述。

4 指定fru的eeprom设备

4.1 创配置文件

创建phosphor-ipmi-fru文件夹,创建obmc/eeproms/system/motherboard文件内容如下:

SYSFS_PATH=/sys/bus/i2c/devices/3-0058/eeprom
FRUID=1

SYSFS_PATH是eeprom驱动生成的文件;
FRUID是指定fru信息的编号,需要和ipmi-fru中的保持一致,并且不要重复。
文件名可以是其它的,如board等,文件夹也可以创建obmc/eeproms/system/chassis/motherboard文件。如果有多个fru的eeprom,可以创建多个文件即可,但是注意FRUID不要重复。
/etc/default/obmc/eeproms/

dts中配置eeprom:

&i2c3 {
	status = "okay";
    /* FRU */
	eeprom@58 {
		compatible = "atmel,24c256";
		reg = <0x58>;
	};
};

compatible字段需要指定对应eeprom的驱动,同时在内核配置时打开对应驱动。
如果dts中没有配置,内核中有编译eeprom的驱动,可以手动创建eeprom的驱动:执行echo 24c256 0x58 > /sys/bus/i2c/i2c-3/newdeveice命令

4.1 打包配置文件到镜像

在ipmi/phosphor-ipmi-fru_%.bbappend文件中添加

inherit obmc-phosphor-systemd systemd

FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"

EEPROM_NAMES = "motherboard"

EEPROMFMT = "system/{0}"
EEPROM_ESCAPEDFMT = "system-chassis-{0}"
EEPROMS = "${@compose_list(d, 'EEPROMFMT', 'EEPROM_NAMES')}"
EEPROMS_ESCAPED = "${@compose_list(d, 'EEPROM_ESCAPEDFMT', 'EEPROM_NAMES')}"

ENVFMT = "obmc/eeproms/{0}"
SYSTEMD_ENVIRONMENT_FILE_${PN} := " ${@compose_list(d, 'ENVFMT', 'EEPROMS')}"

TMPL = "obmc-read-eeprom@.service"
TGT = "${SYSTEMD_DEFAULT_TARGET}"
INSTFMT = "obmc-read-eeprom@{0}.service"
FMT = "../${TMPL}:${TGT}.wants/${INSTFMT}"

SYSTEMD_LINK_${PN}_append := " ${@compose_list(d, 'FMT', 'EEPROMS_ESCAPED')}"
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"

EEPROM_NAMES 指定配置文件名,多个文件注意中间加空格,如EEPROM_NAMES = “motherboard bmc fan”
EEPROMFMT指定路径,如果前面创建的有chassis,则EEPROMFMT = “system/chassis/{0}”。
其实这一步操作主要是把文件安装到bmc文件系统中/etc/default/obmc/eeproms/下,如果嫌这些配置麻烦,可以自己创建do_install()函数来安装(后期文章说明)。

5 fru二进制文件生成

github上ipmitool下有开源工具frugen来生成fru.bin文件。网址:https://github.com/ipmitool/frugen。

6 fru二进制写入eeprom

7 实际测试

 类似资料: