【OpenBMC 系列】1.OpenBMC 开发环境搭建
目标:
安装Linux 系统,推荐使用Ubuntu18+,作为开发环境。
安装Qemu 作为bmc运行的虚拟机。
受众:熟悉 Linux 和 BMC 的程序员
先决条件:当前的 Linux、Mac 或 Windows 系统
概述
OpenBMC 使用Yocto项目作为其底层构建和分发生成框架。主要的 OpenBMC README 提供了有关使用 Yocto 和 OpenBMC 的信息。有一些机制可以使用此过程来构建您的更改,但对于您的软件的初始调试和验证来说,它可能既缓慢又麻烦。本指南重点介绍如何使用 OpenBMC 软件开发工具包 (SDK) 和QEMU快速测试新更改。
SDK 是在 BitBake 操作期间构建的一组包。BitBake 是用于构建基于 Yocto 的发行版的工具。SDK 提供了构建 OpenBMC 应用程序所需的所有库和交叉编译器。SDK 不用于构建整个 OpenBMC 闪存映像,它提供了一种机制来编译 OpenBMC 应用程序和库,然后您可以将这些应用程序和库复制到正在运行的系统上进行测试。
QEMU 是一个软件模拟器,可用于运行 OpenBMC 映像。
本文档介绍了设置 OpenBMC 开发环境和安装所需 SDK 的推荐步骤。
出于测试目的,本指南使用 Romulus 系统作为默认系统,因为这是为每个 CI 作业测试的系统,这意味着它是最稳定的。
安装 Linux 环境
如果您运行的是 Linux,并且可以安装一些额外的软件包,那么您可以跳到第 3 步。
推荐的 OpenBMC 开发环境是最新的 Ubuntu LTS 版本。其他版本的 Linux 可能也可以,但需要您自担风险。如果您有 Windows 或 Mac 操作系统,那么 VirtualBox 是运行开发环境的推荐虚拟化工具。
1.在您的计算机(Mac、Windows、Linux)上安装VirtualBox或 VMware
两者都有可用于您需要的免费版本。VirtualBox 是大多数核心 OpenBMC 开发所使用的。注意:如果要使用此 VM 对完整的 OpenBMC 映像进行 BitBake,则需要分配尽可能多的资源。理想的最低资源是 8 个线程、16GB 内存、200GB 硬盘。仅用于 SDK 构建和 QEMU 应该可以正常使用 VM 上的正常默认值。
2.安装最新的 Ubuntu LTS 版本
大多数 OpenBMC 开发社区使用 Ubuntu。下面的 qemu 建立在18.04 上,但最新的应该可以工作。Fedora 等其他 Linux 发行版也是如此,但同样,核心 OpenBMC 团队对这些发行版的测试几乎没有 Ubuntu 那么多。
VirtualBox 提示- 您需要在 VM 和主机之间进行复制/粘贴工作。为此,一旦您的 VM 启动并运行:
- 设备 -> 插入访客添加 CD 映像(安装)
- 设备 -> 共享剪贴板 -> 双向
- 重新启动(VM)
3.安装所需的包
请参阅 先决条件 链接。
1) 先决条件
- Ubuntu 14.04+
sudo apt-get install -y git build-essential libsdl1.2-dev texinfo gawk chrpath diffstat device-tree-compiler
- Fedora 28
sudo dnf install -y git patch diffstat texinfo chrpath SDL-devel bitbake \
rpcgen perl-Thread-Queue perl-bignum perl-Crypt-OpenSSL-Bignum
sudo dnf groupinstall "C Development Tools and Libraries"
2)下载源码
git clone git@github.com:openbmc/openbmc.git
cd openbmc
3)针对您的硬件
任何构建都需要根据您的硬件目标设置环境。此存储库的根目录中有一个特殊脚本,可用于根据需要配置环境。脚本被调用setup
,并将硬件目标的名称作为参数。
该脚本需要在 OpenBMC 存储库克隆的顶级目录中获取,如果不带参数运行,将显示支持的硬件目标列表,请参见以下示例:
$ . setup <machine> [build_dir]
Target machine must be specified. Use one of:
bletchley gsj romulus
dl360poc kudo s2600wf
e3c246d4i mihawk swift
ethanolx mtjade tiogapass
evb-ast2500 nicole transformers
evb-ast2600 olympus-nuvoton witherspoon
evb-npcm750 on5263m5 witherspoon-tacoma
f0b p10bmc x11spi
fp5280g2 palmetto yosemitev2
g220a qemuarm zaius
gbs quanta-q71l
一旦您知道目标(例如 romulus),请setup
按如下方式获取脚本:
. setup romulus
4) 构建
bitbake obmc-phosphor-image
注意- 在 Ubuntu 中,在安装软件包之前可能需要“sudo apt-get update”。
下载并安装 SDK
OpenBMC 软件开发套件 (SDK) 包含一个跨工具链和一组用于处理 OpenBMC 应用程序的库。SDK 安装在您将用于为 OpenBMC 开发应用程序的机器上,而不是安装在 BMC 本身上。
一般一个BMC的SDK不能用于其他BMC的软件开发。这可能是由于平台 ABI、libc 或内核差异,或在固件配置中所做的任何其他选择。
Romulus 是用于本演练目的的 BMC 平台。
要开始使用 SDK:
- 1将最新的 SDK 下载到您的系统。建议您创建一个目录来存储您的 SDK 脚本和安装目录,以使您的工作区井井有条。
mkdir -p ~/sdk
cd ~/sdk
wget https://jenkins.openbmc.org/job/latest-master-sdk/label=docker-builder,target=romulus/lastSuccessfulBuild/artifact/deploy/sdk/oecore-x86_64-arm1176jzs-toolchain-nodistro.0.sh
chmod u+x oecore-x86_64-arm1176jzs-toolchain-nodistro.0.sh
- 2安装 SDK
选择合适的位置和名称。最好在目录名称中包含该 SDK 支持的日期和系统。例如:
mkdir -p ~/sdk/romulus-`date +%F`
运行以下命令安装SDK。当命令要求您“输入 SDK 的目标目录”时,请输入您在上一步中创建的目录。
./oecore-x86_64-arm1176jzs-toolchain-nodistro.0.sh
安装脚本将指示进度并给出如下完成消息:
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source
the environment setup script e.g. $ . /...path-to-sdk.../environment-setup-arm1176jzs-openbmc-linux-gnueabi
- 3将自己输入到 SDK 中
确保没有错误。执行此操作的命令将在安装结束时提供。要让您的 shell 使用新的 SDK 环境,您必须获取environment-setup
在上一步中创建的脚本。您可能希望保存所需的命令,例如,将上面的文本剪切/粘贴到 README 中。
就是这样,您现在拥有了 OpenBMC 的工作开发环境!
下载并启动 QEMU 会话
- 1下载最新的 QEMU 应用的 openbmc/qemu fork
wget https://jenkins.openbmc.org/job/latest-qemu-x86/lastSuccessfulBuild/artifact/qemu/build/qemu-system-arm
chmod u+x qemu-system-arm
- 2下载 Romulus 镜像。
wget https://jenkins.openbmc.org/job/latest-master/label=docker-builder,target=romulus/lastSuccessfulBuild/artifact/openbmc/build/tmp/deploy/images/romulus/obmc-phosphor-image-romulus.static.mtd
- 3使用下载的 Romulus 镜像启动 QEMU
注- 要使 REST、SSH 和 IPMI 工作到您的 QEMU 会话中,您必须将一些主机端口连接到 QEMU 会话中的 REST、SSH 和 IPMI 端口。在这个例子中,它只使用 2222、2443、2623。你可以使用任何你喜欢的。
./qemu-system-arm -m 256 -M romulus-bmc -nographic \
-drive file=./obmc-phosphor-image-romulus.static.mtd,format=raw,if=mtd \
-net nic \
-net user,hostfwd=:127.0.0.1:2222-:22,hostfwd=:127.0.0.1:2443-:443,hostfwd=udp:127.0.0.1:2623-:623,hostname=qemu
注- 默认情况下,Jenkins 和 openbmc-test-automation 分别使用 SSH 和 HTTPS 端口 22 和 443。对于 IPMI 端口 623 被使用。使用用户定义的端口 2222 的 SSH 连接可能不会成功。要使用 SSH 端口 22、HTTPS 端口 443 和 IPMI 端口 623:
./qemu-system-arm -m 256 -machine romulus-bmc -nographic \
-drive file=./obmc-phosphor-image-romulus.static.mtd,format=raw,if=mtd \
-net nic \
-net user,hostfwd=:127.0.0.1:22-:22,hostfwd=:127.0.0.1:443-:443,hostfwd=tcp:127.0.0.1:80-:80,hostfwd=tcp:127.0.0.1:2200-:2200,hostfwd=udp:127.0.0.1:623-:623,hostfwd=udp:127.0.0.1:664-:664,hostname=qemu
- 4等待基于 QEMU 的 BMC 启动
使用默认的 root/0penBmc 登录登录(注意 0 是零)。
- 5检查系统状态
您会在控制台中看到很多服务启动,您可以开始运行 obmcutil 工具来检查 OpenBMC 状态服务的状态。当您看到以下内容时,您已成功启动到“就绪”状态。
root@openbmc:~# obmcutil state
CurrentBMCState : xyz.openbmc_project.State.BMC.BMCState.Ready
CurrentPowerState : xyz.openbmc_project.State.Chassis.PowerState.Off
CurrentHostState : xyz.openbmc_project.State.Host.HostState.Off
注意要退出(并终止)您的 QEMU 会话,请运行:ctrl+a x
替代 yocto QEMU
yocto 有用于构建和运行 qemu 的工具。这些工具避免了下载预构建映像和修改二进制文件时出现的一些配置问题。使用 yocto qemu 还使用了 一些人认为更稳定的TAP 接口。这在应用程序级别调试时特别有用。
- 设置 bmc 构建环境
source setup romulus myBuild/build
- 添加qemu x86开放嵌入式机进行测试
MACHINE ??= "qemux86"
- 对构建进行更改(即 devtool 修改 bmcweb,devtool 添加 gdb)
devtool modify bmcweb myNewLocalbmcweb/
- 为 qemu x86 机器构建 open bmc
MACHINE=qemux86 bitbake obmc-phosphor-image
- 按照 yocto 提供的方式运行 qemu
runqemu myBuild/build/tmp/deploy/images/qemux86/ nographic \
qemuparams="-m 2048"
- 之后添加了所有的 TAP 网络接口,并且像 ssh、scp、http 这样的协议运行良好。
更多推荐
所有评论(0)