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... 57``` 58 59A more complete list of supported machines can be found under 60[meta-phosphor/docs](https://github.com/openbmc/openbmc/blob/master/meta-phosphor/docs/supported-machines.md). 61 62Once you know the target (e.g. romulus), source the `setup` script as follows: 63 64```sh 65. setup romulus 66``` 67 68### 4) Build 69 70```sh 71bitbake obmc-phosphor-image 72``` 73 74Additional details can be found in the [docs](https://github.com/openbmc/docs) 75repository. 76 77## OpenBMC Development 78 79The OpenBMC community maintains a set of tutorials new users can go through to 80get up to speed on OpenBMC development out 81[here](https://github.com/openbmc/docs/blob/master/development/README.md) 82 83## Build Validation and Testing 84 85Commits submitted by members of the OpenBMC GitHub community are compiled and 86tested via our [Jenkins](https://jenkins.openbmc.org/) server. Commits are run 87through two levels of testing. At the repository level the makefile `make check` 88directive is run. At the system level, the commit is built into a firmware image 89and run with an arm-softmmu QEMU model against a barrage of 90[CI tests](https://jenkins.openbmc.org/job/CI-MISC/job/run-ci-in-qemu/). 91 92Commits submitted by non-members do not automatically proceed through CI 93testing. After visual inspection of the commit, a CI run can be manually 94performed by the reviewer. 95 96Automated testing against the QEMU model along with supported systems are 97performed. The OpenBMC project uses the 98[Robot Framework](http://robotframework.org/) for all automation. Our complete 99test repository can be found 100[here](https://github.com/openbmc/openbmc-test-automation). 101 102## Submitting Patches 103 104Support of additional hardware and software packages is always welcome. Please 105follow the 106[contributing guidelines](https://github.com/openbmc/docs/blob/master/CONTRIBUTING.md) 107when making a submission. It is expected that contributions contain test cases. 108 109## Bug Reporting 110 111[Issues](https://github.com/openbmc/openbmc/issues) are managed on GitHub. It is 112recommended you search through the issues before opening a new one. 113 114## Questions 115 116First, please do a search on the internet. There's a good chance your question 117has already been asked. 118 119For general questions, please use the openbmc tag on 120[Stack Overflow](https://stackoverflow.com/questions/tagged/openbmc). Please 121review the 122[discussion](https://meta.stackexchange.com/questions/272956/a-new-code-license-the-mit-this-time-with-attribution-required?cb=1) 123on Stack Overflow licensing before posting any code. 124 125For technical discussions, please see [contact info](#contact) below for Discord 126and mailing list information. Please don't file an issue to ask a question. 127You'll get faster results by using the mailing list or Discord. 128 129### Will OpenBMC run on my Acme Server Corp. XYZ5000 motherboard? 130 131This is a common question, particularly regarding boards from popular COTS 132(commercial off-the-shelf) vendors such as Supermicro and ASRock. You can see 133the list of supported boards by running `. setup` (with no further arguments) in 134the root of the OpenBMC source tree. Most of the platforms supported by OpenBMC 135are specialized servers operated by companies running large datacenters, but 136some more generic COTS servers are supported to varying degrees. 137 138If your motherboard is not listed in the output of `. setup` it is not currently 139supported. Porting OpenBMC to a new platform is a non-trivial undertaking, 140ideally done with the assistance of schematics and other documentation from the 141manufacturer (it is not completely infeasible to take on a porting effort 142without documentation via reverse engineering, but it is considerably more 143difficult, and probably involves a greater risk of hardware damage). 144 145**However**, even if your motherboard is among those listed in the output of 146`. setup`, there are two significant caveats to bear in mind. First, not all 147ports are equally mature -- some platforms are better supported than others, and 148functionality on some "supported" boards may be fairly limited. Second, support 149for a motherboard is not the same as support for a complete system -- in 150particular, fan control is critically dependent on not just the motherboard but 151also the fans connected to it and the chassis that the board and fans are housed 152in, both of which can vary dramatically between systems using the same board 153model. So while you may be able to compile and install an OpenBMC build on your 154system and get some basic functionality, rough edges (such as your cooling fans 155running continuously at full throttle) are likely. 156 157See also 158["Supported Machines"](https://github.com/openbmc/openbmc/blob/master/meta-phosphor/docs/supported-machines.md). 159 160## Features of OpenBMC 161 162### Feature List 163 164- Host management: Power, Cooling, LEDs, Inventory, Events, Watchdog 165- Full IPMI 2.0 Compliance with DCMI 166- Code Update Support for multiple BMC/BIOS images 167- Web-based user interface 168- REST interfaces 169- D-Bus based interfaces 170- SSH based SOL 171- Remote KVM 172- Hardware Simulation 173- Automated Testing 174- User management 175- Virtual media 176 177### Features In Progress 178 179- OpenCompute Redfish Compliance 180- Verified Boot 181 182### Features Requested but need help 183 184- OpenBMC performance monitoring 185 186## Finding out more 187 188Dive deeper into OpenBMC by opening the [docs](https://github.com/openbmc/docs) 189repository. 190 191## Technical Steering Committee 192 193The Technical Steering Committee (TSC) guides the project. Members are: 194 195- Benjamin Fair, Google 196- Patrick Williams, Meta 197- Roxanne Clarke, IBM 198- Sagar Dharia, Microsoft 199- Samer El-Haj-Mahmoud, Arm 200- Terry Duncan, Intel 201 202## Contact 203 204- Mail: openbmc@lists.ozlabs.org 205 [https://lists.ozlabs.org/listinfo/openbmc](https://lists.ozlabs.org/listinfo/openbmc) 206- Discord: [https://discord.gg/69Km47zH98](https://discord.gg/69Km47zH98) 207