xref: /openbmc/docs/cheatsheet.md (revision f4febd002df578bad816239b70950f84ea4567e8)
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