1# OpenBMC 2 3[![Build Status](https://jenkins.openbmc.org/buildStatus/icon?job=latest-master)](https://jenkins.openbmc.org/job/latest-master/) 4 5OpenBMC is a Linux distribution for management controllers used in devices such 6as servers, top of rack switches or RAID appliances. It uses 7[Yocto](https://www.yoctoproject.org/), 8[OpenEmbedded](https://www.openembedded.org/wiki/Main_Page), 9[systemd](https://www.freedesktop.org/wiki/Software/systemd/), and 10[D-Bus](https://www.freedesktop.org/wiki/Software/dbus/) to allow easy 11customization for your platform. 12 13## Setting up your OpenBMC project 14 15### 1) Prerequisite 16 17See the 18[Yocto documentation](https://docs.yoctoproject.org/ref-manual/system-requirements.html#required-packages-for-the-build-host) 19for the latest requirements 20 21#### Ubuntu 22 23```sh 24sudo apt install git python3-distutils gcc g++ make file wget \ 25 gawk diffstat bzip2 cpio chrpath zstd lz4 bzip2 26``` 27 28#### Fedora 29 30```sh 31sudo dnf install git python3 gcc g++ gawk which bzip2 chrpath cpio \ 32 hostname file diffutils diffstat lz4 wget zstd rpcgen patch 33``` 34 35### 2) Download the source 36 37```sh 38git clone https://github.com/openbmc/openbmc 39cd openbmc 40``` 41 42### 3) Target your hardware 43 44Any build requires an environment set up according to your hardware target. 45There is a special script in the root of this repository that can be used to 46configure the environment as needed. The script is called `setup` and takes the 47name of your hardware target as an argument. 48 49The script needs to be sourced while in the top directory of the OpenBMC 50repository clone, and, if run without arguments, will display the list of 51supported hardware targets, see the following example: 52 53```text 54$ . setup <machine> [build_dir] 55Target machine must be specified. Use one of: 56 57bletchley mori s8036 58dl360poc mtjade swift 59e3c246d4i mtmitchell tatlin-archive-x86 60ethanolx nicole tiogapass 61evb-ast2500 olympus-nuvoton transformers 62evb-ast2600 on5263m5 vegman-n110 63evb-npcm750 p10bmc vegman-rx20 64f0b palmetto vegman-sx20 65fp5280g2 qcom-dc-scm-v1 witherspoon 66g220a quanta-q71l witherspoon-tacoma 67gbs romed8hm3 x11spi 68greatlakes romulus yosemitev2 69gsj s2600wf zaius 70kudo s6q 71lannister s7106 72``` 73 74Once you know the target (e.g. romulus), source the `setup` script as follows: 75 76```sh 77. setup romulus 78``` 79 80### 4) Build 81 82```sh 83bitbake obmc-phosphor-image 84``` 85 86Additional details can be found in the [docs](https://github.com/openbmc/docs) 87repository. 88 89## OpenBMC Development 90 91The OpenBMC community maintains a set of tutorials new users can go through to 92get up to speed on OpenBMC development out 93[here](https://github.com/openbmc/docs/blob/master/development/README.md) 94 95## Build Validation and Testing 96 97Commits submitted by members of the OpenBMC GitHub community are compiled and 98tested via our [Jenkins](https://jenkins.openbmc.org/) server. Commits are run 99through two levels of testing. At the repository level the makefile `make check` 100directive is run. At the system level, the commit is built into a firmware image 101and run with an arm-softmmu QEMU model against a barrage of 102[CI tests](https://jenkins.openbmc.org/job/CI-MISC/job/run-ci-in-qemu/). 103 104Commits submitted by non-members do not automatically proceed through CI 105testing. After visual inspection of the commit, a CI run can be manually 106performed by the reviewer. 107 108Automated testing against the QEMU model along with supported systems are 109performed. The OpenBMC project uses the 110[Robot Framework](http://robotframework.org/) for all automation. Our complete 111test repository can be found 112[here](https://github.com/openbmc/openbmc-test-automation). 113 114## Submitting Patches 115 116Support of additional hardware and software packages is always welcome. Please 117follow the 118[contributing guidelines](https://github.com/openbmc/docs/blob/master/CONTRIBUTING.md) 119when making a submission. It is expected that contributions contain test cases. 120 121## Bug Reporting 122 123[Issues](https://github.com/openbmc/openbmc/issues) are managed on GitHub. It is 124recommended you search through the issues before opening a new one. 125 126## Questions 127 128First, please do a search on the internet. There's a good chance your question 129has already been asked. 130 131For general questions, please use the openbmc tag on 132[Stack Overflow](https://stackoverflow.com/questions/tagged/openbmc). Please 133review the 134[discussion](https://meta.stackexchange.com/questions/272956/a-new-code-license-the-mit-this-time-with-attribution-required?cb=1) 135on Stack Overflow licensing before posting any code. 136 137For technical discussions, please see [contact info](#contact) below for Discord 138and mailing list information. Please don't file an issue to ask a question. 139You'll get faster results by using the mailing list or Discord. 140 141### Will OpenBMC run on my Acme Server Corp. XYZ5000 motherboard? 142 143This is a common question, particularly regarding boards from popular COTS 144(commercial off-the-shelf) vendors such as Supermicro and ASRock. You can see 145the list of supported boards by running `. setup` (with no further arguments) in 146the root of the OpenBMC source tree. Most of the platforms supported by OpenBMC 147are specialized servers operated by companies running large datacenters, but 148some more generic COTS servers are supported to varying degrees. 149 150If your motherboard is not listed in the output of `. setup` it is not currently 151supported. Porting OpenBMC to a new platform is a non-trivial undertaking, 152ideally done with the assistance of schematics and other documentation from the 153manufacturer (it is not completely infeasible to take on a porting effort 154without documentation via reverse engineering, but it is considerably more 155difficult, and probably involves a greater risk of hardware damage). 156 157**However**, even if your motherboard is among those listed in the output of 158`. setup`, there are two significant caveats to bear in mind. First, not all 159ports are equally mature -- some platforms are better supported than others, and 160functionality on some "supported" boards may be fairly limited. Second, support 161for a motherboard is not the same as support for a complete system -- in 162particular, fan control is critically dependent on not just the motherboard but 163also the fans connected to it and the chassis that the board and fans are housed 164in, both of which can vary dramatically between systems using the same board 165model. So while you may be able to compile and install an OpenBMC build on your 166system and get some basic functionality, rough edges (such as your cooling fans 167running continuously at full throttle) are likely. 168 169## Features of OpenBMC 170 171### Feature List 172 173- Host management: Power, Cooling, LEDs, Inventory, Events, Watchdog 174- Full IPMI 2.0 Compliance with DCMI 175- Code Update Support for multiple BMC/BIOS images 176- Web-based user interface 177- REST interfaces 178- D-Bus based interfaces 179- SSH based SOL 180- Remote KVM 181- Hardware Simulation 182- Automated Testing 183- User management 184- Virtual media 185 186### Features In Progress 187 188- OpenCompute Redfish Compliance 189- Verified Boot 190 191### Features Requested but need help 192 193- OpenBMC performance monitoring 194 195## Finding out more 196 197Dive deeper into OpenBMC by opening the [docs](https://github.com/openbmc/docs) 198repository. 199 200## Technical Steering Committee 201 202The Technical Steering Committee (TSC) guides the project. Members are: 203 204- Roxanne Clarke, IBM 205- Nancy Yuen, Google 206- Patrick Williams, Meta 207- Terry Duncan, Intel 208- Sagar Dharia, Microsoft 209- Samer El-Haj-Mahmoud, Arm 210 211## Contact 212 213- Mail: openbmc@lists.ozlabs.org 214 [https://lists.ozlabs.org/listinfo/openbmc](https://lists.ozlabs.org/listinfo/openbmc) 215- Discord: [https://discord.gg/69Km47zH98](https://discord.gg/69Km47zH98) 216