xref: /openbmc/openbmc/README.md (revision 73bd93f1)
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- Benjamin Fair, Google
205- Patrick Williams, Meta
206- Roxanne Clarke, IBM
207- Sagar Dharia, Microsoft
208- Samer El-Haj-Mahmoud, Arm
209- Terry Duncan, Intel
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