cpu/x86/smm: Use common SMM_ASEG region
[coreboot.git] / Documentation / index.md
blob0cb462cbc255266def5858358424916302aad1a5
1 # Welcome to the coreboot documentation
3 This is the developer documentation for [coreboot](https://coreboot.org).
4 It is built from Markdown files in the
5 [Documentation](https://review.coreboot.org/cgit/coreboot.git/tree/Documentation)
6 directory in the source code.
8 ## Spelling of coreboot
10 The correct spelling of coreboot is completely in lower case characters and in
11 one word without a space between the two parts.
13 ## Purpose of coreboot
15 coreboot is a project to develop open source boot firmware for various
16 architectures. Its design philosophy is to do the bare minimum necessary to
17 ensure that hardware is usable and then pass control to a different program
18 called the _payload_.
20 ### Separation of concerns
22 The payload can then provide user interfaces, file system drivers,
23 various policies etc. to load the OS. Through this separation of concerns
24 coreboot maximizes reusability of the complicated and fundamental hardware
25 initialization routines across many different use cases, no matter if
26 they provide standard interfaces or entirely custom boot flows.
28 Popular [payloads](payloads.md) in use with coreboot are SeaBIOS,
29 which provides PCBIOS services, edk2, which provides UEFI services,
30 GRUB2, the bootloader used by many Linux distributions, or depthcharge,
31 a custom boot loader used on Chromebooks.
33 ### No resident services (if possible)
35 Ideally coreboot completely hands over control to the payload with no
36 piece of coreboot remaining resident in the system, or even available
37 for callback.  Given the reality of contemporary computer design,
38 there's often a small piece that survives for the whole runtime of
39 the computer. It runs in a highly privileged CPU mode (e.g. SMM on x86)
40 and provides some limited amount of services to the OS. But here, too,
41 coreboot aims to keep everything at the minimum possible, both in scope
42 (e.g. services provided) and code size.
44 ### No specification of its own
46 coreboot uses a very minimal interface to the payload, and otherwise
47 doesn't impose any standards on the ecosystem. This is made possible by
48 separating out concerns (interfaces and resident services are delegated
49 to the payload), but it's also a value that is deeply ingrained in the
50 project. We fearlessly rip out parts of the architecture and remodel it
51 when a better way of doing the same was identified.
53 That said, since there are attempts to coerce coreboot to move in various
54 directions by outside "standardization", long-established practices of
55 coreboot as well as aligned projects can be documented as best practices,
56 making them standards in their own right. However we reserve the right to
57 retire them as the landscape shifts around us.
59 ### One tree for everything
61 Another difference to various other firmware projects is that we try
62 to avoid fragmentation: the traditional development model of firmware
63 is one of "set and forget" in which some code base is copied, adapted
64 for the purpose at hands, shipped and only touched again if there's an
65 important fix to do.
67 All newer development happens on another copy of some code base without
68 flowing back to any older copy, and so normally there's a huge amount
69 of fragmentation.
71 In coreboot, we try to keep everything in a single source tree, and
72 lift up older devices when we change something fundamentally. That way,
73 new and old devices benefit alike from new development in the common parts.
75 There's a downside to that: Some devices might have no maintainer anymore
76 who could ensure that coreboot is still functional for them after a big
77 rework, or maybe a rework even requires knowledge that doesn't exist
78 anymore within the project (for example because the developer moved on
79 to do something else).
81 In this case, we announce the deprecation of the device and defer the big
82 rework until the deprecation period passed, typically 6-12 months. This
83 gives interested developers a chance to step in and bring devices up to
84 latest standards.
86 While without this deprecation mechanism we could inflate the number
87 of supported devices (probably 300+), only a tiny fraction of them
88 would even work, which helps nobody.
90 ## Scope of the coreboot project
92 coreboot as a project is closer to the Linux kernel than to most
93 user level programs. One place where this becomes apparent is the
94 distribution mechanism: The project itself only provides source code
95 and does not ship ready-to-install coreboot-based firmware binaries.
97 What the project distributes, even if - strictly speaking - it's not
98 part of the project, is a collection of vendor binaries (that we call
99 "blobs") that are redistributable. They cover the parts of hardware init
100 that we haven't managed to open up, and while some hardware requires them,
101 there's still hardware that can boot without any such binary components.
103 The build system can integrate them into the build automatically if
104 required, but that requires explicit opt-in and downloads a separate
105 repository to ensure that the distinction remains clear.
107 There are various [distributions](distributions.md), some shipping
108 coreboot with their hardware (e.g. Purism or Chromebooks), others
109 providing after-market images for various devices (e.g. Libreboot,
110 MrChromebox).
112 If you want to use coreboot on your system, that's great!
114 Please note that the infrastructure around coreboot.org is built for
115 development purposes. We gladly help out users through our communication
116 channels, but we also expect a "firmware developer mindset": If compiling
117 your own firmware and, at some point, recovering from a bad flash by
118 hooking wires onto chips in your computer sounds scary to you, you're
119 right, as it is.
121 If that's _way_ beyond your comfort zone, consider looking into the
122 various distributions, as they typically provide pre-tested binaries
123 which massively reduces the risk that the binary you write to flash is
124 one that won't boot the system (with the consequence that to get it to work
125 again, you'll need to attach various tools to various chips)
127 ## The coreboot community
129 If you're interested in getting your hands dirty (incl. potentially wiring
130 up an external flasher to your computer), you've come to the right place!
132 We have various [forums](community/forums.md) where we discuss and coordinate
133 our activities, review patches, and help out each other. To
134 help promote a positive atmosphere, we established a [Code of
135 Conduct](community/code_of_conduct.md). We invested a lot of time
136 to balance it out, so please keep it in mind when engaging with the
137 coreboot community.
139 Every now and then, coreboot is present in one way or another at
140 [conferences](community/conferences.md). If you're around, come and
141 say hello!
143 ## Getting the source code
145 coreboot is primarily developed in the
146 [git](https://review.coreboot.org/cgit/coreboot.git) version control
147 system, using [Gerrit](https://review.coreboot.org) to manage
148 contributions and code review.
150 In general we try to keep the `master` branch in the repository functional
151 for all hardware we support. So far, the only guarantee we can make is
152 that the master branch will (nearly) always build for all boards in a
153 standard configuration.
155 However, we're continually working on improvements to our infrastructure to
156 get better in that respect, e.g. by setting up boot testing facilities. This
157 is obviously more complex than regular integration testing, so progress
158 is slow.
160 ### What our releases mean
162 We also schedule two source code releases every year, around April and
163 October. These releases see some very limited testing and mostly serve
164 as synchronization points for deprecation notices and for other projects
165 such as external distributions.
167 This approach and terminology differs somewhat from how other projects handle
168 releases where releases are well-tested artifacts and the development
169 repository tends to be unstable. The "rolling release" model of some projects,
170 for example OpenBSD, is probably the closest cousin of our approach.
172 Contents:
174 * [Getting Started](getting_started/index.md)
175 * [Tutorial](tutorial/index.md)
176 * [Contributing](contributing/index.md)
177 * [Community](community/index.md)
178 * [Payloads](payloads.md)
179 * [Distributions](distributions.md)
180 * [Technotes](technotes/index.md)
181 * [ACPI](acpi/index.md)
182 * [Native Graphics Initialization with libgfxinit](gfx/libgfxinit.md)
183 * [Display panel](gfx/display-panel.md)
184 * [CPU Architecture](arch/index.md)
185 * [Platform independent drivers](drivers/index.md)
186 * [Northbridge](northbridge/index.md)
187 * [System on Chip](soc/index.md)
188 * [Mainboard](mainboard/index.md)
189 * [Payloads](lib/payloads/index.md)
190 * [Libraries](lib/index.md)
191 * [Options](lib/option.md)
192 * [Security](security/index.md)
193 * [SuperIO](superio/index.md)
194 * [Vendorcode](vendorcode/index.md)
195 * [Utilities](util.md)
196 * [Project infrastructure & services](infrastructure/index.md)
197 * [Boards supported in each release directory](releases/boards_supported_on_branches.md)
198 * [Release notes](releases/index.md)
199 * [Acronyms & Definitions](acronyms.md)
200 * [Documentation License](documentation_license.md)