1cdfa8079SJeremy Kerr# OpenBMC cheatsheet 2cdfa8079SJeremy Kerr 3cdfa8079SJeremy KerrThis document is intended to provide a set of recipes for common OpenBMC 4cdfa8079SJeremy Kerrcustomisation tasks, without having to know the full yocto build process. 5cdfa8079SJeremy Kerr 6cdfa8079SJeremy Kerr## Using a local kernel build 7cdfa8079SJeremy Kerr 8cdfa8079SJeremy KerrThe kernel recipe is in: 9cdfa8079SJeremy Kerr 10cdfa8079SJeremy Kerr``` 11ba2abfa4SYong Li meta-phosphor/common/recipes-kernel/linux/linux-obmc_X.Y.bb 12cdfa8079SJeremy Kerr``` 13cdfa8079SJeremy Kerr 14*f4febd00SPatrick WilliamsTo use a local git tree, change the `SRC_URI` to a git:// URL without a 15*f4febd00SPatrick Williamshostname, and remove the `protocol=git` parameter. For example: 16cdfa8079SJeremy Kerr 17cdfa8079SJeremy Kerr``` 18267a0d68SZev WeissSRC_URI = "git:///home/jk/devel/linux;branch=${KBRANCH}" 19cdfa8079SJeremy Kerr``` 20cdfa8079SJeremy Kerr 21*f4febd00SPatrick WilliamsThe `SRCREV` variable can be used to set an explicit git commit, or set to 22*f4febd00SPatrick Williams`"${AUTOREV}"` to use the latest commit in `KBRANCH`. 23cdfa8079SJeremy Kerr 247b22067aSJoel Stanley## Building for Palmetto 25cdfa8079SJeremy Kerr 267b22067aSJoel StanleyThe Palmetto target is `palmetto`. 277b22067aSJoel Stanley 287b22067aSJoel Stanley``` 297b22067aSJoel Stanley$ cd openbmc 30c1768568SPatrick Williams$ . setup palmetto 3135abff5fSJeremy Kerr$ bitbake obmc-phosphor-image 327b22067aSJoel Stanley``` 337b22067aSJoel Stanley 3467850dd8SGunnar Mills## Building for Zaius 3557812c89SAdi Gangidi 3667850dd8SGunnar MillsThe Zaius target is `zaius`. 3757812c89SAdi Gangidi 3857812c89SAdi Gangidi``` 3957812c89SAdi Gangidi$ cd openbmc 40c1768568SPatrick Williams$ . setup zaius 4157812c89SAdi Gangidi$ bitbake obmc-phosphor-image 4257812c89SAdi Gangidi``` 4357812c89SAdi Gangidi 44d5afde33SAdriana Kobylak## Building a specific machine configuration 45d5afde33SAdriana Kobylak 46d5afde33SAdriana KobylakIf the system you want to build contains different machine configurations: 47d5afde33SAdriana Kobylak 48c1768568SPatrick Williams``` 49d5afde33SAdriana Kobylakmeta-<layer>/meta-<system>/conf/machine/machineA.conf 50d5afde33SAdriana Kobylakmeta-<layer>/meta-<system>/conf/machine/machineB.conf 51c1768568SPatrick Williams``` 52d5afde33SAdriana Kobylak 53*f4febd00SPatrick WilliamsYou can specify the machine configuration you want to build by passing the name 54*f4febd00SPatrick Williamsto the `setup`. 55d5afde33SAdriana Kobylak 56c1768568SPatrick Williams``` 57d5afde33SAdriana Kobylak$ cd openbmc 58c1768568SPatrick Williams$ . setup machineB 59d5afde33SAdriana Kobylak$ bitbake obmc-phosphor-image 60c1768568SPatrick Williams``` 61d5afde33SAdriana Kobylak 620ea78f3aSChris Austen## Building the OpenBMC SDK 63*f4febd00SPatrick Williams 64*f4febd00SPatrick WilliamsLooking for a way to compile your programs for 'ARM' but you happen to be 65*f4febd00SPatrick Williamsrunning on a 'PPC' or 'x86' system? You can build the sdk receive a fakeroot 66*f4febd00SPatrick Williamsenvironment. 67*f4febd00SPatrick Williams 680ea78f3aSChris Austen``` 690ea78f3aSChris Austen$ bitbake -c populate_sdk obmc-phosphor-image 70155192f5Scausten$ ./tmp/deploy/sdk/openbmc-phosphor-glibc-x86_64-obmc-phosphor-image-armv5e-toolchain-2.1.sh 710ea78f3aSChris Austen``` 72*f4febd00SPatrick Williams 73*f4febd00SPatrick WilliamsFollow the prompts. After it has been installed the default to setup your env 74*f4febd00SPatrick Williamswill be similar to this command 75*f4febd00SPatrick Williams 760ea78f3aSChris Austen``` 77155192f5Scausten. /opt/openbmc-phosphor/2.1/environment-setup-armv5e-openbmc-linux-gnueabi 780ea78f3aSChris Austen``` 790ea78f3aSChris Austen 807b22067aSJoel Stanley## Rebuilds & Reconfiguration 817b22067aSJoel Stanley 827b22067aSJoel StanleyYou can reconfigure your build by removing the build/conf dir: 83*f4febd00SPatrick Williams 847b22067aSJoel Stanley``` 857b22067aSJoel Stanleyrm -rf build/conf 867b22067aSJoel Stanley``` 87*f4febd00SPatrick Williams 88c1768568SPatrick Williamsand running `setup` again. 898196be3eSJeremy Kerr 90924bc9c1SGunnar Mills## Useful D-Bus CLI tools 918196be3eSJeremy Kerr 928196be3eSJeremy Kerr## `busctl` 938196be3eSJeremy Kerr 948196be3eSJeremy Kerrhttp://www.freedesktop.org/software/systemd/man/busctl.html 958196be3eSJeremy Kerr 96924bc9c1SGunnar MillsGreat tool to issue D-Bus commands via cli. That way you don't have to wait for 978196be3eSJeremy Kerrthe code to hit the path on the system. Great for running commands with QEMU 988196be3eSJeremy Kerrtoo! 998196be3eSJeremy Kerr 1008196be3eSJeremy KerrRun as: 1018196be3eSJeremy Kerr 1028196be3eSJeremy Kerr``` 1038196be3eSJeremy Kerrbusctl call <path> <interface> <object> <method> <parameters> 1048196be3eSJeremy Kerr``` 1058196be3eSJeremy Kerr 106*f4febd00SPatrick Williams- \<parameters\> example : sssay "t1" "t2" "t3" 2 2 3 107dd7e9997SAndrew Jeffery 108dd7e9997SAndrew Jeffery## Using QEMU 109dd7e9997SAndrew Jeffery 110*f4febd00SPatrick WilliamsQEMU has a palmetto-bmc machine (as of v2.6.0) which implements the core devices 111*f4febd00SPatrick Williamsto boot a Linux kernel. OpenBMC also 112*f4febd00SPatrick Williams[maintains a tree](https://github.com/openbmc/qemu) with patches on their way 113*f4febd00SPatrick Williamsupstream or temporary work-arounds that add to QEMU's capabilities where 114*f4febd00SPatrick Williamsappropriate. 115dd7e9997SAndrew Jeffery 11681db7dbaSChris Austen``` 11781db7dbaSChris Austenqemu-system-arm -m 256 -M palmetto-bmc -nographic \ 11881db7dbaSChris Austen-drive file=<path>/flash-palmetto,format=raw,if=mtd \ 11981db7dbaSChris Austen-net nic \ 1206d0fb8f8SAndrew Jeffery-net user,hostfwd=:127.0.0.1:2222-:22,hostfwd=:127.0.0.1:2443-:443,hostname=qemu 12181db7dbaSChris Austen``` 122*f4febd00SPatrick Williams 123*f4febd00SPatrick WilliamsIf you get an error you likely need to build QEMU (see the section in this 124*f4febd00SPatrick Williamsdocument). If no error and QEMU starts up just change the port when interacting 125*f4febd00SPatrick Williamswith the BMC... 126dd7e9997SAndrew Jeffery 127dd7e9997SAndrew Jeffery``` 12881db7dbaSChris Austencurl -c cjar -b cjar -k -H "Content-Type: application/json" \ 12981db7dbaSChris Austen-X POST https://localhost:2443/login -d "{\"data\": [ \"root\", \"0penBmc\" ] }" 13081db7dbaSChris Austen``` 131*f4febd00SPatrick Williams 13281db7dbaSChris Austenor 13381db7dbaSChris Austen 13481db7dbaSChris Austen``` 13581db7dbaSChris Austenssh -p 2222 root@localhost 136dd7e9997SAndrew Jeffery``` 137dd7e9997SAndrew Jeffery 138dd7e9997SAndrew JefferyTo quit, type `Ctrl-a c` to switch to the QEMU monitor, and then `quit` to exit. 139ae88254cSJoel Stanley 14081db7dbaSChris Austen## Building QEMU 14181db7dbaSChris Austen 14281db7dbaSChris Austen``` 14381db7dbaSChris Austengit clone https://github.com/openbmc/qemu.git 14481db7dbaSChris Austencd qemu 14581db7dbaSChris Austengit submodule update --init dtc 14681db7dbaSChris Austenmkdir build 14781db7dbaSChris Austencd build 14881db7dbaSChris Austen../configure --target-list=arm-softmmu 14981db7dbaSChris Austenmake 15081db7dbaSChris Austen``` 151*f4febd00SPatrick Williams 152*f4febd00SPatrick WilliamsBuilt file will be located at: `arm-softmmu/qemu-system-arm` 15381db7dbaSChris Austen 15481db7dbaSChris Austen### Use a bridge device 155*f4febd00SPatrick Williams 156*f4febd00SPatrick WilliamsUsing a bridge device requires a bit of root access to set it up. The benefit is 157*f4febd00SPatrick Williamsyour qemu session runs in the bridges subnet so no port forwarding is needed. 15881db7dbaSChris AustenThere are packages needed to yourself a virbr0 such as... 15981db7dbaSChris Austen 16081db7dbaSChris Austen``` 16181db7dbaSChris Austenapt-get install libvirt libvirt-bin bridge-utils uml-utilities qemu-system-common 16281db7dbaSChris Austen 16381db7dbaSChris Austenqemu-system-arm -m 256 -M palmetto-bmc -nographic \ 16481db7dbaSChris Austen-drive file=<path>/flash-palmetto,format=raw,if=mtd \ 16581db7dbaSChris Austen-net nic,macaddr=C0:FF:EE:00:00:02,model=ftgmac100 \ 16681db7dbaSChris Austen-net bridge,id=net0,helper=/usr/lib/qemu-bridge-helper,br=virbr0 16781db7dbaSChris Austen``` 16881db7dbaSChris Austen 16981db7dbaSChris AustenThere are some other useful parms like that can redirect the console to another 17081db7dbaSChris Austenwindow. This results in having an easily accessible qemu command session. 171*f4febd00SPatrick Williams`-monitor stdio -serial pty -nodefaults` 17281db7dbaSChris Austen 173ae88254cSJoel Stanley## Booting the host 174ae88254cSJoel Stanley 175ae88254cSJoel StanleyLogin: 176*f4febd00SPatrick Williams 177ae88254cSJoel Stanley``` 17803504a95SGunnar Millscurl -c cjar -k -X POST -H "Content-Type: application/json" -d '{"data": [ "root", "0penBmc" ] }' https://${bmc}/login 179ae88254cSJoel Stanley``` 180ae88254cSJoel Stanley 181ae88254cSJoel StanleyConnect to host console: 182*f4febd00SPatrick Williams 183ae88254cSJoel Stanley``` 184ae88254cSJoel Stanleyssh -p 2200 root@bmc 185ae88254cSJoel Stanley``` 186ae88254cSJoel Stanley 187ae88254cSJoel StanleyPower on: 188*f4febd00SPatrick Williams 189ae88254cSJoel Stanley``` 190b56bec0dSGunnar Millscurl -c cjar -b cjar -k -H "Content-Type: application/json" -X PUT \ 191b56bec0dSGunnar Mills -d '{"data": "xyz.openbmc_project.State.Host.Transition.On"}' \ 19203504a95SGunnar Mills https://${bmc}/xyz/openbmc_project/state/host0/attr/RequestedHostTransition 193ae88254cSJoel Stanley``` 194246fc994SLei YU 195246fc994SLei YU## GDB 196246fc994SLei YU 197246fc994SLei YU[SDK build](#building-the-openbmc-sdk) provides GDB and debug symbols: 198246fc994SLei YU 199*f4febd00SPatrick Williams- `$GDB` is available to use once SDK environment is setup 200*f4febd00SPatrick Williams- Debug symbols are located in `.debug/` directory of each executable 201246fc994SLei YU 202246fc994SLei YUTo use GDB: 203246fc994SLei YU 204246fc994SLei YU1. Setup SDK environment; 205246fc994SLei YU2. Run below GDB commands: 206246fc994SLei YU ``` 207246fc994SLei YU cd <sysroot_of_sdk_build> 208246fc994SLei YU $GDB <relative_path_to_exeutable> <path_to_core_file> 209246fc994SLei YU ``` 210246fc994SLei YU 211246fc994SLei YU## Coredump 212246fc994SLei YU 213246fc994SLei YUBy default coredump is disabled in OpenBMC. To enable coredump: 214*f4febd00SPatrick Williams 215246fc994SLei YU``` 216246fc994SLei YUecho '/tmp/core_%e.%p' | tee /proc/sys/kernel/core_pattern 21748ec067cSLei YUulimit -c unlimited 218246fc994SLei YU``` 219246fc994SLei YU 2204635bf2fSPatrick Venture## Cleaning up read-write file system changes 2214635bf2fSPatrick Venture 2224635bf2fSPatrick VentureYou may want to investigate which file(s) are persisting through the overlay 223*f4febd00SPatrick Williamsrwfs. To do this, you can list this path and then remove those files which you'd 224*f4febd00SPatrick Williamsprefer the originals or remove the deletion overlay to restore files. 2254635bf2fSPatrick Venture 2264635bf2fSPatrick Venture``` 2274635bf2fSPatrick Venture/run/initramfs/rw/cow/ 2284635bf2fSPatrick Venture``` 229e94a168cSLei YU 230e94a168cSLei YU## Building 231e94a168cSLei YU 232e94a168cSLei YU### Share downloads directory 233*f4febd00SPatrick Williams 234e94a168cSLei YUIt takes a long time for the first build of OpenBMC. It downloads various repos 235e94a168cSLei YUfrom the internet. 236e94a168cSLei YU 237e94a168cSLei YUCheck `build/downloads` to see all the downloaded repos. 238e94a168cSLei YU 239*f4febd00SPatrick Williams- If a repo is a single archive, it usually looks like this: 240*f4febd00SPatrick Williams - `zlib-1.2.11.tar.xz` - The repo itself 241*f4febd00SPatrick Williams - `zlib-1.2.11.tar.xz.done` - A flag indicating the repo is downloaded 242*f4febd00SPatrick Williams- If a repo is managed by git, it usually looks like this: 243*f4febd00SPatrick Williams - `git2/github.com.openbmc.linux` - The git bare clone 244*f4febd00SPatrick Williams - `git2/github.com.openbmc.linux.done` - A flag indicating the repo is 245*f4febd00SPatrick Williams downloaded 246e94a168cSLei YU 247e94a168cSLei YUBitbake will extract the code to the working directory during build, so the 248e94a168cSLei YU`downloads` directory could be shared by different builds on a system: 249e94a168cSLei YU 250*f4febd00SPatrick Williams- Set `DL_DIR` Bitbake environment variable to the location of your shared 251e94a168cSLei YU downloads directory by editing the `build/conf/local.conf` file: 252e94a168cSLei YU ``` 253e94a168cSLei YU DL_DIR ?= "<path>/<to>/<existing>/downloads" 254e94a168cSLei YU ``` 255*f4febd00SPatrick Williams- Or create a symbol link: 256e94a168cSLei YU ``` 257e94a168cSLei YU ln -sf <path>/<to>/<existing>/downloads build/downloads 258e94a168cSLei YU ``` 259e94a168cSLei YU Then do the build. It will save a lot of time from downloading codes. 260e94a168cSLei YU 261e94a168cSLei YU## Using git proxy 262*f4febd00SPatrick Williams 263e94a168cSLei YUIf you experience extremely slow download speed during code fetch (e.g. if you 264e94a168cSLei YUare in China), it is possible to use a git proxy to speed up the code fetch. 265e94a168cSLei YU 266*f4febd00SPatrick WilliamsGoogle `git-proxy-wrapper` will find various ways to setup the proxy for the git 267*f4febd00SPatrick Williamsprotocol. 268e94a168cSLei YU 269e94a168cSLei YUBelow is an example wrapper in `~/bin` assuming a socks5 proxy at port 9054: 270*f4febd00SPatrick Williams 271e94a168cSLei YU``` 272e94a168cSLei YU#!/bin/sh 273e94a168cSLei YU## Use connect-proxy as git proxy wrapper which supports SOCKS5 274e94a168cSLei YU## Install with `apt-get install connect-proxy` 275e94a168cSLei YU## Use with `export GIT_PROXY_COMMAND=~/bin/git-proxy-wrapper` 276e94a168cSLei YU/usr/bin/connect -S localhost:9054 "$@" 277e94a168cSLei YU``` 278*f4febd00SPatrick Williams 279e94a168cSLei YUThen you can run `export GIT_PROXY_COMMAND=~/bin/git-proxy-wrapper` and you are 280e94a168cSLei YUnow downloading git code through your proxy. 281e94a168cSLei YU 282e94a168cSLei YU## devtool 283e94a168cSLei YU 284e94a168cSLei YU`devtool` is a convenient utility in Yocto to make changes in the local 285*f4febd00SPatrick Williamsdirectory. Typical usage is: 286*f4febd00SPatrick Williams 287e94a168cSLei YU``` 288e94a168cSLei YU# To create a local copy of recipe's code and build with it: 289e94a168cSLei YUdevtool modify <recipe> 290e94a168cSLei YUcd build/workspace/sources/<recipe> # And make changes 291e94a168cSLei YUbitbake obmc-phosphor-image # Build with local changes 292e94a168cSLei YU 293e94a168cSLei YU# After you have finished, reset the recipe to ignore local changes: 294e94a168cSLei YUdevtool reset <recipe> 295e94a168cSLei YU``` 296e94a168cSLei YU 297e94a168cSLei YUTo use this tool, you need the build environment, e.g. `. oe-init-build-env`. 298*f4febd00SPatrick WilliamsThe above script will add `<WORKDIR>/scripts/` to your `PATH` env and `devtool` 299*f4febd00SPatrick Williamsis in the path. 300e94a168cSLei YU 301e94a168cSLei YUBelow are real examples. 302e94a168cSLei YU 303e94a168cSLei YU### devtool on ipmi 304e94a168cSLei YU 305*f4febd00SPatrick WilliamsIf you want to debug or add a new function in ipmi, you probably need to change 306*f4febd00SPatrick Williamsthe code in [phosphor-host-ipmid][1]. Checking the recipes, you know this repo 307*f4febd00SPatrick Williamsis in [phosphor-ipmi-host.bb][2]. Below are the steps to use devtool to modify 308*f4febd00SPatrick Williamsthe code locally, build and test it. 309*f4febd00SPatrick Williams 310e94a168cSLei YU1. Use devtool to create a local repo: 311e94a168cSLei YU ``` 312e94a168cSLei YU devtool modify phosphor-ipmi-host 313e94a168cSLei YU ``` 314e94a168cSLei YU devtool clones the repo into `build/workspace/sources/phosphor-ipmi-host`, 315e94a168cSLei YU creates and checkout branch `devtool`. 316e94a168cSLei YU2. Make changes in the repo, e.g. adding code to handle new ipmi commands or 317e94a168cSLei YU simply adding trace logs. 318e94a168cSLei YU3. Now you can build the whole image or the ipmi recipe itself: 319e94a168cSLei YU ``` 320e94a168cSLei YU bitbake obmc-phosphor-image # Build the whole image 321e94a168cSLei YU bitbake phosphor-ipmi-host # Build the recipe 322e94a168cSLei YU ``` 323e94a168cSLei YU4. To test your change, either flash the whole image or replace the changed 324*f4febd00SPatrick Williams binary. Note that the changed code is built into `libapphandler.so` and it is 325*f4febd00SPatrick Williams used by both host and net ipmi daemon. It is recommended that you copy the 326*f4febd00SPatrick Williams changed binary to BMC because it is easier to test: 327e94a168cSLei YU ``` 328e94a168cSLei YU # Replace libapphandler.so.0.0.0 329e94a168cSLei YU scp build/workspace/sources/phosphor-ipmi-host/oe-workdir/package/usr/lib/ipmid-providers/libapphandler.so.0.0.0 root@bmc:/usr/lib/ipmid-providers/ 330e94a168cSLei YU systemctl restart phosphor-ipmi-host.service # Restart the inband ipmi daemon 331e94a168cSLei YU # Or restart phosphor-ipmi-net.service if you want to test net ipmi. 332e94a168cSLei YU ``` 333e94a168cSLei YU5. Now you can test your changes. 334e94a168cSLei YU 335e94a168cSLei YU## Develop linux kernel 336e94a168cSLei YU 337e94a168cSLei YU### devtool on linux kernel 338*f4febd00SPatrick Williams 339e94a168cSLei YUIf you want to work on linux kernel, you can use devtool as well, with some 340e94a168cSLei YUdifferences from regular repos. 341e94a168cSLei YU 342e94a168cSLei YU**Note**: As of [ac72846][3] the linux kernel recipe name is changed to 343*f4febd00SPatrick Williams`linux-aspeed` for Aspeed based OpenBMC builds. In the following examples, 344*f4febd00SPatrick Williamsreplace `linux-obmc` with `linux-aspeed` if you are on a revision later than 345*f4febd00SPatrick Williams[ac72846][3]. 346e94a168cSLei YU 347*f4febd00SPatrick Williams1. devtool does not create the 'devtool' branch. Instead, it checkout the branch 348*f4febd00SPatrick Williams specified in the recipe. For example, on the OpenBMC v2.2 tag, 349*f4febd00SPatrick Williams `linux-obmc_4.13.bb` specifies `dev-4.13` branch. 350e94a168cSLei YU2. If there are patches, `devtool` applies them directly on the branch. 351e94a168cSLei YU3. devtool copies the defconfig and machine-specific config into `oe-workdir`. 352e94a168cSLei YU4. devtool generates the `.config` file based on the above configs. 353e94a168cSLei YU 354e94a168cSLei YUYou can modify the code and build the kernel as usual as follows: 355*f4febd00SPatrick Williams 356e94a168cSLei YU``` 357e94a168cSLei YUbitbake linux-obmc -c build 358e94a168cSLei YU``` 359e94a168cSLei YU 360e94a168cSLei YU### Modify config 361*f4febd00SPatrick Williams 362e94a168cSLei YUIf you need to change the config and save it as defconfig for further use: 363*f4febd00SPatrick Williams 364e94a168cSLei YU``` 365e94a168cSLei YUbitbake linux-obmc -c menuconfig 366e94a168cSLei YU# Edit the configs and after save it generates 367e94a168cSLei YU# .config.new as the new kernel config 368e94a168cSLei YU 369e94a168cSLei YUbitbake linux-obmc -c savedefconfig 370e94a168cSLei YU# It will save the new defconfig at oe-workdir/linux-obmc-<version>/defconfig 371e94a168cSLei YU``` 372e94a168cSLei YU 373e94a168cSLei YU### Test linux kernel 374*f4febd00SPatrick Williams 375*f4febd00SPatrick WilliamsAfter build, you can flash the image to test the new kernel. However, it is 376*f4febd00SPatrick Williamsalways slow to flash an image to the chip. 377e94a168cSLei YU 378e94a168cSLei YUThere is a faster way to load the kernel via network so you can easily test 379e94a168cSLei YUkernel builds. 380e94a168cSLei YU 381e94a168cSLei YUOpenBMC kernel build generates `fit` image, including `kernel`, `dtb` and 382*f4febd00SPatrick Williams`initramfs`. Typically we can load it via tftp, taking Romulus as an example: 383*f4febd00SPatrick Williams 384*f4febd00SPatrick Williams1. Put 385*f4febd00SPatrick Williams `build/tmp/deploy/images/romulus/fitImage-obmc-phosphor-initramfs-romulus.bin` 386e94a168cSLei YU to a tftp server, name it to `fitImage` 387e94a168cSLei YU2. Reboot BMC and press keys to enter uboot shell; 388e94a168cSLei YU3. In uboot: 389e94a168cSLei YU ``` 390e94a168cSLei YU setenv ethaddr <mac:addr> # Set mac address if there it is unavailable 391e94a168cSLei YU setenv ipaddr 192.168.0.80 # Set BMC IP 392e94a168cSLei YU setenv serverip 192.168.0.11 # Set tftp server IP 393e94a168cSLei YU tftp 0x83000000 fitImage # Load fit image to ram. Use 0x43000000 on AST2400 394e94a168cSLei YU bootm 0x83000000 # Boot from fit image 395e94a168cSLei YU ``` 396e94a168cSLei YU Then you are running an OpenBMC with your updated kernel. 397e94a168cSLei YU 398e94a168cSLei YU[1]: https://github.com/openbmc/phosphor-host-ipmid 399*f4febd00SPatrick Williams[2]: 400*f4febd00SPatrick Williams https://github.com/openbmc/openbmc/blob/c53f375a0f92f847d2aa50e19de54840e8472c8e/meta-phosphor/recipes-phosphor/ipmi/phosphor-ipmi-host_git.bb 401*f4febd00SPatrick Williams[3]: 402*f4febd00SPatrick Williams https://github.com/openbmc/openbmc/commit/ac7284629ea572cf27d69949dc4014b3b226f14f 403