构建
❯ git clone git@github.com:openbmc/openbmc.git
❯ cd openbmc
❯ source setup romulus
Machine romulus found in meta-ibm/meta-romulus
Common targets are:
obmc-phosphor-image
❯ bitbake obmc-phosphor-image
❯ ls build/romulus/tmp/deploy/images/romulus
obmc-phosphor-image-romulus-20231103030737.static.mtd
其中 setup 脚本做的事情主要是搜索 meta-*/conf/machine/
目录,找到与命令行参数匹配的机器类型,然后执行 oe-init-build-env 脚本(${target}
即命令行参数机器类型):
configs=$(ls -1 meta-*/meta-*/conf/machine/*.conf meta-*/conf/machine/*.conf)
configs="$configs $(ls -1 poky/meta/conf/machine/qemu*.conf)"
for cfg in $configs; do
name=${cfg##*/}
name=${name%.conf}
tmpl=${cfg%/machine/*.conf}
if [ "${name}" = "${target}" ]; then
mkdir -p "${build_dir}"
TEMPLATECONF="${tmpl}/templates/default" source oe-init-build-env "${build_dir}"
fi
done
而 oe-init-build-env 脚本做的事情主要是根据 TEMPLATECONF
目录下的 bblayers.conf.sample 和 local.conf.sample 文件在 build/conf 目录下创建相应 bblayers.conf, local.conf 文件,然后将 TEMPLATECONF
的值写入 templateconf.cfg 文件。
因此,setup 脚本也可以通过类似如下的方法显式执行(默认构建目录为 build
):
❯ TEMPLATECONF=meta-ibm/meta-romulus/conf/templates/default source oe-init-build-env
内置支持的机器类型可以通过如下命令查看:
❯ source setup
Target machine must be specified. Use one of:
ahe50dc lannister s6q
bletchley mori s7106
daytonax mtjade s8036
dl360-g11 mtmitchell sbp1
dl360poc ncplite swift
e3c246d4i nf5280m7 system1
ethanolx nicole tatlin-archive-x86
evb-ast2500 olympus-nuvoton tiogapass
evb-ast2600 on5263m5 transformers
evb-npcm750 p10bmc vegman-n110
evb-npcm845 p10bmc-distributed vegman-rx20
f0b palmetto vegman-sx20
fp5280g2 qcom-dc-scm-v1 witherspoon
g220a quanta-q71l witherspoon-tacoma
gbs rl300-g11 x11spi
genesis3 romed8hm3 yosemite4
greatlakes romulus yosemitev2
kudo s2600wf zaius
构建目录
构建目录(TOPDIR
)下的内容如下所示:
其中 work/ 目录是构建过程的中间产物,sysroots-components/ 目录保存了应用构建时用到的 recipe-sysroot 和 recipe-sysroot-native 目录的内容,deploy/images/romulus/ 是最终生成的镜像,这三者类似于 rpmbuild 的 BUILD, BUILDROOT, RPMS 三个目录。
work/ 和 sysroots-components/ 下的各目录有点类似于 rpmbuild 的 RPMS/noarch, RPMS/x86_64 等,与体系架构相关。
gcc 在 sysroots-components/x86_64/gcc-cross-arm 目录下,binutils 在 sysroots-components/x86_64/binutils-cross-arm 目录下。
bitbake 命令
❯ bitbake -s
bmcweb :1.0+git-r0
gcc :13.2.0-r0
gcc-cross-arm :13.2.0-r0
❯ bitbake bmcweb -c listtasks
❯ bitbake bmcweb -e | grep ^BBLAYERS= -5
❯ bitbake bmcweb
❯ bitbake bmcweb -c cleansstate
❯ bitbake bmcweb -c cleanall
❯ bitbake-layers show-layers
listtasks
列出来的 task 可以单独执行:
❯ bitbake virtual/kernel -c do_fetch
qemu 模拟运行
❯ qemu-system-arm -m 256 -M romulus-bmc -nographic -drive file=build/romulus/tmp/deploy/images/romulus/obmc-phosphor-image-romulus-20231103030737.static.mtd,format=raw,if=mtd -net nic -net user,hostfwd=::2222-:22,hostfwd=::2443-:443,hostfwd=udp::2623-:623,hostname=qemu
注意 hostname
参数不可缺少,否则无法启动。
登陆用户名和密码(包括 SSH 和 bmcweb):root / 0penBmc
不需要按照文档里的方法去用 qemu fork,而是直接可以用系统自带的上游版 qemu 启动虚拟机
在 QEMU 中运行 OpenBMC
https://jia.je/system/2023/08/11/openbmc-qemu/
OpenBMC 每日构建镜像(以 romulus 为例)
https://jenkins.openbmc.org/job/latest-master/lastSuccessfulBuild/label=docker-builder,target=romulus/
最后修改于 2023-12-31