在openbmc开发23:添加fru信息到ipmi中说明了如何将fru信息添加到ipmi中,本文将讲述如何生成fru以及fru信息获取展示以及修改等。
在软件包下有一个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文件来指定。
方法一
通过安装覆盖的方式。
参考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中配置,在之前的配置上增加配置,另外,不要两种方法混用以免导致报错。
yaml文件和openbmc开发23:添加fru信息到ipmi中一样,不需要进行修改,这里不做赘述。
创建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
命令
在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()函数来安装(后期文章说明)。
github上ipmitool下有开源工具frugen来生成fru.bin文件。网址:https://github.com/ipmitool/frugen。