123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053 |
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type="text/css">
- @import url('../css/main.css');
- </style>
- <title>Building libreboot from source</title>
- </head>
- <body>
- <div class="section">
- <h1 id="pagetop">Building libreboot from source</h1>
- <p>
- This section relates to building libreboot from source, and
- working with the git repository.
- </p>
- <p>
- Or <a href="../index.html">Back to main index</a>.
- </p>
- <ul>
- <li><a href="#build_dependencies">Install build dependencies</a></li>
- <li><a href="#build_meta">Get the full source code from metadata (git clone)</a></li>
- <li><a href="#build_bucts">How to build "bucts" (for LenovoBIOS X60/X60S/X60T/T60)</a></li>
- <li><a href="#build_flashrom">How to build "flashrom"</a></li>
- <li>
- <a href="#config">Configuring libreboot</a>
- <ul>
- <li><a href="#config_dmidecode">dmidecode</a></li>
- <li>
- <a href="#configgrub">GRUB payload</a>
- <ul>
- <li><a href="#config_kfsn4-dre">ASUS KFSN4-DRE</a></li>
- <li><a href="#config_x60">ThinkPad X60, X60S and X60 Tablet</a></li>
- <li><a href="#config_t60">ThinkPad T60</a></li>
- <li><a href="#config_x200">ThinkPad X200</a></li>
- <li><a href="#config_r400">ThinkPad R400</a></li>
- <li><a href="#config_r500">ThinkPad R500</a></li>
- <li><a href="#config_t400">ThinkPad T400</a></li>
- <li><a href="#config_t500">ThinkPad T500</a></li>
- <li><a href="#config_macbook21">MacBook2,1</a></li>
- <li><a href="#config_qemu_i440fx_piix4">QEMU (x86 i440fx/piix4)</a></li>
- <li><a href="#config_qemu_q35_ich9">QEMU (x86 q35/ich9)</a></li>
- </ul>
- </li>
- </ul>
- </li>
- <li><a href="#build">How to build the ROM images</a></li>
- </ul>
- </div>
- <div class="section">
- <h1 id="build_dependencies">Install build dependencies</h1>
- <p>
- Before doing anything, you need the dependencies first. This is true if
- you want to build libreboot from source, with either libreboot_src.tar.xz or git.
- <b>If you are using libreboot_util.tar.xz (binary archive) then you can ignore this, because
- ROM images and statically compiled executables for the utilities are included.</b>
- </p>
- <div class="important">
- <p>
- For Trisquel 7, you can run the following command:<br/>
- $ <b>sudo ./build dependencies trisquel7</b>
- </p>
- <p>
- For Parabola, you can run the following command:<br/>
- $ <b>sudo ./build dependencies parabola</b><br/>
- or:<br/>
- # <b>./build dependencies parabola</b>
- </p>
- </div>
- <p>
- For other GNU/Linux distributions, you can adapt the existing scripts.
- </p>
- <p><a href="#pagetop">Back to top of page</a></p>
-
- </div>
- <div class="section">
- <h1 id="build_meta">Get the full source code from metadata (git clone)</h1>
- <p>
- If you downloaded libreboot from git, then there are some steps to download and patch
- the source code for all relevant dependencies. The archive in the git repository used to be
- available as a tarball called 'libreboot_meta.tar.gz'. It contains 'metadata' (scripts)
- which define how the source was created (where it came from).
- </p>
- <p>
- You can use the scripts included to download everything.
- </p>
- <p>
- First, <a href="#build_dependencies">install the build dependencies</a>.
- </p>
-
- <p>
- Since libreboot makes extensive use of git, you need to configure git properly. If you have not yet configured
- git, then the minimum requirement is:<br/>
- $ <b>git config --global user.name "Your Name"</b><br/>
- $ <b>git config --global user.email your@emailaddress.com</b><br/>
- This is what will also appear in git logs if you ever commit your own changes to a given repository. For
- more information, see <a href="http://git-scm.com/doc">http://git-scm.com/doc</a>.
- </p>
-
- <p>
- Another nice config for you (optional, but recommended):<br/>
- $ <b>git config --global core.editor nano</b><br/>
- $ <b>git config --global color.status auto</b><br/>
- $ <b>git config --global color.branch auto</b><br/>
- $ <b>git config --global color.interactive auto</b><br/>
- $ <b>git config --global color.diff auto</b>
- </p>
- <p>
- After that, run the script:<br/>
- $ <b>./download all</b>
- </p>
- <p>
- What this did was download everything (grub, coreboot, memtest86+, bucts, flashrom)
- at the versions last tested for this release, and patch them. Read the script
- in a text editor to learn more.
- </p>
- <p>
- To build the ROM images, see <a href="#build">#build</a>.
- </p>
- <p><a href="#pagetop">Back to top of page.</a></p>
-
- </div>
- <div class="section">
- <h1 id="build_bucts">How to build "bucts" (for LenovoBIOS X60/X60S/X60T/T60)</h1>
- <p>
- <b>This is for Lenovo BIOS users on the ThinkPad X60/X60S, X60 Tablet and T60. If you have coreboot or libreboot running already, ignore this.</b>
- </p>
-
- <p>
- BUC.TS isn't really specific to these laptops, but is a bit inside the a register in the chipset on some Intel systems.
- </p>
- <p>
- Bucts is needed when flashing in software the X60/X60S/X60T/T60 ROM while Lenovo BIOS is running;
- external flashing will be safe regardless.
- Each ROM contains identical data inside the two final 64K region in the file*.
- This corresponds to the final two 64K regions in the flash chip. Lenovo BIOS will prevent you from writing the
- final one, so running "<b>bucts 1</b>" will set the system to boot from the other block instead (which
- is writeable along with everything beneath it when using a patched flashrom. see <a href="#build_flashrom">#build_flashrom</a>).
- After shutting down and booting up after the first flash of libreboot,
- the final 64K block is writeable so you flash the ROM again with an unpatched flashrom and run "<b>bucts 0</b>" to
- make the system boot from the normal (highest) block again.
- </p>
- <p>
- *Libreboot ROM images have identical data in those two 64KiB regions because dd is used to do that, by the build system.
- If you're building from upstream (coreboot), you have to do it manually.
- </p>
-
- <p>
- BUC.TS is backed up (powered) by the NVRAM battery (or CMOS battery, as some people call it). On thinkpads,
- this is typically in a yellow plastic package with the battery inside, connected via power lines to the
- mainboard. Removing that battery removes power to BUC.TS, resetting the bit back to 0 (if you previously set
- it to 1).
- </p>
- <p>
- BUC.TS utility is included in libreboot_src.tar.xz and libreboot_util.tar.xz.<br/>
- <b>If you downloaded from git, follow <a href="#build_meta">#build_meta</a> before you proceed.</b>
- </p>
- <p>
- "BUC" means "<b>B</b>ack<b>u</b>p <b>C</b>ontrol" (it's a register) and "TS" means "<b>T</b>op <b>S</b>wap"
- (it's a status bit). Hence "bucts" (BUC.TS). TS 1 and TS 0 corresponds to bucts 1 and bucts 0.
- </p>
-
- <p>
- If you have the binary release archive, you'll find executables under ./bucts/. Otherwise if you need to build from source, continue reading.
- </p>
- <p>
- First, <a href="#build_dependencies">install the build dependencies</a>.
- </p>
- <p>
- To build bucts, do this in the main directory:<br/>
- $ <b>./build module bucts</b>
- </p>
-
- <p>
- To statically compile it, do this:<br/>
- $ <b>./build module bucts static</b>
- </p>
- <p>
- The "builddeps" script in libreboot_src also makes use of builddeps-bucts.
- </p>
- <p><a href="#pagetop">Back to top of page.</a></p>
-
- </div>
- <div class="section">
- <h1 id="build_flashrom">How to build "flashrom"</h1>
- <p>
- Flashrom is the utility for flashing/dumping ROM images. This is what you will use to install libreboot.
- </p>
- <p>
- Flashrom source code is included in libreboot_src.tar.xz and libreboot_util.tar.xz.<br/>
- <b>If you downloaded from git, follow <a href="#build_meta">#build_meta</a> before you proceed.</b>
- </p>
-
- <p>
- If you are using the binary release archive, then there are already binaries included
- under ./flashrom/. The flashing scripts will try to choose the correct one for you. Otherwise
- if you wish to re-build flashrom from source, continue reading.
- </p>
- <p>
- First, <a href="#build_dependencies">install the build dependencies</a>.
- </p>
- <p>
- To build it, do the following in the main directory:<br/>
- $ <b>./build module flashrom</b>
- </p>
-
- <p>
- To statically compile it, do the following in the main directory:<br/>
- $ <b>./build module flashrom static</b>
- </p>
- <p>
- After you've done that, under ./flashrom/ you will find the following executables:
- </p>
- <ul>
- <li>
- <b>flashrom</b>
- <ul>
- <li>For flashing while coreboot or libreboot is running.</li>
- </ul>
- </li>
- <li>
- <b>flashrom_lenovobios_sst</b>
- <ul>
- <li>This is patched for flashing while Lenovo BIOS is running on an X60 or T60 with the SST25VF016B (SST) flash chip.</li>
- </ul>
- </li>
- <li>
- <b>flashrom_lenovobios_macronix</b>
- <ul>
- <li>This is patched for flashing while Lenovo BIOS is running on an X60 or T60 with the MX25L1605D (Macronix) flash chip.</li>
- </ul>
- </li>
- </ul>
- <p>
- The "builddeps" script in libreboot_src also makes use of builddeps-flashrom.
- </p>
- <p><a href="#pagetop">Back to top of page.</a></p>
-
- </div>
- <div class="section">
- <h1 id="config">Configuring libreboot</h1>
- <p>
- Before building a ROM in libreboot (or coreboot, for that matter), you need to configure it.
- Configuration files should already be included, so you don't need to do anything. This information
- is only for reference. If you are updating or modifying coreboot-libre, and need to update the configs
- in any way, refer to <a href="../maintain/index.html#newboard_libreboot">../maintain/index.html#newboard_libreboot</a>.
- </p>
- <p>
- If you've already built a kernel before, you know how to use this interface.
- </p>
- <div class="subsection">
- <h2 id="config_dmidecode">
- dmidecode
- </h2>
- <p>
- There is certain information that can be useful to enter in particular:
- </p>
- <ul>
- <li>Local version string</li>
- <li>SMBIOS Serial Number</li>
- <li>SMBIOS Manufacturer</li>
- <li>SMBIOS Version</li>
- <li>SMBIOS Product name</li>
- </ul>
- <p>
- This information can be obtained using:<br/>
- <b>$ sudo dmidecode</b><br/>
- <b># dmidecode</b>
- </p>
- <p>
- Specifically, it's good practise to enter the same information for libreboot that you found when running this
- with the original BIOS or firmware. <b>libreboot has already done this for you. This information is for reference,
- in the hope that it will be useful.</b>
- </p>
- <p>
- In practise, this information is useless and you can
- just leave it on the defaults that coreboot uses (this
- is what libreboot does, on most boards).
- </p>
- </div>
- <h2 id="configgrub">GRUB payload</h2>
- <p>
- GRUB is one of the payloads that libreboot targets.
- </p>
- <p>
- Configurations are then saved as files called <b>".config"</b>. Copies of each configuration used
- for each system type by the libreboot build scripts are stored in resources/libreboot/config/grub/
- </p>
- <div class="subsection">
- <h3 id="config_kfsn4-dre">
- ASUS KFSN4-DRE configuration (file: resources/libreboot/config/grub/kfsn4-dre/config)
- </h3>
- <ul>
- <li>General setup / Expert mode = <i>enable</i></li>
- <li>General / Use CMOS for configuration values = <i>enable</i></li>
- <li>Mainboard / Mainboard vendor = <i>ASUS</i></li>
- <li>Mainboard / Mainboard model = <i>KFSN4-DRE</i></li>
- <li>Mainboard / ROM chip size = <i>1024 KB (1 MB)</i></li>
- <li>Chipset / Include CPU microcode in CBFS = <i>Do not include microcode updates</i></li>
- <li>Devices / Use native graphics initialization = <i>enable</i></li>
- <li>
- Display / Keep VESA framebuffer = <i>disable</i> (disable for text-mode graphics, enable for coreboot vesa framebuffer)
- <ul>
- <li>Libreboot provides this with text-mode enabled by default, but it automatically patches a copy of the config at build time
- to enable coreboot framebuffer for a separate set of ROM images, in each system.</li>
- </ul>
- </li>
- <li>Generic Drivers / USB 2.0 EHCI debug dongle support = <i>Enable</i></li>
- <li>Generic Drivers / Enable early (pre-RAM) usbdebug = <i>Enable</i></li>
- <li>Generic Drivers / Type of dongle = <i>Net20DC or compatible</i></li>
- <li>Generic Drivers / Digitizer = <i>Present</i></li>
-
- <li>Console / USB dongle console output = <i>enable</i></li>
- <li>Payload / Add a payload = <i>An ELF executable payload</i></li>
- <li>Payload / Payload path and filename = <i>grub.elf</i></li>
- </ul>
- <p>
- Now go back into Devices:
- </p>
- <ul>
- <li>Devices / Run VGA Option ROMs = <i>disable</i></li>
- <li>Devices / Run Option ROMs on PCI devices = <i>disable</i></li>
- </ul>
- <p>
- The resulting .config file was saved as resources/libreboot/config/<b>grub/kfsn4-dre/config</b> and is used by the build
- scripts for this system.
- </p>
- </div>
- <div class="subsection">
- <h3 id="config_x60">
- ThinkPad X60, X60S and X60 Tablet configuration (file: resources/libreboot/config/grub/x60/config)
- </h3>
- <ul>
- <li>General setup / Expert mode = <i>enable</i></li>
- <li>General / Use CMOS for configuration values = <i>enable</i></li>
-
- <li>Mainboard / Mainboard vendor = <i>Lenovo</i></li>
- <li>Mainboard / Mainboard model = <i>ThinkPad X60 / X60s / X60t</i></li>
- <li>Mainboard / ROM chip size = <i>2048 KB (2 MB)</i></li>
- <li>Chipset / Include CPU microcode in CBFS = <i>Do not include microcode updates</i></li>
- <li>Devices / Use native graphics initialization = <i>enable</i></li>
- <li>
- Display / Keep VESA framebuffer = <i>disable</i> (disable for text-mode graphics, enable for coreboot vesa framebuffer)
- <ul>
- <li>Libreboot provides this with text-mode enabled by default, but it automatically patches a copy of the config at build time
- to enable coreboot framebuffer for a separate set of ROM images, in each system.</li>
- </ul>
- </li>
- <li>Generic Drivers / USB 2.0 EHCI debug dongle support = <i>Enable</i></li>
- <li>Generic Drivers / Enable early (pre-RAM) usbdebug = <i>Enable</i></li>
- <li>Generic Drivers / Type of dongle = <i>Net20DC or compatible</i></li>
- <li>Generic Drivers / Digitizer = <i>Present</i></li>
-
- <li>Console / USB dongle console output = <i>enable</i></li>
- <li>Payload / Add a payload = <i>An ELF executable payload</i></li>
- <li>Payload / Payload path and filename = <i>grub.elf</i></li>
- </ul>
- <p>
- Now go back into Devices:
- </p>
- <ul>
- <li>Devices / Run VGA Option ROMs = <i>disable</i></li>
- <li>Devices / Run Option ROMs on PCI devices = <i>disable</i></li>
- </ul>
- <p>
- The resulting .config file was saved as resources/libreboot/config/<b>grub/x60/config</b> and is used by the build
- scripts for this system.
- </p>
- <p>
- This configuration is used on all variants: X60, X60S and X60 Tablet.
- </p>
- </div>
- <div class="subsection">
- <h3 id="config_t60">
- ThinkPad T60 configuration (file: resources/libreboot/config/grub/t60/config)
- </h3>
- <ul>
- <li>General setup / Expert mode = <i>enable</i></li>
- <li>General setup / Local version string = <i>79ETE7WW (2.27 )</i></li>
- <li>General / Use CMOS for configuration values = <i>enable</i></li>
-
- <li>Mainboard / Mainboard vendor = <i>Lenovo</i></li>
- <li>Mainboard / Mainboard model = <i>ThinkPad T60 / T60p</i></li>
- <li>Mainboard / ROM chip size = <i>2048 KB (2 MB)</i></li>
- <li>System tables / SMBIOS Serial Number = <i>L3DKE06</i></li>
- <li>System tables / SMBIOS Version Number = <i>ThinkPad T60</i></li>
- <li>System tables / SMBIOS Manufacturer = <i>LENOVO</i></li>
- <li>System tables / SMBIOS Product name = <i>1951FEG</i></li>
- <li>Chipset / Include CPU microcode in CBFS = <i>Do not include microcode updates</i></li>
- <li>Devices / Use native graphics initialization = <i>enable</i></li>
- <li>
- Display / Keep VESA framebuffer = <i>disable</i> (disable for text-mode graphics, enable for coreboot vesa framebuffer)
- <ul>
- <li>Libreboot provides this with text-mode enabled by default, but it automatically patches a copy of the config at build time
- to enable coreboot framebuffer for a separate set of ROM images, in each system.</li>
- </ul>
- </li>
- <li>Generic Drivers / USB 2.0 EHCI debug dongle support = <i>Enable</i></li>
- <li>Generic Drivers / Enable early (pre-RAM) usbdebug = <i>Enable</i></li>
- <li>Generic Drivers / Type of dongle = <i>Net20DC or compatible</i></li>
-
- <li>Console / USB dongle console output = <i>enable</i></li>
- <li>Payload / Add a payload = <i>An ELF executable payload</i></li>
- <li>Payload / Payload path and filename = <i>grub.elf</i></li>
- </ul>
- <p>
- Go back into Devices:
- </p>
- <ul>
- <li>Devices / Run VGA Option ROMs = <i>disable</i></li>
- <li>Devices / Run Option ROMs on PCI devices = <i>disable</i></li>
- </ul>
- <p>
- The resulting .config file was saved as resources/libreboot/config/<b>grub/t60/config</b> and is used by the build
- scripts for this system.
- </p>
- <p>
- It is believed that the motherboards on 14.1" and 15.1" T60s are the same, so the same configuration is used
- on both the 14.1" and 15.1" T60s.
- </p>
- </div>
-
- <div class="subsection">
- <h3 id="config_x200">
- ThinkPad X200 configuration (file: resources/libreboot/config/grub/x200_4mb/config and resources/libreboot/config/grub/x200_8mb/config)
- </h3>
- <p>
- These are saved as two configs, because there are 2 size flash chips: 4MB or 8MB.
- </p>
- <ul>
- <li>General / Expert mode = <i>enable</i></li>
- <li>General / Use CMOS for configuration values = <i>enable</i></li>
-
- <li>Mainboard / Mainboard vendor = <i>Lenovo</i></li>
- <li>Mainboard / Mainboard model = <i>ThinkPad X200</i></li>
- <li>Mainboard / ROM chip size = <i>4096 KB (4 MB)</i> or <i>8192 KB (8 MB)</i> depending on flash chip size</li>
- <li>Chipset / Include CPU microcode in CBFS = <i>Do not include microcode updates</i></li>
- <li>Chipset / Size of CBFS filesystem in ROM = byte size <i>0x7FD000</i> (for 8MB flash chip) or <i>3FD000</i> (for 4MB flash chip)</li>
- <li>Devices / Use native graphics initialization = <i>enable</i></li>
- <li>
- Display / Keep VESA framebuffer = <i>disable</i> (disable for text-mode graphics, enable for coreboot vesa framebuffer)
- <ul>
- <li>Libreboot provides this with text-mode enabled by default, but it automatically patches a copy of the config at build time
- to enable coreboot framebuffer for a separate set of ROM images, in each system.</li>
- </ul>
- </li>
- <li>Generic Drivers / USB 2.0 EHCI debug dongle support = <i>Enable</i></li>
- <li>Generic Drivers / Enable early (pre-RAM) usbdebug = <i>Enable</i></li>
- <li>Generic Drivers / Type of dongle = <i>Net20DC or compatible</i></li>
- <li>Generic Drivers / Digitizer = <i>Present</i></li>
-
- <li>Console / USB dongle console output = <i>enable</i></li>
- <li>Payload / Add a payload = <i>An ELF executable payload</i></li>
- <li>Payload / Payload path and filename = <i>grub.elf</i></li>
- </ul>
- <p>
- Go back and disable option ROMs:
- </p>
- <ul>
- <li>Devices / Run VGA Option ROMs = <i>disable</i></li>
- <li>Devices / Run Option ROMs on PCI devices = <i>disable</i></li>
- </ul>
- <p>
- The resulting .config file was saved as resources/libreboot/config/<b>grub/x200_8mb/config</b> and
- resources/libreboot/config/<b>grub/x200_4mb/config</b> and is used by the build
- scripts for this system.
- </p>
- </div>
-
- <div class="subsection">
- <h3 id="config_r400">
- ThinkPad R400 configuration (file: resources/libreboot/config/grub/r400_4mb/config and resources/libreboot/config/grub/r400_8mb/config)
- </h3>
- <p>
- These are saved as two configs, because there are 2 size flash chips: 4MB or 8MB.
- </p>
- <ul>
- <li>General / Expert mode = <i>enable</i></li>
- <li>General / Use CMOS for configuration values = <i>enable</i></li>
-
- <li>Mainboard / Mainboard vendor = <i>Lenovo</i></li>
- <li>Mainboard / Mainboard model = <i>ThinkPad R400</i></li>
- <li>Mainboard / ROM chip size = <i>4096 KB (4 MB)</i> or <i>8192 KB (8 MB)</i> depending on flash chip size</li>
- <li>Chipset / Include CPU microcode in CBFS = <i>Do not include microcode updates</i></li>
- <li>Chipset / Size of CBFS filesystem in ROM = byte size <i>0x7FD000</i> (for 8MB flash chip) or <i>3FD000</i> (for 4MB flash chip)</li>
- <li>Devices / Use native graphics initialization = <i>enable</i></li>
- <li>
- Display / Keep VESA framebuffer = <i>disable</i> (disable for text-mode graphics, enable for coreboot vesa framebuffer)
- <ul>
- <li>Libreboot provides this with text-mode enabled by default, but it automatically patches a copy of the config at build time
- to enable coreboot framebuffer for a separate set of ROM images, in each system.</li>
- </ul>
- </li>
- <li>Generic Drivers / USB 2.0 EHCI debug dongle support = <i>Enable</i></li>
- <li>Generic Drivers / Enable early (pre-RAM) usbdebug = <i>Enable</i></li>
- <li>Generic Drivers / Type of dongle = <i>Net20DC or compatible</i></li>
-
- <li>Console / USB dongle console output = <i>enable</i></li>
- <li>Payload / Add a payload = <i>An ELF executable payload</i></li>
- <li>Payload / Payload path and filename = <i>grub.elf</i></li>
- </ul>
- <p>
- Go back and disable option ROMs:
- </p>
- <ul>
- <li>Devices / Run VGA Option ROMs = <i>disable</i></li>
- <li>Devices / Run Option ROMs on PCI devices = <i>disable</i></li>
- </ul>
- <p>
- The resulting .config file was saved as resources/libreboot/config/<b>grub/r400_8mb/config</b> and
- resources/libreboot/config/<b>grub/r400_4mb/config</b> and is used by the build
- scripts for this system.
- </p>
- </div>
- <div class="subsection">
- <h3 id="config_r500">
- ThinkPad R500 configuration (file: resources/libreboot/config/grub/r500_4mb/config)
- </h3>
- <ul>
- <li>General / Expert mode = <i>enable</i></li>
- <li>General / Use CMOS for configuration values = <i>enable</i></li>
-
- <li>Mainboard / Mainboard vendor = <i>Lenovo</i></li>
- <li>Mainboard / Mainboard model = <i>ThinkPad R500</i></li>
- <li>Mainboard / ROM chip size = <i>4096 KB (4 MB)</i></li>
- <li>Chipset / Include CPU microcode in CBFS = <i>Do not include microcode updates</i></li>
- <li>Chipset / Size of CBFS filesystem in ROM = <i>0x3FF000</i></li>
- <li>Devices / Use native graphics initialization = <i>enable</i></li>
- <li>
- Display / Keep VESA framebuffer = <i>disable</i> (disable for text-mode graphics, enable for coreboot vesa framebuffer)
- <ul>
- <li>Libreboot provides this with text-mode enabled by default, but it automatically patches a copy of the config at build time
- to enable coreboot framebuffer for a separate set of ROM images, in each system.</li>
- </ul>
- </li>
- <li>Generic Drivers / USB 2.0 EHCI debug dongle support = <i>Enable</i></li>
- <li>Generic Drivers / Enable early (pre-RAM) usbdebug = <i>Enable</i></li>
- <li>Generic Drivers / Type of dongle = <i>Net20DC or compatible</i></li>
-
- <li>Console / USB dongle console output = <i>enable</i></li>
- <li>Payload / Add a payload = <i>An ELF executable payload</i></li>
- <li>Payload / Payload path and filename = <i>grub.elf</i></li>
- </ul>
- <p>
- Go back and disable option ROMs:
- </p>
- <ul>
- <li>Devices / Run VGA Option ROMs = <i>disable</i></li>
- <li>Devices / Run Option ROMs on PCI devices = <i>disable</i></li>
- </ul>
- <p>
- The resulting .config file was saved as resources/libreboot/config/<b>grub/r500_4mb/config</b> and is used by the build
- scripts for this system.
- </p>
- </div>
-
- <div class="subsection">
- <h3 id="config_t400">
- ThinkPad T400 configuration (file: resources/libreboot/config/grub/t400_4mb/config and resources/libreboot/config/grub/t400_8mb/config)
- </h3>
- <p>
- These are saved as two configs, because there are 2 size flash chips: 4MB or 8MB.
- </p>
- <ul>
- <li>General / Expert mode = <i>enable</i></li>
- <li>General / Use CMOS for configuration values = <i>enable</i></li>
-
- <li>Mainboard / Mainboard vendor = <i>Lenovo</i></li>
- <li>Mainboard / Mainboard model = <i>ThinkPad T400</i></li>
- <li>Mainboard / ROM chip size = <i>4096 KB (4 MB)</i> or <i>8192 KB (8 MB)</i> depending on flash chip size</li>
- <li>Chipset / Include CPU microcode in CBFS = <i>Do not include microcode updates</i></li>
- <li>Chipset / Size of CBFS filesystem in ROM = byte size <i>0x7FD000</i> (for 8MB flash chip) or <i>3FD000</i> (for 4MB flash chip)</li>
- <li>Devices / Use native graphics initialization = <i>enable</i></li>
- <li>
- Display / Keep VESA framebuffer = <i>disable</i> (disable for text-mode graphics, enable for coreboot vesa framebuffer)
- <ul>
- <li>Libreboot provides this with text-mode enabled by default, but it automatically patches a copy of the config at build time
- to enable coreboot framebuffer for a separate set of ROM images, in each system.</li>
- </ul>
- </li>
- <li>Generic Drivers / USB 2.0 EHCI debug dongle support = <i>Enable</i></li>
- <li>Generic Drivers / Enable early (pre-RAM) usbdebug = <i>Enable</i></li>
- <li>Generic Drivers / Type of dongle = <i>Net20DC or compatible</i></li>
-
- <li>Console / USB dongle console output = <i>enable</i></li>
- <li>Payload / Add a payload = <i>An ELF executable payload</i></li>
- <li>Payload / Payload path and filename = <i>grub.elf</i></li>
- </ul>
- <p>
- Go back and disable option ROMs:
- </p>
- <ul>
- <li>Devices / Run VGA Option ROMs = <i>disable</i></li>
- <li>Devices / Run Option ROMs on PCI devices = <i>disable</i></li>
- </ul>
- <p>
- The resulting .config file was saved as resources/libreboot/config/<b>grub/t400_8mb/config</b> and
- resources/libreboot/config/<b>grub/t400_4mb/config</b> and is used by the build
- scripts for this system.
- </p>
- </div>
-
- <div class="subsection">
- <h3 id="config_t500">
- ThinkPad T500 configuration (file: resources/libreboot/config/grub/t500_4mb/config and resources/libreboot/config/grub/t500_8mb/config)
- </h3>
- <p>
- These are saved as two configs, because there are 2 size flash chips: 4MB or 8MB.
- </p>
- <ul>
- <li>General / Expert mode = <i>enable</i></li>
- <li>General / Use CMOS for configuration values = <i>enable</i></li>
-
- <li>Mainboard / Mainboard vendor = <i>Lenovo</i></li>
- <li>Mainboard / Mainboard model = <i>ThinkPad T500</i></li>
- <li>Mainboard / ROM chip size = <i>4096 KB (4 MB)</i> or <i>8192 KB (8 MB)</i> depending on flash chip size</li>
- <li>Chipset / Include CPU microcode in CBFS = <i>Do not include microcode updates</i></li>
- <li>Chipset / Size of CBFS filesystem in ROM = byte size <i>0x7FD000</i> (for 8MB flash chip) or <i>3FD000</i> (for 4MB flash chip)</li>
- <li>Devices / Use native graphics initialization = <i>enable</i></li>
- <li>
- Display / Keep VESA framebuffer = <i>disable</i> (disable for text-mode graphics, enable for coreboot vesa framebuffer)
- <ul>
- <li>Libreboot provides this with text-mode enabled by default, but it automatically patches a copy of the config at build time
- to enable coreboot framebuffer for a separate set of ROM images, in each system.</li>
- </ul>
- </li>
- <li>Generic Drivers / USB 2.0 EHCI debug dongle support = <i>Enable</i></li>
- <li>Generic Drivers / Enable early (pre-RAM) usbdebug = <i>Enable</i></li>
- <li>Generic Drivers / Type of dongle = <i>Net20DC or compatible</i></li>
-
- <li>Console / USB dongle console output = <i>enable</i></li>
- <li>Payload / Add a payload = <i>An ELF executable payload</i></li>
- <li>Payload / Payload path and filename = <i>grub.elf</i></li>
- </ul>
- <p>
- Go back and disable option ROMs:
- </p>
- <ul>
- <li>Devices / Run VGA Option ROMs = <i>disable</i></li>
- <li>Devices / Run Option ROMs on PCI devices = <i>disable</i></li>
- </ul>
- <p>
- The resulting .config file was saved as resources/libreboot/config/<b>grub/t500_8mb/config</b> and
- resources/libreboot/config/<b>grub/t500_4mb/config</b> and is used by the build
- scripts for this system.
- </p>
- </div>
- <div class="subsection">
- <h3 id="config_macbook21">
- MacBook2,1 configuration (file: resources/libreboot/config/grub/macbook21/config)
- </h3>
- <ul>
- <li>General / Expert mode = <i>enable</i></li>
- <li>General / Local version string = <i>" MB21.88Z.00A5.B07.0706270922"</i> (without the quotes)</li>
- <li>General / Use CMOS for configuration values = <i>enable</i></li>
-
- <li>Mainboard / Mainboard vendor = <i>Apple</i></li>
- <li>Mainboard / Mainboard model = <i>Macbook2,1 ICH7 TESTING</i></li>
- <li>Mainboard / ROM chip size = <i>2048 KB (2 MB)</i></li>
- <li>System tables / SMBIOS Serial Number = <i>W8724XXXXXX</i></li>
- <li>System tables / SMBIOS Version Number = <i>1.0</i></li>
- <li>System tables / SMBIOS Manufacturer = <i>Apple Inc.</i></li>
- <li>System tables / SMBIOS Product Name = <i>MacBook2,1</i></li>
- <li>Chipset / Include CPU microcode in CBFS = <i>Do not include microcode updates</i></li>
- <li>Devices / Use native graphics initialization = <i>enable</i></li>
- <li>
- Display / Keep VESA framebuffer = <i>disable</i> (disable for text-mode graphics, enable for coreboot vesa framebuffer)
- <ul>
- <li>Libreboot provides this with text-mode enabled by default, but it automatically patches a copy of the config at build time
- to enable coreboot framebuffer for a separate set of ROM images, in each system.</li>
- </ul>
- </li>
- <li>Generic Drivers / USB 2.0 EHCI debug dongle support = <i>Enable</i></li>
- <li>Generic Drivers / Enable early (pre-RAM) usbdebug = <i>Enable</i></li>
- <li>Generic Drivers / Type of dongle = <i></i></li>
-
- <li>Console / USB dongle console output = <i>enable</i></li>
- <li>Payload / Add a payload = <i>An ELF executable payload</i></li>
- <li>Payload / Payload path and filename = <i>grub.elf</i></li>
- </ul>
- <p>
- Go back and disable option ROMs:
- </p>
- <ul>
- <li>Devices / Run VGA Option ROMs = <i>disable</i></li>
- <li>Devices / Run Option ROMs on PCI devices = <i>disable</i></li>
- </ul>
- <p>
- The resulting .config file was saved as resources/libreboot/config/<b>grub/macbook21/config</b> and is used by the build
- scripts for this system. <b>This config is also used for the MacBook1,1</b>.
- </p>
- </div>
-
- <div class="subsection">
- <h3 id="config_qemu_i440fx_piix4">
- QEMU (x86 i440fx/piix4) configuration (file: resources/libreboot/config/grub/qemu_i440fx_piix4/config)
- </h3>
- <ul>
- <li>General / Expert mode = <i>enable</i></li>
- <li>Mainboard / Mainboard vendor = <i>Emulation</i></li>
- <li>Mainboard / Mainboard model = <i>QEMU x86 i440fx/piix4 (aka qemu -M pc)</i></li>
- <li>Mainboard / ROM chip size = <i>8192 KB (8 MB)</i></li>
- <li>Devices / Use native graphics initialization = <i>enable</i> (should already be enabled)</li>
- <li>
- Display / Keep VESA framebuffer = <i>enable</i> (disable for text-mode graphics, enable for coreboot vesa framebuffer)
- <ul>
- <li>Libreboot provides this with framebuffer enabled by default, but it automatically patches a copy of the config at build time
- to enable coreboot text-mode for a separate set of ROM images, in each system.</li>
- </ul>
- </li>
-
- <li>Payload / Add a payload = <i>An ELF executable payload</i></li>
- <li>Payload / Payload path and filename = <i>grub.elf</i></li>
- </ul>
- <p>
- Go back and disable option ROMs:
- </p>
- <ul>
- <li>Devices / Run VGA Option ROMs = <i>disable</i></li>
- <li>Devices / Run Option ROMs on PCI devices = <i>disable</i></li>
- </ul>
- <p>
- The resulting .config file was saved as resources/libreboot/config/<b>grub/qemu_i440fx_piix4/config</b> and is used by the build
- scripts for this system.
- </p>
- </div>
-
- <div class="subsection">
- <h3 id="config_qemu_q35_ich9">
- QEMU (x86 q35/ich9) configuration (file: resources/libreboot/config/grub/qemu_q35_ich9/config)
- </h3>
- <ul>
- <li>General / Expert mode = <i>enable</i></li>
- <li>Mainboard / Mainboard vendor = <i>Emulation</i></li>
- <li>Mainboard / Mainboard model = <i>QEMU x86 q35/ich9 (aka qemu -M q35)</i></li>
- <li>Mainboard / ROM chip size = <i>8192 KB (8 MB)</i></li>
- <li>Devices / Use native graphics initialization = <i>enable</i> (should already be enabled)</li>
- <li>
- Display / Keep VESA framebuffer = <i>enable</i> (disable for text-mode graphics, enable for coreboot vesa framebuffer)
- <ul>
- <li>Libreboot provides this with framebuffer enabled by default, but it automatically patches a copy of the config at build time
- to enable coreboot text-mode for a separate set of ROM images, in each system.</li>
- </ul>
- </li>
-
- <li>Payload / Add a payload = <i>An ELF executable payload</i></li>
- <li>Payload / Payload path and filename = <i>grub.elf</i></li>
- </ul>
- <p>
- Go back and disable option ROMs:
- </p>
- <ul>
- <li>Devices / Run VGA Option ROMs = <i>disable</i></li>
- <li>Devices / Run Option ROMs on PCI devices = <i>disable</i></li>
- </ul>
- <p>
- The resulting .config file was saved as resources/libreboot/config/<b>grub/qemu_q35_ich9/config</b> and is used by the build
- scripts for this system.
- </p>
- </div>
- <p><a href="#pagetop">Back to top of page.</a></p>
-
- </div>
- <div class="section">
- <h1 id="build">How to build the ROM images</h1>
- <p>You don't need to do much, as there are scripts already written for you that can build everything automatically.</p>
- <p>
- You can build libreboot from source on a 32-bit (i686) or 64-bit (x86_64) system. Recommended (if possible): x86_64.
- ASUS KFSN4-DRE has 64-bit CPUs.
- On a ThinkPad T60, you can replace the CPU (Core 2 Duo T5600, T7200 or T7600. T5600 recommended) for 64-bit support.
- On an X60s, you can replace the board with one that has a Core 2 Duo L7400 (you could also use an X60 Tablet board with the same CPU).
- On an X60, you can replace the board with one that has a Core 2 Duo T5600 or T7200 (T5600 is recommended). All MacBook2,1 laptops
- are 64-bit, as are all ThinkPad X200, X200S, X200 Tablet, R400, T400 and T500 laptops. Warning: MacBook1,1 laptops are all 32-bit only.
- </p>
- <p>
- First, <a href="#build_dependencies">install the build dependencies</a>.
- </p>
- <p>
- If you downloaded libreboot from git, refer to <a href="#build_meta">#build_meta</a>.
- </p>
- <p>
- Build all of the components used in libreboot:<br/>
- $ <b>./build module all</b>
- </p>
- <p>
- You can also build each modules separately, using <i>./build module modulename</i>.
- To see the possible values for <i>modulename</i>, use:<br/>
- $ <b>./build module list</b>
- </p>
- <p>
- NOTE: crossgcc is included in <i>coreboot/util/crossgcc/tarballs/</i> in the release archives,
- but the build system for libreboot does not automatically download/build it.
- If you are using libreboot from the git repository, make sure to do the following:<br/>
- $ <b>cd coreboot/</b><br/>
- $ <b>make crossgcc-i386</b><br/>
- $ <b>cd ../</b><br/>
- This will download coreboot's reference cross-compile toolchain,
- which is highly recommended by the coreboot project.
- </p>
- <p>
- After that, build the ROM images (for all boards):<br/>
- $ <b>./build roms withgrub</b><br/>
- Alternatively, you can build for a specific board or set of boards.
- For example:<br/>
- $ <b>./build roms withgrub x60</b><br/>
- $ <b>./build roms withgrub x200_8mb</b><br/>
- $ <b>./build roms withgrub x60 x200_8mb</b><br/>
- The list of board options can be found by looking at the directory
- names in <b>resources/libreboot/config/grub/</b>.
- </p>
- <p>
- To clean (reverse) everything, do the following:<br/>
- $ <b>./build clean all</b>
- </p>
- <p>
- The ROM images will be stored under <b>bin/<i>payload</i>/</b>,
- where <i>payload</i> could be <i>grub</i>, <i>seabios</i>, or
- whatever other payload those images were built for.
- </p>
- <div class="subsection">
- <h2>Preparing release archives (optional)</h2>
- <p>
- <b>This is only confirmed to work (tested) in Trisquel 7. Parabola *fails* at this stage
- (for now). For all other distros, YMMV.</b>
- </p>
- <p>
- This is mainly intended for use with the git repository.
- These commands will work in the release archive (_src), unless otherwise noted below.
- </p>
- <p>
- The archives will appear under <i>release/${version}/</i>;
- ${version} will either be set using <i>git describe</i> or,
- if a <i>version</i> file already exists (_src release archive),
- then it will simply re-use that.
- </p>
- <p>
- Tag the current commit, and that version will appear in both the ${version}
- string on the directory under <i>release/</i>, and in the file names of the
- archives. Otherwise, whatever git uses for <i>git describe --tags HEAD</i>
- will be used.
- </p>
- <p>
- Utilities (static executables):<br/>
- $ <b>./build release util</b>
- </p>
- <p>
- Archive containing flashrom and bucts source code:<br/>
- $ <b>./build release tobuild</b>
- </p>
- <p>
- Documentation archive (<b>does not work on _src release archive, only git</b>):<br/>
- $ <b>./build release docs</b>
- </p>
- <p>
- ROM image archives:<br/>
- $ <b>./build release roms</b>
- </p>
- <p>
- Source code archive:<br/>
- $ <b>./build release src</b>
- </p>
- <p>
- SHA512 sums of all other release archives that have been generated:<br/>
- $ <b>./build release sha512sums</b>
- </p>
- <p>
- If you are building on an i686 host, this will build statically linked 32-bit binaries in
- the binary release archive that you created,
- for: <b>nvramtool, cbfstool, ich9deblob, cbmem</b>.
- </p>
- <p>
- If you are building on an x86_64 host, this will build statically linked 32- *and* 64-bit binaries for
- <b>cbmem</b>, <b>ich9deblob</b>, <b>cbfstool</b> and <b>nvramtool</b>.
- </p>
- <p>
- <b>To include statically linked i686 and x86_64 binaries for bucts and flashrom,
- you will need to build them on a chroot, a virtual system or a real
- system where the host uses each given architecture. These packages are difficult
- to cross-compile, and the libreboot project is still figuring out how to deal
- with them.</b>
- </p>
- <p>
- The same applies if you want to include statically linked flashrom binaries for ARM.
- </p>
-
- <p>
- armv7l binaries (tested on a BeagleBone Black) are also included in libreboot_util, for:
- </p>
- <ul>
- <li>cbfstool</li>
- <li>ich9gen</li>
- <li>ich9deblob</li>
- <li>flashrom</li>
- </ul>
- <p>
- If you are building binaries on a live system or chroot (for flashrom/bucts), you can use the following to statically link them:<br/>
- $ <b>./build module flashrom static</b><br/>
- $ <b>./build module bucts static</b>
- </p>
-
- <p>
- The same conditions as above apply for ARM (except, building bucts on ARM is pointless, and for flashrom
- you only need the normal executable since the lenovobios_sst and _macronix executables are meant
- to run on an X60/T60 while lenovo bios is present, working around the security restrictions).
- </p>
-
- <p>
- The command that you used for generating the release archives will also run the following command:<br/>
- $ <b>./build release tobuild</b><br/>
- The archive <b>tobuild.tar.xz</b> will have been created under <b>release/</b>, containing bucts, flashrom and all other required
- resources for building them.
- </p>
- <p>
- You'll find that the files libreboot_util.tar.xz and libreboot_src.tar.xz have been created, under <b>release/</b>.
- </p>
-
- <p>
- The ROM images will be stored in separate archives for each system, under <b>release/rom/</b>.
- </p>
-
- </div>
- <p><a href="#pagetop">Back to top of page</a></p>
-
- </div>
- <div class="section">
- <p>
- Copyright © 2014, 2015 Francis Rowe <info@gluglug.org.uk><br/>
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.3
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
- A copy of the license can be found at <a href="../gfdl-1.3.txt">../gfdl-1.3.txt</a>
- </p>
- <p>
- Updated versions of the license (when available) can be found at
- <a href="https://www.gnu.org/licenses/licenses.html">https://www.gnu.org/licenses/licenses.html</a>
- </p>
- <p>
- UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
- EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
- AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
- ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
- IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
- WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
- ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
- KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
- ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
- </p>
- <p>
- TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
- TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
- NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
- INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
- COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
- USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
- DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
- IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
- </p>
- <p>
- The disclaimer of warranties and limitation of liability provided
- above shall be interpreted in a manner that, to the extent
- possible, most closely approximates an absolute disclaimer and
- waiver of all liability.
- </p>
-
- </div>
- </body>
- </html>
|