1 概述
在openbmc开发中,我们通常需要修改配置文件以适配自己的板卡,如果直接修改原有的配置文件在使用git更新后会覆盖自己的修改,同时这也不是正常的开发流程,因此我们需要创建自己layer,以更好的适配自己的板卡,同时自己创建layer可进一步学习openbmc的架构。
2 查看layer层结构
以meta-palmetto为例,查看palmetto层目录结构如下:
tree meta-ibm/meta-palmetto/
如果没有tree 命令,可以执行如下命令安装
sudo apt intsall tree
查看palmetto的配置文件结构
tree meta-ibm/meta-palmetto/conf/
2 创建layer
创建顶层目录meta-live(或者你想要的名字)
mkdir -p meta-live
复制meta-palmetto层到meta-live下并改名为meta-test(或者你想要的名字)
cp -r meta-ibm/meta-palmetto meta-live/meta-test
3 修改配置文件
修改meta-live/meta-test/conf/ layer.conf文件,将palmetto替换成test。
修改meta-live/meta-test/conf/ bblayers.conf.sample文件,将改文件中的“/meta-ibm/meta-palmetto”修改为“/meta-live/meta-test”,如下图所示。
修改meta-live/meta-test/conf/local.conf.sample文件,将“MACHINE ??= “palmetto””改为“MACHINE ??= “test””。
修改meta-live/meta-test/machine/palmetto.conf文件为test.conf。
4 编译镜像
4.1 配置变异环境
依次执行如下命令:
rm -rf build/conf
export TEMPLATECONF=meta-live/meta-test/conf
. openbmc-env
如果你的downloads文件不再build目录下需要增加DL_DIR ?= “your downloads path”
如果你的编译环境没有网络连接,需要增加BB_NO_NETWORK = "1"。
4.2 编译镜像
执行如下命令,等待recipes 解析完成并开始编译。
time bitbake obmc-phosphor-image
4.3 错误处理
不出意外你会看到提示如下错误:
此时此刻,千万别慌,请仔细阅读错误提示,是说没有提供u-boot,这是因为机型配置文件是用的之前的需要做相应的修改。
修改meta-live/meta-test/machine/palmetto.conf文件,中的“UBOOT_MACHINE_ palmetto”修改为“UBOOT_MACHINE_${MACHINE}”或着“UBOOT_MACHINE_test”。这里还有一些palmetto的字样,暂时不用管,后续有需求修改即可,不修改也不影响。
继续执行编译命令,将会看到如下错误提示。
这个提示是因为没有内核配置文件不对,修改meta-live/meta-test/recipes-kernel/linux/linux-aspeed_%.bbappend文件,将“palmetto”修改为 “test”或者“${MACHINE}”,建议修改为${MACHINE}这种引用的方式。meta-live/meta-test/recipes-kernel/linux/linux-aspeed/palmetto.cfg文件修改为test.cfg。
继续执行编译命令,会出现如下错误提示:
往上滑查找错误输出,如图所示:
这是因为在编译时候没有找到指定设备树,需要修改meta-live/meta-这是因为在编译时候没有找到指定设备树,需要修改meta-live/meta-test/machine/palmetto.conf文件,将“KERNEL_DEVICETREE = "${KMACHINE}-bmc-opp-${MACHINE}.dtb"”修改为KERNEL_DEVICETREE = "${KMACHINE}-bmc-opp-palmetto.dtb"。因为我们没有提供test机型的设备树,暂时先用palmetto机型的。
4.4 运行编译镜像
经过不断的折腾,总算编译完成了。
编译镜像输出结果
执行qemu命令启动镜像(这里我使用的是官方的qemu-system-arm,并且放在build目录下)
sudo ./qemu-system-arm -m 256 -M palmetto-bmc -nographic -drive file=./tmp/deploy/images/test/flash-test,if=mtd -net nic -net user,hostfwd=:127.0.0.1:2222-:22,hostfwd=:127.0.0.1:2443-:443,hostname=qemu
至此,创建一个简单的层结束,先喝杯咖啡回想一下。。。