1# coreboot FAQ 2 3## General coreboot questions 4 5 6### What is coreboot? 7 8coreboot is a free and open software project designed to initialize 9computers and embedded systems in a fast, secure, and auditable fashion. 10The focus is on minimal hardware initialization: to do only what is 11absolutely needed, then pass control to other software (a payload, in 12coreboot parlance) in order to boot the operating system securely. 13 14 15### What is a coreboot payload? 16 17coreboot itself does not deal with boot media such as hard-drives, 18SSDs, or USB flash-drives, beyond initializing the underlying hardware. 19So in order to actually boot an operating system, another piece of 20software which does do those things must be used. coreboot supports 21a large number of diverse payloads; see below for more details. 22 23 24### Is coreboot the same as UEFI? 25 26No. coreboot and UEFI are both system firmware that handle the 27initialization of the hardware, but are otherwise not similar. 28coreboot’s goal is to **just** initialize the hardware and exit. 29This makes coreboot smaller and simpler, leading to faster boot times, 30and making it easier to find and fix bugs. The result is a higher 31overall security. 32 33 34### What's the difference between coreboot and UEFI? 35 36UEFI is actually a firmware specification, not a specific software 37implementation. Intel, along with the rest of the Tianocore project, 38has released an open-source implementation of the overall framework, 39EDK2, but it does not come with hardware support. Most hardware running 40UEFI uses a proprietary implementation built on top of EDK2. 41 42coreboot does not implement the UEFI specification, but it can be used to 43initialize the system, then launch a UEFI payload such as EDK2 in order 44to provide UEFI boot services. 45 46The UEFI specification also defines and allows for many things that are 47outside of coreboot’s scope, including (but not limited to): 48 49* Boot device selection 50* Updating the firmware 51* A CLI shell 52* Network communication 53* An integrated setup menu 54 55 56### Can coreboot boot operating systems that require UEFI? 57 58Yes, but... again, coreboot **just** initializes the hardware. coreboot 59itself doesn’t load operating systems from storage media other than the 60flash chip. Unlike UEFI, coreboot does not, and will not contain a Wi-Fi 61driver or communicate directly with any sort of network. That sort of 62functionality is not related to hardware initialization. 63 64To boot operating systems that require UEFI, coreboot can be compiled with 65EDK2 as the payload. This allows coreboot to perform the hardware init, 66with EDK2 supplying the UEFI boot interface and runtime services to 67the operating system. 68 69 70### What non-UEFI payloads does coreboot support? 71 72* SeaBIOS, behaves like a classic BIOS, allowing you to boot operating 73 systems that rely on the legacy interrupts. 74 75* GRUB can be used as a coreboot payload, and is currently the most 76 common approach to full disk encryption (FDE). 77 78* A Linux kernel and initramfs stored alongside coreboot in the boot 79 ROM can also be used as a payload. In this scenario coreboot 80 initializes hardware, loads Linux from boot ROM into RAM, and 81 executes it. The embedded Linux environment can look for a target OS 82 kernel to load from local storage or over a network and execute it 83 using kexec. This is sometimes called LinuxBoot. 84 85* U-boot, depthcharge, FILO, etc. 86 87There’s [https://doc.coreboot.org/payloads.html](https://doc.coreboot.org/payloads. 88html) with a list, although it’s not complete. 89 90 91### What does coreboot leave in memory after it's done initializing the hardware? 92 93While coreboot tries to remove itself completely from memory after 94finishing, some tables and data need to remain for the OS. coreboot 95reserves an area in memory known as CBMEM, to save this data after it 96has finished booting. This contains things such as the boot log, tables 97that get passed to the payload, SMBIOS, and ACPI tables for the OS. 98 99In addition to CBMEM, on X86 systems, coreboot will typically set up 100SMM, which will remain resident after coreboot exits. 101 102 103## Platforms 104 105### What’s the best coreboot platform for a user? 106 107The choice of the best coreboot platform for a user can vary depending 108on their specific needs, preferences, and use cases. 109 110Typically, people who want a system with a minimum of proprietary 111firmware are restricted to older systems like the Lenovo X220, or more 112expensive, non-x86 solutions like TALOS, from Raptor Engineering. 113 114There are a number of companies selling modern systems, but those all 115require more proprietary binaries in addition to coreboot (e.g., Intel 116FSP). However, unlike the older ThinkPads, many of these newer devices 117use open-source embedded controller (EC) firmware, so there are 118tradeoffs with either option. 119 120The coreboot project mantains a list of companies selling machines 121which use coreboot on the [website](https://coreboot.org/users.html). 122 123 124### What’s the best platform for coreboot development? 125 126Similar to the best platform for users, the best platform for 127developers very much depends on what a developer is trying to do. 128 129* QEMU is generally the easiest platform for coreboot development, just 130 because it’s easy to run anywhere. However, it’s possible for things 131 to work properly in QEMU but fail miserably on actual hardware. 132 133While laptops tend to be harder to develop than desktop platforms, a 134majority of newer platforms on coreboot tend to be laptops. The 135development difficulty is due to a few different factors: 136 1371. The EC (Embedded Controller) is a specialized microcontroller that 138 typically handles keyboard and sometimes mouse input for a laptop. 139 It also controls many power management functions such as fans, USB-C 140 power delivery, etc. ECs run mainboard-specific firmware, which is 141 typically undocumented. 1422. ThinkPads (X230, 30-series, 20-series, T430, T540, T520). Sandy 143 Bridge and Ivy Bridge are well-supported. Some may have 144 difficult-to-reach SPI flash chips. Boards with two flash chips (e.g. 145 30-series ThinkPads) are harder to externally reflash as one needs to 146 make sure the non-targeted flash chip remains disabled at all times. 147 The X230 is notoriously sensitive to external reflashing issues. 1483. Laptops often lack a convenient method to obtain firmware boot logs. 149 One can use EHCI debug on older systems and Chromebook-specific 150 solutions for Chromebooks, but one often has to resort to flashconsole 151 (writing coreboot logs to the flash chip where coreboot resides). On 152 the other hand, several desktop mainboards still have a RS-232 serial 153 port. 154 155Some of the easiest physical systems to use for coreboot development 156are Chromebooks. Newer Chromebooks allow for debug without opening the 157case. Look for SuzyQ Cables or SuzyQables or instructions on how to 158build one. These cables only work on a specific port in a specific 159orientation. Google [supplies 160specifications](https://chromium.googlesource.com/chromiumos/third_party/hdctools/+/master/docs/ccd.md#SuzyQ-SuzyQable) 161for these cables. 162 163 164### What platforms does coreboot support? 165 166The most accurate way to determine what systems coreboot supports is by 167browsing the src/mainboard tree or running “make menuconfig” and going 168through the “Mainboard” submenu. You can also search Gerrit to see if 169there are any unmerged ports for your board. 170 171There is also the board status page 172([https://coreboot.org/status/board-status.html](https://coreboot.org/status/board-status.html)), 173however this does not currently show supported board variants. 174 175 176## coreboot Development 177 178### Can coreboot be ported to [this board]? 179 180The best way to determine if coreboot can be ported to a system is to 181see if the processor and chipset is supported. The next step is to see 182whether the system is locked to the proprietary firmware which comes 183with the board. 184 185Intel Platforms: 186 187* coreboot only supports a few northbridges (back when northbridges 188 were on a separate package), and there's next to no support for 189 "server" platforms (multi-socket and similar things). Here's a list 190 of more recent supported Intel processors: 191 * Alder Lake (2021 - Core Gen 12) 192 * Apollo Lake (2016 - Atom) 193 * Baytrail (2014 - Atom) 194 * Braswell (2016 - Atom) 195 * Broadwell (2014 - Core Gen 5) 196 * Comet Lake (2019 - Core Gen 10) 197 * Cannon Lake (2018 - Core Gen 8/9) 198 * Denverton (2017) 199 * Elkhart lake (2021 - Atom) 200 * Haswell (2013 - Core Gen 4) 201 * Ivy Bridge (2012 - Core Gen 3) 202 * Jasper Lake (2021 - Atom) 203 * Kaby Lake (2016 - Core Gen 7/8) 204 * Meteor Lake (2023 - Gen 1 Ultra-mobile) 205 * Sandy Bridge (2011 - Core Gen 2) 206 * Sky Lake (2015 - Core Gen 6) 207 * Tiger Lake (2020 - Core Gen 11) 208 * Whiskey Lake (2018 - Core Gen 8) 209 210* Intel Boot Guard is a security feature which tries to prevent loading 211 unauthorized firmware by the mainboard. If supported by the platform, 212 and the platform is supported by intelmetool, you should check if Boot 213 Guard is enabled. If it is, then getting coreboot to run will be 214 difficult or impossible even if it is ported. You can run 215 `intelmetool -b` on supported platforms to see if Boot Guard is 216 enabled (although it can fail because it wants to probe the ME 217 beforehand). 218 219AMD Ryzen-based platforms: 220 221* The AMD platforms Ryzen-based platforms unfortunately are currently 222 not well supported outside of the Chromebooks (and AMD reference 223 boards) currently in the tree. 224 The responsible teams are trying to fix this, but currently it's 225 **very** difficult to do a new port. Recent supported SoCs: 226 * Stoney Ridge 227 * Picasso 228 * Cezanne 229 * Mendocino 230 * Phoenix 231 232General notes: 233 234* Check the output of `lspci` to determine what processor/chipset 235 family your system has. Processor/chipset support is the most 236 important to determine if a board can be ported. 237* Check the output of `superiotool` to see if it detects the Super I/O 238 on the system. You can also check board schematics and/or boardviews 239 if you can find them, or physically look at the mainboard for a chip 240 from one of the common superio vendors. 241* Check what EC your system has (mostly applicable to laptops, but some 242 desktops have EC-like chips). You will likely need to refer to the 243 actual board or schematics/boardviews for this. Physical observation 244 is the most accurate identification procedure; software detection can 245 then be used to double-check if the chip is correct, but one should 246 not rely on software detection alone to identify an EC. 247 248 249### How do I port coreboot to [this board]? 250 251A critical piece for anyone attempting to do a board port is to make 252sure that you have a method to recover your system from a failed flash. 253 254We need an updated motherboard porting guide, but currently the guide 255on the [wiki](https://www.coreboot.org/Motherboard_Porting_Guide) looks 256to be the best reference. 257 258At the moment, the best answer to this question is to ask for help on 259one of the [various community 260forums](https://doc.coreboot.org/community/forums.html). 261 262 263### What about the Intel ME? 264 265There seems to be a lot of FUD about what the ME can and can’t do. 266coreboot currently does not have a clear recommendation on how to 267handle the ME. We understand that there are serious concerns about the 268ME, and would like to flatly recommend removing as much as possible, 269however modifying the ME can cause serious stability issues. 270 271Additionally, coreboot and the Intel ME are completely separate entites 272which in many cases simply happen to occupy the same flash chip. It is 273not necessary to run coreboot to modify the ME, and running coreboot 274does not imply anything about the ME's operational state. 275 276 277#### A word of caution about the modifying ME 278 279Messing with the ME firmware can cause issues, and this is outside the 280scope of the coreboot project. 281 282If you do decide to modify the ME firmware, please make sure coreboot 283works **before** messing with it. Even if the vendor boot firmware 284works when the ME isn't operating normally, it's possible that coreboot 285doesn't handle it the same way and something breaks. If someone asks 286for help with coreboot and we think the ME state may be a factor, we'll 287ask them to try reproducing the issue with the ME running normally to 288reduce the number of variables involved. This is especially important 289when flashing coreboot for the first time, as it's best for newbies to 290start with small steps: start by flashing coreboot to the BIOS region 291and leaving the remaining regions untouched, then tinker around with 292coreboot options (e.g. other payloads, bootsplash, RAM overclock...), 293or try messing with the ME firmware **without changing coreboot**. 294 295Most people don't understand the implications of messing with the ME 296firmware, especially the use of `me_cleaner`. We admit that we don't 297know everything about the ME, but we try to understand it as much as 298possible. The ME is designed to operate correctly with the HAP (or 299AltMeDisable) bit set, and it will gracefully enter a debug state (not 300normal, but not an error). However, when using `me_cleaner` to remove 301parts of the ME firmware, the ME will often end up in an error state 302because parts of its FW are missing. It is known that removing some of 303these parts ([`EFFS` and `FCRS` on Cougar Point, 304c.f.](https://review.coreboot.org/c/coreboot/+/27798/6/src/mainboard/asus/p8h61-m_lx/Kconfig#63)) 305can cause problems. We do not know whether the state the ME ends up in 306after applying `me_cleaner` is as secure as the state the ME goes to 307when only the HAP bit is set: the removed FW modules could contain 308steps to lock down important settings for security reasons. 309 310To sum up, **we do not recommend messing with the ME firmware**. But if 311you have to, please use `ifdtool` to set the HAP bit initially before 312progressing to `me_cleaner` if necessary. 313