https://www.coreboot.org/api.php?action=feedcontributions&user=Eswierk&feedformat=atomcoreboot - User contributions [en]2024-03-28T15:24:04ZUser contributionsMediaWiki 1.40.0https://www.coreboot.org/index.php?title=Fun_Stuff&diff=10948Fun Stuff2011-12-06T16:12:59Z<p>Eswierk: /* Clipper Machine */</p>
<hr />
<div><br />
== Failure at scale ==<br />
<br />
A BIOS gets confused in a very visible way: <br />
<br />
[[File:Billboard_bios_fail.jpeg|640px]]<br />
<br />
Photo courtesy Greg Kurtzer of LBL.<br />
<br />
<br />
== What floor am I on? ==<br />
<br />
An elevator in Spain: <br />
<br />
[[File:Elevator_spain.jpeg|640px]]<br />
<br />
Photo courtesy Gorka Guardiola<br />
<br />
== Confused payphone ==<br />
<br />
A payphone in trouble. Taken during the LinuxBIOS summit in Hamburg, Germany in October 2006. Bonus: two coreboot hackers visible in the reflection.<br />
<br />
[[File:Dscn3815.jpg|640px]]<br />
<br />
Photo by Ward Vandewege<br />
<br />
== Clipper Machine ==<br />
<br />
At the Palo Alto Caltrain station<br />
<br />
[[File:Clipper_caltrain.jpeg|640px]]<br />
<br />
From Ed Swierk</div>Eswierkhttps://www.coreboot.org/index.php?title=User:Eswierk&diff=7307User:Eswierk2008-10-25T22:05:40Z<p>Eswierk: Arastra -> Arista Networks</p>
<hr />
<div>== Ed Swierk ==<br />
<br />
I've been implementing firmware based on Coreboot on a number of AMD- and Intel-based boards for my employer, [http://www.aristanetworks.com/ Arista Networks].<br />
<br />
=== Favorite Tools ===<br />
<br />
==== [http://www.eetools.com/index.cfm?fuseaction=product.display&Product_ID=3 EETools TopMax Flash Programmer] ====<br />
<br />
If you plan to do any serious firmware hacking, a flash programmer is an indispensible tool. For most x86-based boards, it's the only way to program a flash chip on a brand-new board with no existing firmware.<br />
<br />
The key to a good programmer is good software that's kept up-to-date with the programming algorithms and parameters for a variety of flash chips.<br />
<br />
After fighting a losing battle with a cheap no-name flash programmer for a few weeks, I managed to find the TopMax on a dusty shelf at my local Fry's Electronics (much to the surprise of the Fry's employee who told me they hadn't stocked programmers for years).<br />
<br />
EETools software supports zillions of different chips and posts updates regularly on their web site. It's reasonably well desgined, stable, and Just Works[tm].<br />
<br />
The only major downside is that the EETools software is Windows-only. This seems to be par for the course among professional-grade programmers; last time I checked, Linux support was available only for the more do-it-yourself "Willem" programmers. I just hook up the programmer to an old laptop running Windows. It may be possible to [http://wiki.jswindle.com/index.php/Wine_Config_File#Configuring_the_Parallel_Port run TopMax on Linux using Wine] but I have not tried it myself.<br />
<br />
==== [[Artecgroup_programmable_LPC_dongle|Artec USB LPC Dongle]] ====<br />
<br />
Typical firmware development process:<br />
<br />
* Build a firmware image<br />
* Pry the flash chip out of the target board, insert into programmer<br />
* Erase the flash chip, program the firmware image onto the chip<br />
* Reinsert the flash chip into the target board<br />
* Power up the board, watch it crash<br />
* Fix a bug in your code<br />
* Repeat<br />
<br />
Firmware development process with the magical Artec LPC dongle in place of a flash chip:<br />
<br />
* Build a firmware image<br />
* Send the image to the dongle via the USB cable<br />
* Power up the target board, watch it crash<br />
* Fix a bug in your code<br />
* Repeat<br />
<br />
In short, the Artec LPC dongle saves you lots of prying and inserting, and reduces the compile-test cycle from about 10 minutes to 1 minute. It's worth every penny.</div>Eswierkhttps://www.coreboot.org/index.php?title=User:Eswierk&diff=7281User:Eswierk2008-10-15T22:42:35Z<p>Eswierk: Mention Artec LPC dongle</p>
<hr />
<div>== Ed Swierk ==<br />
<br />
I've been implementing firmware based on Coreboot on a number of AMD- and Intel-based boards for my employer, [http://www.arastra.com/ Arastra].<br />
<br />
=== Favorite Tools ===<br />
<br />
==== [http://www.eetools.com/index.cfm?fuseaction=product.display&Product_ID=3 EETools TopMax Flash Programmer] ====<br />
<br />
If you plan to do any serious firmware hacking, a flash programmer is an indispensible tool. For most x86-based boards, it's the only way to program a flash chip on a brand-new board with no existing firmware.<br />
<br />
The key to a good programmer is good software that's kept up-to-date with the programming algorithms and parameters for a variety of flash chips.<br />
<br />
After fighting a losing battle with a cheap no-name flash programmer for a few weeks, I managed to find the TopMax on a dusty shelf at my local Fry's Electronics (much to the surprise of the Fry's employee who told me they hadn't stocked programmers for years).<br />
<br />
EETools software supports zillions of different chips and posts updates regularly on their web site. It's reasonably well desgined, stable, and Just Works[tm].<br />
<br />
The only major downside is that the EETools software is Windows-only. This seems to be par for the course among professional-grade programmers; last time I checked, Linux support was available only for the more do-it-yourself "Willem" programmers. I just hook up the programmer to an old laptop running Windows. It may be possible to [http://wiki.jswindle.com/index.php/Wine_Config_File#Configuring_the_Parallel_Port run TopMax on Linux using Wine] but I have not tried it myself.<br />
<br />
==== [[Artecgroup_programmable_LPC_dongle|Artec USB LPC Dongle]] ====<br />
<br />
Typical firmware development process:<br />
<br />
* Build a firmware image<br />
* Pry the flash chip out of the target board, insert into programmer<br />
* Erase the flash chip, program the firmware image onto the chip<br />
* Reinsert the flash chip into the target board<br />
* Power up the board, watch it crash<br />
* Fix a bug in your code<br />
* Repeat<br />
<br />
Firmware development process with the magical Artec LPC dongle in place of a flash chip:<br />
<br />
* Build a firmware image<br />
* Send the image to the dongle via the USB cable<br />
* Power up the target board, watch it crash<br />
* Fix a bug in your code<br />
* Repeat<br />
<br />
In short, the Artec LPC dongle saves you lots of prying and inserting, and reduces the compile-test cycle from about 10 minutes to 1 minute. It's worth every penny.</div>Eswierkhttps://www.coreboot.org/index.php?title=Supported_Chipsets_and_Devices&diff=7143Supported Chipsets and Devices2008-09-24T15:13:55Z<p>Eswierk: /* Devices supported in coreboot v2 */</p>
<hr />
<div>Note: If a device is not supported by coreboot v2, try [[Supported_Chipsets_and_Devices#Devices_supported_in_coreboot_v1|checking coreboot v1]] for support. Do '''not''' attempt to use coreboot v3 &mdash; this is an early development version which is not ready for production use, yet.<br />
<br />
See also [[Supported Motherboards]].<br />
<br />
== Devices supported in coreboot v3 ==<br />
<br />
<div style="color: #ff0000">coreboot v3 is an alpha-stage development version of coreboot and is not meant for production use, yet!</div><br />
<br />
{| border="0" valign="top"<br />
| valign="top"|<br />
<br />
'''Northbridges'''<br />
<br />
{| border="0" style="font-size: smaller" valign="top"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Vendor<br />
! align="left" | Northbridge<br />
! align="left" | Status<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| Geode&nbsp;LX<br />
| style="background:lime" | OK<br />
<br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| 82443BX&nbsp;(440BX)<br />
| style="background:orange" | WIP<br />
<br />
|}<br />
<br />
| valign="top"|<br />
<br />
'''Southbridges'''<br />
<br />
{| border="0" style="font-size: smaller" valign="top"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Vendor<br />
! align="left" | Southbridge<br />
! align="left" | Status<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| CS5536<br />
| style="background:lime" | OK<br />
<br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| 82371EB&nbsp;(PIIX4E)<br />
| style="background:orange" | WIP<br />
<br />
|}<br />
<br />
| valign="top"|<br />
<br />
'''Super I/Os'''<br />
<br />
{| border="0" style="font-size: smaller" valign="top"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Vendor<br />
! align="left" | Super&nbsp;I/O<br />
! align="left" | Status<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Fintek<br />
| F71805F<br />
| style="background:orange" | WIP<br />
<br />
|- bgcolor="#dddddd" valign="top"<br />
| Winbond&trade;<br />
| W83627HF<br />
| style="background:lime" | OK<br />
<br />
|}<br />
<br />
| valign="top"|<br />
<br />
'''CPUs'''<br />
<br />
{| border="0" style="font-size: smaller"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Type<br />
! align="left" | CPU<br />
! align="left" | Status<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Generic<br />
| i586<br />
| style="background:orange" | WIP<br />
<br />
|- bgcolor="#dddddd" valign="top"<br />
| AMD<br />
| Geode LX<br />
| style="background:lime" | OK<br />
<br />
|}<br />
<br />
|}<br />
<br />
== Devices supported in coreboot v2 ==<br />
<br />
{| border="0" valign="top"<br />
| valign="top"|<br />
<br />
'''Northbridges'''<br />
<br />
{| border="0" style="font-size: smaller" valign="top"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Vendor<br />
! align="left" | Northbridge<br />
! align="left" | Status<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| Fam10<br />
| style="background:lime" | OK<sup>16</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| K8<br />
| style="background: lime " | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| GX1<br />
| style="background:lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| GX&nbsp;(GX2)<br />
| style="background: lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| LX<br />
| style="background: lime" | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| IBM<br />
| CPC710<br />
| style="background:#dddddd" | ?<br />
|- bgcolor="#dddddd" valign="top"<br />
| IBM<br />
| CPC925<br />
| style="background:#dddddd" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| E7501<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| E7520<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| E7525<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82810<br />
| style="background:yellow" | WIP<sup>9</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82830<br />
| style="background:lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82443BX&nbsp;(440BX)<br />
| style="background:yellow" | WIP<sup>11</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82855PM<br />
| style="background:red" | WIP<sup>2</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 3100<br />
| style="background:lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| EP80579 (Tolapai)<br />
| style="background:lime" | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| Motorola<br />
| MPC107<br />
| style="background:#dddddd" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| SiS<br />
| SiS761GX<br />
| style="background:lime" | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| VIA<br />
| VT8601 (PLE133)<br />
| style="background:yellow" | WIP<br />
|- bgcolor="#dddddd" valign="top"<br />
| VIA<br />
| VT8623 (CLE266)<br />
| style="background:lime" | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| VIA<br />
| K8T890<br />
| style="background:lime" | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| VIA<br />
| K8M890<br />
| style="background:yellow" | WIP<br />
|- bgcolor="#dddddd" valign="top"<br />
| VIA<br />
| CN700<br />
| style="background:lime" | OK<sup>14</sup><br />
|}<br />
<br />
| valign="top"|<br />
<br />
'''Southbridges'''<br />
<br />
{| border="0" style="font-size: smaller" valign="top"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Vendor<br />
! align="left" | Southbridge<br />
! align="left" | Status<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| AMD8111<br />
| style="background: lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| AMD8131<br />
| style="background: lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| AMD8132<br />
| style="background: lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| AMD8151<br />
| style="background: lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| CS5530/CS5530A<br />
| style="background:yellow" | WIP<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| CS5535<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| CS5536<br />
| style="background: lime " | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| RS690<br />
| style="background: lime " | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| SB600<br />
| style="background: lime " | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| Broadcom<br />
| BCM5780<br />
| style="background:lime" | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| Broadcom<br />
| BCM5785<br />
| style="background:lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 6300ESB (ESB6300)<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82371EB&nbsp;(PIIX4E)<br />
| style="background:yellow" | WIP<sup>6</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82801AA/AB&nbsp;(ICH/ICH0)<br />
| style="background:lime" | OK<sup>10</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82801BA/BAM&nbsp;(ICH2/ICH2-M)<br />
| style="background:lime" | OK<sup>10</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82801CA/CAM&nbsp;(ICH3-S/ICH3-M)<br />
| style="background:lime" | OK<sup>10</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82801DB/DBL/DBM<br/>(ICH4/ICH4-L/ICH4-M)<br />
| style="background:lime" | OK<sup>10</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82801EB/ER&nbsp;(ICH5/ICH5R)<br />
| style="background:lime" | OK<sup>10</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82870<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| PXHD<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 3100<br />
| style="background:lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| EP80579 (Tolapai)<br />
| style="background:lime" | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| NVIDIA<br />
| CK804<br />
| style="background:lime" | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| NVIDIA<br />
| MCP55<br />
| style="background:lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Ricoh<br />
| RL5C476<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#dddddd" valign="top"<br />
| SiS<br />
| SiS966(L)<br />
| style="background:lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| VIA<br />
| VT8231<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| VIA<br />
| VT8235<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| VIA<br />
| VT8237R<br />
| style="background:lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| VIA<br />
| VT8237A<br />
| style="background:red" | WIP<br />
|- bgcolor="#dddddd" valign="top"<br />
| VIA<br />
| VT8237S<br />
| style="background:red" | WIP<br />
|- bgcolor="#dddddd" valign="top"<br />
| Winbond&trade;<br />
| W83C553<br />
| style="background:#dddddd" | ?<br />
|}<br />
<br />
| valign="top"|<br />
<br />
'''Super I/Os'''<br />
<br />
{| border="0" style="font-size: smaller" valign="top"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Vendor<br />
! align="left" | Super&nbsp;I/O<br />
! align="left" | Status<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| ASUS<br />
| A8000<br />
| style="background:lime" | <sup>12</sup>, <sup>13</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| Fintek<br />
| F71805F/FG<br />
| style="background:lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| ITE<br />
| IT8661F<br />
| style="background:yellow" | OK <sup>1</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| ITE<br />
| IT8671F<br />
| style="background:yellow" | OK <sup>1</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| ITE<br />
| IT8673F<br />
| style="background:yellow" | OK <sup>1</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| ITE<br />
| IT8705F<br />
| style="background:yellow" | OK <sup>1</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| ITE<br />
| IT8712F<br />
| style="background:lime" | OK <sup>8</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| ITE<br />
| IT8716F<br />
| style="background:lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| ITE<br />
| IT8718F<br />
| style="background:yellow" | OK <sup>1</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| 3100<br />
| style="background:lime" | OK <sup>15</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| EP80579 (Tolapai)<br />
| style="background:lime" | OK <sup>15</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC8374<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC87309<br />
| style="background:yellow" | OK <sup>5</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC87351<br />
| style="background:lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC87360<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC87366<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC87417<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC87427<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC97307 <br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC97317<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| FDC37M70x<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| FDC37B80x<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| FDC37B78x<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| FDC37B72x<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| FDC37B81x<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| FDC37M60x<br />
| style="background:lime" | OK<sup>3</sup>,<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| LPC47B27x<br />
| style="background:lime" | OK<sup>7</sup>,<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| LPC47M10x<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| LPC47M112<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| LPC47M13x<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| LPC47M15x<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| LPC47M192<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| LPC47B397<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| DME1737<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| SCH5307<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| LPC47N217<br />
| style="background:#dddddd" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| VIA<br />
| VT1211<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| VIA<br />
| VT82C686(A/B)<br />
| style="background:yellow" | OK<sup>5</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| Winbond&trade;<br />
| W83627EHG/EHF<br />
| style="background:#dddddd" | ?<br />
|- bgcolor="#dddddd" valign="top"<br />
| Winbond&trade;<br />
| W83627HF<br />
| style="background:#dddddd" | ?<br />
|- bgcolor="#dddddd" valign="top"<br />
| Winbond&trade;<br />
| W83627THF<br />
| style="background:#dddddd" | ?<br />
|- bgcolor="#dddddd" valign="top"<br />
| Winbond&trade;<br />
| W83977F<br />
| style="background:lime" | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| Winbond&trade;<br />
| W83977TF<br />
| style="background:lime" | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| Winbond&trade;<br />
| W83977EF<br />
| style="background:lime" | OK<sup>4</sup><br />
|}<br />
<br />
| valign="top"|<br />
<br />
'''CPUs'''<br />
<br />
{| border="0" style="font-size: smaller"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Type<br />
! align="left" | CPU<br />
! align="left" | Status<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| x86<br />
| AMD<br />
| style="background:lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| x86<br />
| Intel&reg;<br />
| style="background:lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| x86<br />
| VIA<br />
| style="background:lime" | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| PowerPC<br />
| MPC74xx<br />
| style="background:#dddddd" | ?<br />
|- bgcolor="#dddddd" valign="top"<br />
| PowerPC<br />
| PPC4xx<br />
| style="background:#dddddd" | ?<br />
|- bgcolor="#dddddd" valign="top"<br />
| PowerPC<br />
| PPC7xx<br />
| style="background:#dddddd" | ?<br />
|- bgcolor="#dddddd" valign="top"<br />
| PowerPC<br />
| PPC970<br />
| style="background:#dddddd" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Emulated<br />
| QEMU<br />
| style="background:lime" | OK<br />
|}<br />
<br />
'''SOCs'''<br />
<br />
{| border="0" style="font-size: smaller" valign="top"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Vendor<br />
! align="left" | SOC<br />
! align="left" | Status<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| Elan SC520<br />
| style="background: lime" | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| EP80579 (Tolapai)<br />
| style="background: lime" | OK<br />
|}<br />
<br />
|}<br />
<br />
<small><br />
<sup>1</sup> Serial output should work for all ITE Super I/Os (but is only tested on the IT8671F and IT8712F). The rest ''could'' work, but is completely untested.<br /><br />
<sup>2</sup> Work in progress.<br /><br />
<sup>3</sup> Serial output on serial port 1 is tested and works, the rest probably not yet (tested on FDC37M602).<br /><br />
<sup>4</sup> The W83977EF works fine with the W83977TF code (the pre-RAM serial part at least).<br /><br />
<sup>5</sup> Pre-RAM serial output works fine, but nothing else, yet.<br /><br />
<sup>6</sup> IDE support is available and tested. SMBus support may work, but is untested. USB support is on our TODO list.<br /><br />
<sup>7</sup> Pre-RAM serial output [http://www.linuxbios.org/pipermail/linuxbios/2007-May/021247.html works fine], everything else is untested.<br /><br />
<sup>8</sup> [http://www.linuxbios.org/pipermail/linuxbios/2007-May/021623.html Works fine] mostly, but support for more obscure features (floppy, game port, MIDI, IR) might need more work.<br /><br />
<sup>9</sup> Works mostly, but currently there are some limitations as to which RAM DIMMs can be used.<br /><br />
<sup>10</sup> These southbridges should all be supported by the (experimental) new code in src/southbridge/intel/i82801xx/ now. Please test this code and use this code for all new ICH* based boards. There's still some old code for the southbridges, but that should not be used anymore.<br /><br />
<sup>11</sup> Sort of works, but the settings are hardcoded for the Tyan S1846. This will be fixed soonish.<br /><br />
<sup>12</sup> All these Super I/O chips should be supported by the "smscsuperio" driver. Only the ASUS A8000 is tested, though. The floppy disk controller, the parallel port, the serial ports (COM1 + COM2), and the keyboard should work for all chips. More advanced stuff may need more work, though.<br /><br />
<sup>13</sup> The ASUS A8000 Super I/O seems to be a rebranded SMSC DME1737.<br /><br />
<sup>14</sup> Working, but not widely tested, yet. Works with single DIMM DDR2.<br /><br />
<sup>15</sup> The Intel 3100/EP80579 UARTs and watchdog timer are integrated as a Super I/O-like device; only the UARTs have been tested so far.<br /><br />
<sup>16</sup> Barcelona B0-B3 supported.<br />
</small><br />
<br />
== Devices supported in coreboot v1 ==<br />
<br />
Not all devices have been ported from coreboot v1 to coreboot v2, yet (check "v2?" field). If you want to work on such a port contact us on the [[Mailinglist|mailing list]].<br />
<br />
{| border="0" valign="top"<br />
| valign="top"|<br />
<br />
'''Northbridges'''<br />
<br />
{| border="0" style="font-size: smaller" valign="top"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Vendor<br />
! align="left" | Northbridge<br />
! align="left" | Status<br />
! align="left" | v2?<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Acer<br />
| M1631<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| Alpha<br />
| Tsunami<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| AMD76x<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| 430TX<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| 440BX<br />
| style="background:#dddddd" | ?<br />
| style="background:yellow" | Yes<sup>3</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| 440GX<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| 82815EP<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| 82830<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| 82860<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| E7500<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| E7501<br />
| style="background:#dddddd" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| E7505<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Micron<br />
| 21PAD<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| Motorola<br />
| MPC107<br />
| style="background:#dddddd" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC/AMD<br />
| GX1<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#dddddd" valign="top"<br />
| VIA<br />
| VT694<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| VIA<br />
| VT8601<br />
| style="background:#dddddd" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#dddddd" valign="top"<br />
| VIA<br />
| VT8623<br />
| style="background:#dddddd" | ?<br />
| style="background:lime" | Yes<br />
|}<br />
<br />
| valign="top"|<br />
<br />
'''Southbridges'''<br />
<br />
{| border="0" style="font-size: smaller" valign="top"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Vendor<br />
! align="left" | Southbridge<br />
! align="left" | Status<br />
! align="left" | v2?<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Acer<br />
| M1535<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Acer<br />
| M1543<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| AMD<br />
| AMD766<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| AMD<br />
| AMD768<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82801<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82801CA<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82801DB<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82870<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| PIIX4E<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#dddddd" valign="top"<br />
| NSC/AMD<br />
| CS5530<br />
| style="background:#dddddd" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#dddddd" valign="top"<br />
| NSC<br />
| SCX200<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#eeeeee" valign="top"<br />
| VIA<br />
| VT8231<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| VIA<br />
| VT8235<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| VIA<br />
| VT82C686<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| Winbond&trade;<br />
| W83C553<br />
| style="background:#dddddd" | ?<br />
| style="background:lime" | Yes<br />
|}<br />
<br />
| valign="top"|<br />
<br />
'''Super I/Os'''<br />
<br />
{| border="0" style="font-size: smaller" valign="top"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Vendor<br />
! align="left" | Super&nbsp;I/O<br />
! align="left" | Status<br />
! align="left" | v2?<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Acer<br />
| M1535<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| ITE<br />
| IT8671F<br />
| style="background:#dddddd" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC87309<br />
| style="background:lime" | OK<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC87351<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC97307<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC97317<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#dddddd" valign="top"<br />
| SiS<br />
| 950<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#eeeeee" valign="top"<br />
| SMC<br />
| FDC37B72X<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| SMC<br />
| FDC37B78X<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| SMC<br />
| FDC37B807<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| SMC<br />
| FDC37C669<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#eeeeee" valign="top"<br />
| SMC<br />
| FDC37C67X<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#eeeeee" valign="top"<br />
| SMC<br />
| FDC37N769<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| VIA<br />
| VT1211<br />
| style="background:#dddddd" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#dddddd" valign="top"<br />
| VIA<br />
| VT8231<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| VIA<br />
| VT82C686<br />
| style="background:#dddddd" | ?<br />
| style="background:yellow" | Yes<sup>2</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| Winbond&trade;<br />
| W83627HF<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Winbond&trade;<br />
| W83877TF<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Winbond&trade;<br />
| W83977EF<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<sup>1</sup><br />
|}<br />
<br />
| valign="top"|<br />
<br />
'''North-/Southbridges'''<br />
<br />
{| border="0" style="font-size: smaller" valign="top"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Vendor<br />
! align="left" | North/South<br />
! align="left" | Status<br />
! align="left" | v2?<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| SCX200<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| SiS<br />
| 540<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| SiS<br />
| 550<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| SiS<br />
| 630<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| SiS<br />
| 635<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| SiS<br />
| 730<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| SiS<br />
| 735<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#eeeeee" valign="top"<br />
| ST<br />
| STPC<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|}<br />
<br />
'''CPUs'''<br />
<br />
{| border="0" style="font-size: smaller"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Type<br />
! align="left" | CPU<br />
! align="left" | Status<br />
! align="left" | v2?<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Alpha<br />
| EV6<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| PowerPC<br />
| ?<br />
| style="background:#dddddd" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| x86<br />
| AMD<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| x86<br />
| Intel&reg;<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| x86<br />
| VIA<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|}<br />
<br />
|}<br />
<br />
<small><br />
<sup>1</sup> The W83977EF works fine with the W83977TF code in coreboot v2 (the pre-RAM serial part at least).<br /><br />
<sup>2</sup> Pre-RAM serial output works in coreboot v2, but the rest is not supported, yet.<br /><br />
<sup>3</sup> Work in progress.<br /><br />
</small><br />
<br />
__FORCETOC__</div>Eswierkhttps://www.coreboot.org/index.php?title=User:Eswierk&diff=6491User:Eswierk2008-05-22T15:09:26Z<p>Eswierk: </p>
<hr />
<div>== Ed Swierk ==<br />
<br />
I've been implementing firmware based on Coreboot on a number of AMD- and Intel-based boards for my employer, [http://www.arastra.com/ Arastra].<br />
<br />
=== Favorite Tools ===<br />
<br />
==== [http://www.eetools.com/index.cfm?fuseaction=product.display&Product_ID=3 EETools TopMax Flash Programmer] ====<br />
<br />
If you plan to do any serious firmware hacking, a flash programmer is an indispensible tool. For most x86-based boards, it's the only way to program a flash chip on a brand-new board with no existing firmware.<br />
<br />
The key to a good programmer is good software that's kept up-to-date with the programming algorithms and parameters for a variety of flash chips.<br />
<br />
After fighting a losing battle with a cheap no-name flash programmer for a few weeks, I managed to find the TopMax on a dusty shelf at my local Fry's Electronics (much to the surprise of the Fry's employee who told me they hadn't stocked programmers for years).<br />
<br />
EETools software supports zillions of different chips and posts updates regularly on their web site. It's reasonably well desgined, stable, and Just Works[tm].<br />
<br />
The only major downside is that the EETools software is Windows-only. This seems to be par for the course among professional-grade programmers; last time I checked, Linux support was available only for the more do-it-yourself "Willem" programmers. I just hook up the programmer to an old laptop running Windows. It may be possible to [http://wiki.jswindle.com/index.php/Wine_Config_File#Configuring_the_Parallel_Port run TopMax on Linux using Wine] but I have not tried it myself.</div>Eswierkhttps://www.coreboot.org/index.php?title=User:Eswierk&diff=6469User:Eswierk2008-05-20T15:10:08Z<p>Eswierk: /* EETools TopMax Flash Programmer */</p>
<hr />
<div>== Ed Swierk ==<br />
<br />
I've been implementing firmware based on Coreboot on a number of AMD- and Intel-based boards for my employer, [http://www.arastra.com/ Arastra].<br />
<br />
=== Favorite Tools ===<br />
<br />
==== [http://www.eetools.com/index.cfm?fuseaction=product.display&Product_ID=3 EETools TopMax Flash Programmer] ====<br />
<br />
If you plan to do any serious firmware hacking, a flash programmer is an indispensible tool. For most x86-based boards, it's the only way to program a flash chip on a brand-new board with no existing firmware.<br />
<br />
The key to a good programmer is good software that's kept up-to-date with the programming algorithms and parameters for a variety of flash chips.<br />
<br />
After fighting a losing battle with a cheap no-name flash programmer for a few weeks, I managed to find the TopMax on a dusty shelf at my local Fry's Electronics (much to the surprise of the Fry's employee who told me they hadn't stocked programmers for years).<br />
<br />
EETools software supports zillions of different chips and posts updates regularly on their web site. It's reasonably well desgined, stable, and Just Works[tm].<br />
<br />
The only major downside is that the EETools software is Windows-only. This seems to be par for the course among professional-grade programmers; last time I checked, Linux support was available only for the more do-it-yourself "Willem" programmers. I just hook up the programmer to an old laptop running Windows.</div>Eswierkhttps://www.coreboot.org/index.php?title=User:Eswierk&diff=6468User:Eswierk2008-05-20T15:08:49Z<p>Eswierk: </p>
<hr />
<div>== Ed Swierk ==<br />
<br />
I've been implementing firmware based on Coreboot on a number of AMD- and Intel-based boards for my employer, [http://www.arastra.com/ Arastra].<br />
<br />
=== Favorite Tools ===<br />
<br />
==== [http://www.eetools.com/index.cfm?fuseaction=product.display&Product_ID=3 EETools TopMax Flash Programmer] ====<br />
<br />
If you plan to do any serious firmware hacking, a flash programmer is an indispensible tool. It's the only way to program a flash chip on a brand-new board with no existing firmware.<br />
<br />
The key to a good programmer is good software that's kept up-to-date with the programming algorithms and parameters for a variety of flash chips.<br />
<br />
After fighting a losing battle with a cheap no-name flash programmer for a few weeks, I managed to find the TopMax on a dusty shelf at my local Fry's Electronics (much to the surprise of the Fry's employee who told me they hadn't stocked programmers for years).<br />
<br />
EETools software supports zillions of different chips and posts updates regularly on their web site. It's reasonably well desgined, stable, and Just Works[tm].<br />
<br />
The only major downside is that the EETools software is Windows-only. This seems to be par for the course among professional-grade programmers; last time I checked, Linux support was available only for the more do-it-yourself "Willem" programmers. I just hook up the programmer to an old laptop running Windows.</div>Eswierkhttps://www.coreboot.org/index.php?title=User:Eswierk&diff=6467User:Eswierk2008-05-20T15:07:17Z<p>Eswierk: Add blurb about flash programmer</p>
<hr />
<div>== Ed Swierk ==<br />
<br />
I've been implementing firmware based on Coreboot on a number of AMD- and Intel-based boards for my employer, [http://www.arastra.com/ Arastra].<br />
<br />
=== Favorite Tools ===<br />
<br />
==== Flash Programmer ====<br />
<br />
If you plan to do any serious firmware hacking, a flash programmer is an indispensible tool. It's the only way to program a flash chip on a brand-new board with no existing firmware.<br />
<br />
The key to a good programmer is good software that's kept up-to-date with the programming algorithms and parameters for a variety of flash chips.<br />
<br />
[http://www.eetools.com/index.cfm?fuseaction=product.display&Product_ID=3 EETools TopMax flash/EEPROM programmer] is the one I use. After fighting a losing battle with a cheap no-name flash programmer for a few weeks, I managed to find the TopMax on a dusty shelf at my local Fry's Electronics (much to the surprise of the Fry's employee who told me they hadn't stocked programmers for years).<br />
<br />
EETools software supports zillions of different chips and posts updates regularly on their web site. It's reasonably well desgined, stable, and Just Works[tm].<br />
<br />
The only major downside is that the EETools software is Windows-only. This seems to be par for the course among professional-grade programmers; last time I checked, Linux support was available only for the more do-it-yourself "Willem" programmers. I just hook up the programmer to an old laptop running Windows.</div>Eswierkhttps://www.coreboot.org/index.php?title=Supported_Chipsets_and_Devices&diff=5976Supported Chipsets and Devices2008-03-17T04:14:18Z<p>Eswierk: Add Intel 3100 devices</p>
<hr />
<div>Note: If a device is not supported by coreboot v2, try [[Supported_Chipsets_and_Devices#Devices_supported_in_coreboot_v1|checking coreboot v1]] for support. Do '''not''' attempt to use coreboot v3 &mdash; this is an early development version which is not ready for production use, yet.<br />
<br />
See also [[Supported Motherboards]].<br />
<br />
== Devices supported in coreboot v3 ==<br />
<br />
<div style="color: #ff0000">coreboot v3 is an alpha-stage development version of coreboot and is not meant for production use, yet!</div><br />
<br />
{| border="0" valign="top"<br />
| valign="top"|<br />
<br />
'''Northbridges'''<br />
<br />
{| border="0" style="font-size: smaller" valign="top"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Vendor<br />
! align="left" | Northbridge<br />
! align="left" | Status<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| Geode&nbsp;LX<br />
| style="background:lime" | OK<br />
<br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| 82443BX&nbsp;(440BX)<br />
| style="background:orange" | WIP<br />
<br />
|}<br />
<br />
| valign="top"|<br />
<br />
'''Southbridges'''<br />
<br />
{| border="0" style="font-size: smaller" valign="top"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Vendor<br />
! align="left" | Southbridge<br />
! align="left" | Status<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| CS5536<br />
| style="background:lime" | OK<br />
<br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| 82371EB&nbsp;(PIIX4E)<br />
| style="background:orange" | WIP<br />
<br />
|}<br />
<br />
| valign="top"|<br />
<br />
'''Super I/Os'''<br />
<br />
{| border="0" style="font-size: smaller" valign="top"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Vendor<br />
! align="left" | Super&nbsp;I/O<br />
! align="left" | Status<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Fintek<br />
| F71805F<br />
| style="background:orange" | WIP<br />
<br />
|- bgcolor="#dddddd" valign="top"<br />
| Winbond&trade;<br />
| W83627HF<br />
| style="background:lime" | OK<br />
<br />
|}<br />
<br />
| valign="top"|<br />
<br />
'''CPUs'''<br />
<br />
{| border="0" style="font-size: smaller"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Type<br />
! align="left" | CPU<br />
! align="left" | Status<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Generic<br />
| i586<br />
| style="background:orange" | WIP<br />
<br />
|- bgcolor="#dddddd" valign="top"<br />
| AMD<br />
| Geode LX<br />
| style="background:lime" | OK<br />
<br />
|}<br />
<br />
|}<br />
<br />
== Devices supported in coreboot v2 ==<br />
<br />
{| border="0" valign="top"<br />
| valign="top"|<br />
<br />
'''Northbridges'''<br />
<br />
{| border="0" style="font-size: smaller" valign="top"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Vendor<br />
! align="left" | Northbridge<br />
! align="left" | Status<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| K8<br />
| style="background: lime " | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| GX1<br />
| style="background:lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| GX&nbsp;(GX2)<br />
| style="background: lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| LX<br />
| style="background: lime" | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| IBM<br />
| CPC710<br />
| style="background:#dddddd" | ?<br />
|- bgcolor="#dddddd" valign="top"<br />
| IBM<br />
| CPC925<br />
| style="background:#dddddd" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| E7501<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| E7520<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| E7525<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82810<br />
| style="background:yellow" | WIP<sup>9</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82830<br />
| style="background:yellow" | WIP<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82443BX&nbsp;(440BX)<br />
| style="background:yellow" | WIP<sup>11</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82855PM<br />
| style="background:red" | WIP<sup>2</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 3100<br />
| style="background:lime" | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| Motorola<br />
| MPC107<br />
| style="background:#dddddd" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| SiS<br />
| SiS761GX<br />
| style="background:lime" | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| VIA<br />
| VT8601<br />
| style="background:yellow" | WIP<br />
|- bgcolor="#dddddd" valign="top"<br />
| VIA<br />
| VT8623<br />
| style="background:lime" | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| VIA<br />
| K8T890<br />
| style="background:lime" | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| VIA<br />
| K8M890<br />
| style="background:yellow" | WIP<br />
|- bgcolor="#dddddd" valign="top"<br />
| VIA<br />
| CN700<br />
| style="background:lime" | OK<sup>14</sup><br />
|}<br />
<br />
| valign="top"|<br />
<br />
'''Southbridges'''<br />
<br />
{| border="0" style="font-size: smaller" valign="top"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Vendor<br />
! align="left" | Southbridge<br />
! align="left" | Status<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| AMD8111<br />
| style="background: lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| AMD8131<br />
| style="background: lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| AMD8132<br />
| style="background: lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| AMD8151<br />
| style="background: lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| CS5530/CS5530A<br />
| style="background:yellow" | WIP<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| CS5535<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| CS5536<br />
| style="background: lime " | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| Broadcom<br />
| BCM5780<br />
| style="background:#dddddd" | ?<br />
|- bgcolor="#dddddd" valign="top"<br />
| Broadcom<br />
| BCM5785<br />
| style="background:#dddddd" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| EBS6300<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82371EB&nbsp;(PIIX4E)<br />
| style="background:yellow" | WIP<sup>6</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82801AA/AB&nbsp;(ICH/ICH0)<br />
| style="background:lime" | OK<sup>10</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82801BA/BAM&nbsp;(ICH2/ICH2-M)<br />
| style="background:lime" | OK<sup>10</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82801CA/CAM&nbsp;(ICH3-S/ICH3-M)<br />
| style="background:lime" | OK<sup>10</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82801DB/DBL/DBM<br/>(ICH4/ICH4-L/ICH4-M)<br />
| style="background:lime" | OK<sup>10</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82801EB/ER&nbsp;(ICH5/ICH5R)<br />
| style="background:lime" | OK<sup>10</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82870<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| PXHD<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 3100<br />
| style="background:lime" | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| NVIDIA<br />
| CK804<br />
| style="background:lime" | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| NVIDIA<br />
| MCP55<br />
| style="background:lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Ricoh<br />
| RL5C476<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#dddddd" valign="top"<br />
| SiS<br />
| SiS966(L)<br />
| style="background:lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| VIA<br />
| VT8231<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| VIA<br />
| VT8235<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| VIA<br />
| VT8237R<br />
| style="background:lime" | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| VIA<br />
| VT8237A<br />
| style="background:yellow" | WIP<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Winbond&trade;<br />
| W83C553<br />
| style="background:#dddddd" | ?<br />
|}<br />
<br />
| valign="top"|<br />
<br />
'''Super I/Os'''<br />
<br />
{| border="0" style="font-size: smaller" valign="top"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Vendor<br />
! align="left" | Super&nbsp;I/O<br />
! align="left" | Status<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| ASUS<br />
| A8000<br />
| style="background:lime" | <sup>12</sup>, <sup>13</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| Fintek<br />
| F71805F/FG<br />
| style="background:yellow" | OK <sup>5</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| ITE<br />
| IT8661F<br />
| style="background:yellow" | OK <sup>1</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| ITE<br />
| IT8671F<br />
| style="background:yellow" | OK <sup>1</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| ITE<br />
| IT8673F<br />
| style="background:yellow" | OK <sup>1</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| ITE<br />
| IT8705F<br />
| style="background:yellow" | OK <sup>1</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| ITE<br />
| IT8712F<br />
| style="background:lime" | OK <sup>8</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| ITE<br />
| IT8716F<br />
| style="background:lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| ITE<br />
| IT8718F<br />
| style="background:yellow" | OK <sup>1</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| 3100<br />
| style="background:lime" | OK <sup>15</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC8374<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC87309<br />
| style="background:yellow" | OK <sup>5</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC87351<br />
| style="background:lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC87360<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC87366<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC87417<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC87427<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC97307 <br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC97317<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| FDC37M70x<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| FDC37B80x<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| FDC37B78x<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| FDC37B72x<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| FDC37B81x<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| FDC37M60x<br />
| style="background:lime" | OK<sup>3</sup>,<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| LPC47B27x<br />
| style="background:lime" | OK<sup>7</sup>,<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| LPC47M10x<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| LPC47M112<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| LPC47M13x<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| LPC47M15x<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| LPC47M192<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| LPC47B397<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| DME1737<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| SCH5307<br />
| style="background:lime" | OK<sup>12</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| SMSC&reg;<br />
| LPC47N217<br />
| style="background:#dddddd" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| VIA<br />
| VT1211<br />
| style="background:#eeeeee" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| VIA<br />
| VT82C686(A/B)<br />
| style="background:yellow" | OK<sup>5</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| Winbond&trade;<br />
| W83627EHG/EHF<br />
| style="background:#dddddd" | ?<br />
|- bgcolor="#dddddd" valign="top"<br />
| Winbond&trade;<br />
| W83627HF<br />
| style="background:#dddddd" | ?<br />
|- bgcolor="#dddddd" valign="top"<br />
| Winbond&trade;<br />
| W83627THF<br />
| style="background:#dddddd" | ?<br />
|- bgcolor="#dddddd" valign="top"<br />
| Winbond&trade;<br />
| W83977F<br />
| style="background:lime" | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| Winbond&trade;<br />
| W83977TF<br />
| style="background:lime" | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| Winbond&trade;<br />
| W83977EF<br />
| style="background:lime" | OK<sup>4</sup><br />
|}<br />
<br />
| valign="top"|<br />
<br />
'''CPUs'''<br />
<br />
{| border="0" style="font-size: smaller"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Type<br />
! align="left" | CPU<br />
! align="left" | Status<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| x86<br />
| AMD<br />
| style="background:lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| x86<br />
| Intel&reg;<br />
| style="background:lime" | OK<br />
|- bgcolor="#eeeeee" valign="top"<br />
| x86<br />
| VIA<br />
| style="background:lime" | OK<br />
|- bgcolor="#dddddd" valign="top"<br />
| PowerPC<br />
| MPC74xx<br />
| style="background:#dddddd" | ?<br />
|- bgcolor="#dddddd" valign="top"<br />
| PowerPC<br />
| PPC4xx<br />
| style="background:#dddddd" | ?<br />
|- bgcolor="#dddddd" valign="top"<br />
| PowerPC<br />
| PPC7xx<br />
| style="background:#dddddd" | ?<br />
|- bgcolor="#dddddd" valign="top"<br />
| PowerPC<br />
| PPC970<br />
| style="background:#dddddd" | ?<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Emulated<br />
| QEMU<br />
| style="background:lime" | OK<br />
|}<br />
<br />
'''SOCs'''<br />
<br />
{| border="0" style="font-size: smaller" valign="top"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Vendor<br />
! align="left" | SOC<br />
! align="left" | Status<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| Elan SC520<br />
| style="background: lime" | OK<br />
|}<br />
<br />
|}<br />
<br />
<small><br />
<sup>1</sup> Serial output should work for all ITE Super I/Os (but is only tested on the IT8671F and IT8712F). The rest ''could'' work, but is completely untested.<br /><br />
<sup>2</sup> Work in progress.<br /><br />
<sup>3</sup> Serial output on serial port 1 is tested and works, the rest probably not yet (tested on FDC37M602).<br /><br />
<sup>4</sup> The W83977EF works fine with the W83977TF code (the pre-RAM serial part at least).<br /><br />
<sup>5</sup> Pre-RAM serial output works fine, but nothing else, yet.<br /><br />
<sup>6</sup> IDE support is available and tested. SMBus support may work, but is untested. USB support is on our TODO list.<br /><br />
<sup>7</sup> Pre-RAM serial output [http://www.linuxbios.org/pipermail/linuxbios/2007-May/021247.html works fine], everything else is untested.<br /><br />
<sup>8</sup> [http://www.linuxbios.org/pipermail/linuxbios/2007-May/021623.html Works fine] mostly, but support for more obscure features (floppy, game port, MIDI, IR) might need more work.<br /><br />
<sup>9</sup> Works mostly, but currently there are some limitations as to which RAM DIMMs can be used.<br /><br />
<sup>10</sup> These southbridges should all be supported by the (experimental) new code in src/southbridge/intel/i82801xx/ now. Please test this code and use this code for all new ICH* based boards. There's still some old code for the southbridges, but that should not be used anymore.<br /><br />
<sup>11</sup> Sort of works, but the settings are hardcoded for the Tyan S1846. This will be fixed soonish.<br /><br />
<sup>12</sup> All these Super I/O chips should be supported by the "smscsuperio" driver. Only the ASUS A8000 is tested, though. The floppy disk controller, the parallel port, the serial ports (COM1 + COM2), and the keyboard should work for all chips. More advanced stuff may need more work, though.<br /><br />
<sup>13</sup> The ASUS A8000 Super I/O seems to be a rebranded SMSC DME1737.<br /><br />
<sup>14</sup> Working but not fully tested. Works with single DIMM DDR2.<br /><br />
<sup>15</sup> The Intel 3100 UARTs and watchdog timer are integrated as a Super I/O-like device; only the UARTs have been tested so far.<br /><br />
</small><br />
<br />
== Devices supported in coreboot v1 ==<br />
<br />
Not all devices have been ported from coreboot v1 to coreboot v2, yet (check "v2?" field). If you want to work on such a port contact us on the [[Mailinglist|mailing list]].<br />
<br />
{| border="0" valign="top"<br />
| valign="top"|<br />
<br />
'''Northbridges'''<br />
<br />
{| border="0" style="font-size: smaller" valign="top"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Vendor<br />
! align="left" | Northbridge<br />
! align="left" | Status<br />
! align="left" | v2?<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Acer<br />
| M1631<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| Alpha<br />
| Tsunami<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#eeeeee" valign="top"<br />
| AMD<br />
| AMD76x<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| 430TX<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| 440BX<br />
| style="background:#dddddd" | ?<br />
| style="background:yellow" | Yes<sup>3</sup><br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| 440GX<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| 82815EP<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| 82830<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| 82860<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| E7500<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| E7501<br />
| style="background:#dddddd" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#dddddd" valign="top"<br />
| Intel&reg;<br />
| E7505<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Micron<br />
| 21PAD<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| Motorola<br />
| MPC107<br />
| style="background:#dddddd" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC/AMD<br />
| GX1<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#dddddd" valign="top"<br />
| VIA<br />
| VT694<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| VIA<br />
| VT8601<br />
| style="background:#dddddd" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#dddddd" valign="top"<br />
| VIA<br />
| VT8623<br />
| style="background:#dddddd" | ?<br />
| style="background:lime" | Yes<br />
|}<br />
<br />
| valign="top"|<br />
<br />
'''Southbridges'''<br />
<br />
{| border="0" style="font-size: smaller" valign="top"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Vendor<br />
! align="left" | Southbridge<br />
! align="left" | Status<br />
! align="left" | v2?<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Acer<br />
| M1535<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Acer<br />
| M1543<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| AMD<br />
| AMD766<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| AMD<br />
| AMD768<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82801<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82801CA<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82801DB<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| 82870<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Intel&reg;<br />
| PIIX4E<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#dddddd" valign="top"<br />
| NSC/AMD<br />
| CS5530<br />
| style="background:#dddddd" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#dddddd" valign="top"<br />
| NSC<br />
| SCX200<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#eeeeee" valign="top"<br />
| VIA<br />
| VT8231<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| VIA<br />
| VT8235<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| VIA<br />
| VT82C686<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| Winbond&trade;<br />
| W83C553<br />
| style="background:#dddddd" | ?<br />
| style="background:lime" | Yes<br />
|}<br />
<br />
| valign="top"|<br />
<br />
'''Super I/Os'''<br />
<br />
{| border="0" style="font-size: smaller" valign="top"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Vendor<br />
! align="left" | Super&nbsp;I/O<br />
! align="left" | Status<br />
! align="left" | v2?<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Acer<br />
| M1535<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| ITE<br />
| IT8671F<br />
| style="background:#dddddd" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC87309<br />
| style="background:lime" | OK<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC87351<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC97307<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| PC97317<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#dddddd" valign="top"<br />
| SiS<br />
| 950<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#eeeeee" valign="top"<br />
| SMC<br />
| FDC37B72X<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| SMC<br />
| FDC37B78X<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| SMC<br />
| FDC37B807<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| SMC<br />
| FDC37C669<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#eeeeee" valign="top"<br />
| SMC<br />
| FDC37C67X<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#eeeeee" valign="top"<br />
| SMC<br />
| FDC37N769<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| VIA<br />
| VT1211<br />
| style="background:#dddddd" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#dddddd" valign="top"<br />
| VIA<br />
| VT8231<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| VIA<br />
| VT82C686<br />
| style="background:#dddddd" | ?<br />
| style="background:yellow" | Yes<sup>2</sup><br />
|- bgcolor="#eeeeee" valign="top"<br />
| Winbond&trade;<br />
| W83627HF<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Winbond&trade;<br />
| W83877TF<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Winbond&trade;<br />
| W83977EF<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<sup>1</sup><br />
|}<br />
<br />
| valign="top"|<br />
<br />
'''North-/Southbridges'''<br />
<br />
{| border="0" style="font-size: smaller" valign="top"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Vendor<br />
! align="left" | North/South<br />
! align="left" | Status<br />
! align="left" | v2?<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| NSC<br />
| SCX200<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| SiS<br />
| 540<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| SiS<br />
| 550<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| SiS<br />
| 630<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| SiS<br />
| 635<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| SiS<br />
| 730<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| SiS<br />
| 735<br />
| style="background:#dddddd" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#eeeeee" valign="top"<br />
| ST<br />
| STPC<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|}<br />
<br />
'''CPUs'''<br />
<br />
{| border="0" style="font-size: smaller"<br />
|- bgcolor="#6699dd"<br />
! align="left" | Type<br />
! align="left" | CPU<br />
! align="left" | Status<br />
! align="left" | v2?<br />
<br />
|- bgcolor="#eeeeee" valign="top"<br />
| Alpha<br />
| ?<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|- bgcolor="#dddddd" valign="top"<br />
| PowerPC<br />
| ?<br />
| style="background:#dddddd" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| x86<br />
| AMD<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| x86<br />
| Intel&reg;<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| x86<br />
| VIA<br />
| style="background:#eeeeee" | ?<br />
| style="background:lime" | Yes<br />
|- bgcolor="#eeeeee" valign="top"<br />
| x86<br />
| EV6 (?)<br />
| style="background:#eeeeee" | ?<br />
| style="background:red" | No<br />
|}<br />
<br />
|}<br />
<br />
<small><br />
<sup>1</sup> The W83977EF works fine with the W83977TF code in coreboot v2 (the pre-RAM serial part at least).<br /><br />
<sup>2</sup> Pre-RAM serial output works in coreboot v2, but the rest is not supported, yet.<br /><br />
<sup>3</sup> Work in progress.<br /><br />
</small><br />
<br />
__FORCETOC__</div>Eswierkhttps://www.coreboot.org/index.php?title=QEMU_Build_Tutorial&diff=3819QEMU Build Tutorial2007-02-14T01:59:09Z<p>Eswierk: </p>
<hr />
<div>=== Introduction ===<br />
<br />
If you don't have a mainboard supported by LinuxBIOS don't worry: Qemu can help you to emulate one.<br />
<br />
This nice tutorial was written by Alan Carvalho de Assis <acassis@gmail.com>, with additions by Ed Swierk <eswierk@arastra.com> (but please use the LinuxBIOS [[Mailinglist]] rather than emailing the authors directly).<br />
<br />
While there are many ways to use LinuxBIOS to load and run a Linux kernel, this tutorial covers two of the most common:<br />
<br />
* LinuxBIOS with FILO as payload, using FILO to load a Linux kernel (and optional initramfs) from a hard disk image. This approach involves a bit more mechanism (it relies on FILO's built-in disk and filesystem drivers) but it produces a tiny LinuxBIOS image.<br />
* LinuxBIOS with a Linux kernel (and optional initramfs) as payload. This cuts FILO out of the picture, but the main challenge with is approach is squeezing the resulting LinuxBIOS image into Qemu's BIOS ROM area (currently 2 MB, but easy to extend by patching Qemu).<br />
<br />
=== Requirements === <br />
<br />
You need the following software packages:<br />
<br />
* [http://linuxbios.org/index.php/Download_LinuxBIOS LinuxBIOSv2] r2405 or greater<br />
* [http://qemu.org/download.html Qemu] 0.9.0 or greater<br />
* [http://linuxbios.org/index.php/FILO FILO] 0.4.2 or greater (if using FILO)<br />
* [ftp://ftp.lnxi.com/pub/mkelfImage mkelfImage] 2.7 or greater (if not using FILO)<br />
<br />
plus a Linux kernel and root filesystem and a working development environment (make, gcc, etc.). gcc 4.0.x and 4.1.x are known to work for all packages except Qemu, which requires gcc 3.x.<br />
<br />
=== Building or finding a Linux kernel ===<br />
<br />
If you are using FILO, you can simply grab a Linux kernel and initramfs from your favorite distribution.<br />
<br />
Otherwise, you will probably need to build a kernel and initramfs from scratch, ensuring that the final LinuxBIOS image does not exceed Qemu's BIOS size limit. Building the kernel and initramfs is beyond the scope of this tutorial; how you configure them depends on your application.<br />
<br />
If you plan to use kexec to chain-boot another Linux kernel, tools from these projects can help automate the process of generating a kernel and initramfs:<br />
* [http://kboot.sourceforge.net/ kboot]<br />
* [http://wiki.laptop.org/go/Building_LinuxBIOS OLPC buildrom]<br />
<br />
=== Building a FILO payload ===<br />
<br />
If you plan to build your Linux kernel and root filesystem directly into LinuxBIOS, you can skip this section.<br />
<br />
Download FILO (I used filo-0.4.2.tar.bz2), decompress it, and cd to the created directory.<br />
<br />
First invocation of make creates the default Config file.<br />
$ make<br />
<br />
Edit this file as you like. The default configuration worked for me. <br />
$ vi Config <br />
<br />
Run make again to create filo.elf, the ELF FILO image. <br />
$ make <br />
<br />
You will use this file (filo.elf) as the LinuxBIOS payload later on.<br />
<br />
=== Building a Linux kernel payload ===<br />
<br />
If you are using FILO, skip this section.<br />
<br />
Download mkelfImage (I used mkelfImage-2.7.tar.gz), decompress it, and cd to the created directory.<br />
<br />
Configure and build the mkelfImage binary.<br />
$ ./configure<br />
$ make<br />
<br />
Now use mkelfImage to convert your Linux kernel image (vmlinuz) and initramfs (initrd) into a usable LinuxBIOS payload (linux.elf):<br />
$ mkelfImage --append="console=ttyS0" --initrd=initrd vmlinuz linux.elf<br />
<br />
=== Building LinuxBIOS ===<br />
<br />
Download the LinuxBIOS source code (I used LinuxBIOSv2-2405) and extract it. <br />
<br />
Change to directory targets/emulation/qemu-i386 and modify Config.lb:<br />
* change payload to point to your payload (filo.elf or linux.elf)<br />
* if you are using a Linux payload, increase the value of option ROM_SIZE to 2048*1024 (2 MB)<br />
<br />
Return to targets directory and execute: <br />
$ ./buildtarget emulation/qemu-i386 <br />
<br />
Go to targets/emulation/qemu-i386/qemu-i386 and execute: <br />
$ make <br />
<br />
This creates the LinuxBIOS image (qemu-bios.rom). Copy and rename this file to bios.bin in your home directory.<br />
<br />
=== Building Qemu ===<br />
<br />
If you plan to run Qemu version 0.9.0, you will have to build Qemu from source after applying a couple of patches. (Later versions of Qemu might incorporate these patches, allowing you to run them unmodified; hopefully someone will be kind enough to update this tutorial if this happens.)<br />
<br />
Download the Qemu source code (I used qemu-0.9.0.tar.gz) and extract it.<br />
<br />
Download the two patches and save them to the Qemu source directory:<br />
* [http://xenon.stanford.edu/~eswierk/misc/qemu-linuxbios/qemu-isa-bios-ram.patch qemu-isa-bios-ram.patch]<br />
* [http://xenon.stanford.edu/~eswierk/misc/qemu-linuxbios/qemu-piix-ram-size.patch qemu-piix-ram-size.patch]<br />
<br />
Enter the Qemu source directory and apply the patches:<br />
$ patch -p1 <qemu-isa-bios-ram.patch<br />
$ patch -p1 <qemu-piix-ram-size.patch<br />
<br />
Configure and make Qemu (use the --cc option if your default gcc is newer than version 3.4):<br />
$ ./configure --cc=gcc34 --target-list=i386-softmmu<br />
$ make<br />
<br />
The Qemu binary is stored in the i386-softmmu directory.<br />
<br />
=== Creating a hard disk image ===<br />
<br />
If you are using FILO, you must create a hard disk image containing the Linux kernel and optional initramfs that FILO loads.<br />
<br />
Whether or not you use FILO, you may also wish to populate the disk image with the root filesystem of whatever Linux distribution you want to run.<br />
<br />
Create an empty disk image:<br />
$ qemu-img create -f raw disk.img 200M<br />
<br />
Format it:<br />
$ mkfs.ext2 -F disk.img <br />
<br />
The remaining steps must be performed as root. Create a temporary mountpoint and mount the image:<br />
# mkdir /mnt/rootfs<br />
# mount -o loop disk.img /mnt/rootfs<br />
<br />
Create a boot directory and copy your Linux kernel (vmlinuz) and initramfs (initrd) to it:<br />
# mkdir /mnt/rootfs/boot<br />
# cp vmlinuz vmlinuz<br />
# cp initrd initrd<br />
<br />
At this point, you can also copy a complete root filesystem to the disk image. <br />
# cp -R /* /mnt/rootfs <br />
<br />
Alternatively, with Debian you can use the debootstrap command to create a basic root filesystem:<br />
# debootstrap --arch i386 sarge /mnt/rootfs http://ftp.debian.org/debian/ <br />
<br />
If you are using a debootstrap filesystem, open the file /mnt/rootfs/etc/inittab and change runlevel to level 1:<br />
id:1:initdefault: <br />
<br />
cd out of /mnt/rootfs and umount it:<br />
# umount /mnt/rootfs<br />
<br />
Exit from the root account:<br />
# exit<br />
<br />
=== Starting LinuxBIOS in Qemu ===<br />
<br />
Execute Qemu using the following parameters:<br />
$ qemu -L ~ -hda disk.img -nographic<br />
<br />
The -L option tells Qemu to look for bios.bin in your HOME directory. -nographic suppresses the graphical VGA display and connects the virtual machine's serial port to your console.<br />
<br />
You should now see all sorts of interesting LinuxBIOS messages, followed by Linux kernel boot messages or a FILO prompt.<br />
<br />
If you are using FILO, enter at the boot: prompt:<br />
boot: hda:/boot/vmlinuz root=/dev/hda initrd=/boot/initrd console=ttyS0<br />
[[Image:Example.jpg]]</div>Eswierkhttps://www.coreboot.org/index.php?title=QEMU_Build_Tutorial&diff=3818QEMU Build Tutorial2007-02-14T01:48:44Z<p>Eswierk: Update for qemu 0.9.0</p>
<hr />
<div>=== Introduction ===<br />
<br />
If you don't have a mainboard supported by LinuxBIOS don't worry: Qemu can help you to emulate one.<br />
<br />
This nice tutorial was written by Alan Carvalho de Assis <acassis@gmail.com>, with additions by Ed Swierk <eswierk@arastra.com> (but please use the LinuxBIOS [[Mailinglist]] rather than emailing the authors directly).<br />
<br />
While there are many ways to use LinuxBIOS to load and run a Linux kernel, this tutorial covers two of the most common:<br />
<br />
* LinuxBIOS with FILO as payload, using FILO to load a Linux kernel (and optional initramfs) from a hard disk image. This approach involves a bit more mechanism (it relies on FILO's built-in disk and filesystem drivers) but it produces a tiny LinuxBIOS image.<br />
* LinuxBIOS with a Linux kernel (and optional initramfs) as payload. This cuts FILO out of the picture, but the main challenge with is approach is squeezing the resulting LinuxBIOS image into Qemu's BIOS ROM area (currently 2 MB, but easy to extend by patching Qemu).<br />
<br />
=== Requirements === <br />
<br />
You need the following software packages:<br />
<br />
* [http://linuxbios.org/index.php/Download_LinuxBIOS LinuxBIOSv2] r2405 or greater<br />
* [http://qemu.org/download.html Qemu] 0.9.0 or greater<br />
* [http://linuxbios.org/index.php/FILO FILO] 0.4.2 or greater (if using FILO)<br />
* [ftp://ftp.lnxi.com/pub/mkelfImage mkelfImage] 2.7 or greater (if not using FILO)<br />
<br />
plus a Linux kernel and root filesystem and a working development environment (make, gcc, etc.). gcc 4.0.x and 4.1.x are known to work for all packages except Qemu, which requires gcc 3.x.<br />
<br />
=== Building or finding a Linux kernel ===<br />
<br />
If you are using FILO, you can simply grab a Linux kernel and initramfs from your favorite distribution.<br />
<br />
Otherwise, you will probably need to build a kernel and initramfs from scratch, ensuring that the final LinuxBIOS image does not exceed Qemu's BIOS size limit. Building the kernel and initramfs is beyond the scope of this tutorial; how you configure them depends on your application.<br />
<br />
If you plan to use kexec to chain-boot another Linux kernel, tools from these projects can help automate the process of generating a kernel and initramfs:<br />
* [http://kboot.sourceforge.net/ kboot]<br />
* [http://wiki.laptop.org/go/Building_LinuxBIOS OLPC buildrom]<br />
<br />
=== Building a FILO payload ===<br />
<br />
If you plan to build your Linux kernel and root filesystem directly into LinuxBIOS, you can skip this section.<br />
<br />
Download FILO (I used filo-0.4.2.tar.bz2), decompress it, and cd to the created directory.<br />
<br />
First invocation of make creates the default Config file.<br />
$ make<br />
<br />
Edit this file as you like. The default configuration worked for me. <br />
$ vi Config <br />
<br />
Run make again to create filo.elf, the ELF FILO image. <br />
$ make <br />
<br />
You will use this file (filo.elf) as the LinuxBIOS payload later on.<br />
<br />
=== Building a Linux kernel payload ===<br />
<br />
If you are using FILO, skip this section.<br />
<br />
Download mkelfImage (I used mkelfImage-2.7.tar.gz), decompress it, and cd to the created directory.<br />
<br />
Configure and build the mkelfImage binary.<br />
$ ./configure<br />
$ make<br />
<br />
Now use mkelfImage to convert your Linux kernel image (vmlinuz) and initramfs (initrd) into a usable LinuxBIOS payload (linux.elf):<br />
$ mkelfImage --append="console=ttyS0" --initrd=initrd vmlinuz linux.elf<br />
<br />
=== Building LinuxBIOS ===<br />
<br />
Download the LinuxBIOS source code (I used LinuxBIOSv2-2405) and extract it. <br />
<br />
Change to directory targets/emulation/qemu-i386 and modify Config.lb:<br />
* change payload to point to your payload (filo.elf or linux.elf)<br />
* if you are using a Linux payload, increase the value of option ROM_SIZE to 2048*1024 (2 MB)<br />
<br />
Return to targets directory and execute: <br />
$ ./buildtarget emulation/qemu-i386 <br />
<br />
Go to targets/emulation/qemu-i386/qemu-i386 and execute: <br />
$ make <br />
<br />
This creates the LinuxBIOS image (qemu-bios.rom). Copy and rename this file to bios.bin in your home directory.<br />
<br />
=== Building Qemu ===<br />
<br />
If you plan to run Qemu version 0.9.0, you will have to build Qemu from source after applying a couple of patches. (Later versions of Qemu might incorporate these patches, allowing you to run them unmodified; hopefully someone will be kind enough to update this tutorial if this happens.)<br />
<br />
Download the Qemu source code (I used qemu-0.9.0.tar.gz) and extract it.<br />
<br />
Download the two patches and save them to the Qemu source directory:<br />
* [[Media:qemu-isa-bios-ram.patch|qemu-isa-bios-ram.patch]]<br />
* [[Media:qemu-piix-ram-size.patch|qemu-piix-ram-size.patch]]<br />
<br />
Enter the Qemu source directory and apply the patches:<br />
$ patch -p1 <qemu-isa-bios-ram.patch<br />
$ patch -p1 <qemu-piix-ram-size.patch<br />
<br />
Configure and make Qemu (use the --cc option if your default gcc is newer than version 3.4):<br />
$ ./configure --cc=gcc34 --target-list=i386-softmmu<br />
$ make<br />
<br />
The Qemu binary is stored in the i386-softmmu directory.<br />
<br />
=== Creating a hard disk image ===<br />
<br />
If you are using FILO, you must create a hard disk image containing the Linux kernel and optional initramfs that FILO loads.<br />
<br />
Whether or not you use FILO, you may also wish to populate the disk image with the root filesystem of whatever Linux distribution you want to run.<br />
<br />
Create an empty disk image:<br />
$ qemu-img create -f raw disk.img 200M<br />
<br />
Format it:<br />
$ mkfs.ext2 -F disk.img <br />
<br />
The remaining steps must be performed as root. Create a temporary mountpoint and mount the image:<br />
# mkdir /mnt/rootfs<br />
# mount -o loop disk.img /mnt/rootfs<br />
<br />
Create a boot directory and copy your Linux kernel (vmlinuz) and initramfs (initrd) to it:<br />
# mkdir /mnt/rootfs/boot<br />
# cp vmlinuz vmlinuz<br />
# cp initrd initrd<br />
<br />
At this point, you can also copy a complete root filesystem to the disk image. <br />
# cp -R /* /mnt/rootfs <br />
<br />
Alternatively, with Debian you can use the debootstrap command to create a basic root filesystem:<br />
# debootstrap --arch i386 sarge /mnt/rootfs http://ftp.debian.org/debian/ <br />
<br />
If you are using a debootstrap filesystem, open the file /mnt/rootfs/etc/inittab and change runlevel to level 1:<br />
id:1:initdefault: <br />
<br />
cd out of /mnt/rootfs and umount it:<br />
# umount /mnt/rootfs<br />
<br />
Exit from the root account:<br />
# exit<br />
<br />
=== Starting LinuxBIOS in Qemu ===<br />
<br />
Execute Qemu using the following parameters:<br />
$ qemu -L ~ -hda disk.img -nographic<br />
<br />
The -L option tells Qemu to look for bios.bin in your HOME directory. -nographic suppresses the graphical VGA display and connects the virtual machine's serial port to your console.<br />
<br />
You should now see all sorts of interesting LinuxBIOS messages, followed by Linux kernel boot messages or a FILO prompt.<br />
<br />
If you are using FILO, enter at the boot: prompt:<br />
boot: hda:/boot/vmlinuz root=/dev/hda initrd=/boot/initrd console=ttyS0</div>Eswierkhttps://www.coreboot.org/index.php?title=EHCI_Debug_Port&diff=3680EHCI Debug Port2006-11-19T22:42:17Z<p>Eswierk: Added PCI device ID of MCP55 EHCI USB controller</p>
<hr />
<div>Serial ports have been the primary means of early debugging of new LinuxBIOS ports. New hardware doesn't always have a serial port and another method for early debugging is needed.<br />
<br />
The '''EHCI Debug Port''' is an optional capability of EHCI controllers. All USB2 host controllers are EHCI controllers. The debug port provides a mode of operation that requires neither RAM nor a full USB stack. A handful of registers in the EHCI controller PCI configuration and BAR address space are used for all communication. All three transfer types are supported (OUT/SETUP/IN) but transfers can only be a maximum of 8 bytes and only one specific physical USB port can be used. A Debug Class compliant device is the only supported USB function that can be communicated with.<br />
<br />
== Debug Class Device ==<br />
While the Debug Class functional spec describes a device communicating over USB also with the debugging host (aka remote) it would be very possible to make a Debug Class device with a regular serial port on the other end. One thing to watch out for is that such a device might not be able to handle the same throughput as the debug port itself and hence may lose data unless it can do some buffering.<br />
<br />
== Considerations in LinuxBIOS ==<br />
We'll use Mode 1 since a full USB stack and EHCI driver isn't running when we're using the debug port. We get early two-way communication from PCI memory write accesses. printf() should transmit also to the debug port on any (all?) EHCI controllers sporting the capability. Linux already supports this and we could probably copy code or headers from the kernel.<br />
<br />
== Hardware capability ==<br />
The Debug Port is optional, please check if EHCI controllers near you support it:<br />
<br />
# lspci -vs $(lspci|grep EHCI|cut -f1 -d' ')<br />
00:1d.7 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCI Controller (rev 03) (prog-if 20 [EHCI])<br />
Subsystem: IBM Unknown device 0566<br />
Flags: bus master, medium devsel, latency 0, IRQ 5<br />
Memory at b0000000 (32-bit, non-prefetchable) [size=1K]<br />
Capabilities: [50] Power Management version 2<br />
Capabilities: [58] Debug port<br />
<br />
Look for a line like the last one above.<br />
<br />
Please include the PCI device id too:<br />
<br />
# lspci -ns $(lspci|grep EHCI|cut -f1 -d' ')<br />
00:1d.7 0c03: 8086:265c (rev 03)<br />
<br />
If your controller isn't already listed below then please add it or send an email to the [[Mailinglist]] if you don't have a wiki account yet and want one, or want us to add your controller to the page.<br />
<br />
=== Controllers verified to have the Debug port capability ===<br />
<br />
* 10b9:5239 ALi Corporation USB 2.0 (USB PCI card)<br />
* 8086:24dd Intel ICH5<br />
* 8086:265c Intel ICH6<br />
* 8086:268c Intel 631xESB/632xESB/3100 Chipset (rev 09) (in Dell PE 1950)<br />
* 8086:27cc Intel ICH7<br />
* 10de:0088 nVidia MCP2A (rev a2)<br />
* 10de:036d nVidia MCP55 (rev a2)<br />
<br />
=== Controllers verified to lack the Debug port capability ===<br />
<br />
* 1033:00e0 NEC Corporation EHCI (rev 02) (Compaq part)<br />
* 1106:3104 VIA Technologies EHCI (rev 82)<br />
* 8086:24cd Intel Corporation 82801DB/DBM (ICH4/ICH4-M) EHCI (rev 01)<br />
<br />
== Links ==<br />
<br />
* [http://www.intel.com/technology/usb/download/ehci-r10.pdf EHCI 1.0 spec] (PDF) &mdash; The Debug Port is described in Appendix C.<br />
* [http://developer.intel.com/technology/usb/download/DebugDeviceSpec_R090.pdf Debug Class functional spec] (PDF) &mdash; This is what has to be connected to the EHCI controller.</div>Eswierkhttps://www.coreboot.org/index.php?title=QEMU_Build_Tutorial&diff=1290QEMU Build Tutorial2006-09-19T18:43:33Z<p>Eswierk: /* Building LinuxBIOS */</p>
<hr />
<div>=== Introduction ===<br />
<br />
If you don't have a mainboard supported by LinuxBIOS don't worry: Qemu can help you to emulate one.<br />
<br />
This nice tutorial was written by Alan Carvalho de Assis <acassis@gmail.com>, with additions by Ed Swierk <eswierk@arastra.com>.<br />
<br />
While there are many ways to use LinuxBIOS to load and run a Linux kernel, this tutorial covers two of the most common:<br />
<br />
* LinuxBIOS with FILO as payload, using FILO to load a Linux kernel (and optional initramfs) from a hard disk image. This approach involves a bit more mechanism (it relies on FILO's built-in disk and filesystem drivers) but it produces a tiny LinuxBIOS image.<br />
* LinuxBIOS with a Linux kernel (and optional initramfs) as payload. This cuts FILO out of the picture, but the main challenge with is approach is squeezing the resulting LinuxBIOS image into Qemu's BIOS ROM area (currently 2 MB, but easy to extend by patching Qemu).<br />
<br />
=== Requirements === <br />
<br />
You need the following software packages:<br />
<br />
* [http://linuxbios.org/index.php/Download_LinuxBIOS LinuxBIOSv2] r2405 or greater<br />
* [http://qemu.org/download.html Qemu] 0.8.2 or greater<br />
* [http://linuxbios.org/index.php/FILO FILO] 0.4.2 or greater (if using FILO)<br />
* [ftp://ftp.lnxi.com/pub/mkelfImage mkelfImage] 2.7 or greater (if not using FILO)<br />
<br />
plus a Linux kernel and root filesystem and a working development environment (make, gcc, etc.). gcc 4.0.x and 4.1.x are known to work for all packages except Qemu, which requires gcc 3.2.<br />
<br />
=== Building or finding a Linux kernel ===<br />
<br />
If you are using FILO, you can simply grab a Linux kernel and initramfs from your favorite distribution.<br />
<br />
Otherwise, you will probably need to build a kernel and initramfs from scratch, ensuring that the final LinuxBIOS image does not exceed Qemu's BIOS size limit. Building the kernel and initramfs is beyond the scope of this tutorial; how you configure them depends on your application.<br />
<br />
If you plan to use kexec to chain-boot another Linux kernel, tools from these projects can help automate the process of generating a kernel and initramfs:<br />
* [http://kboot.sourceforge.net/ kboot]<br />
* [http://wiki.laptop.org/go/Building_LinuxBIOS OLPC buildrom]<br />
<br />
=== Building a FILO payload ===<br />
<br />
If you plan to build your Linux kernel and root filesystem directly into LinuxBIOS, you can skip this section.<br />
<br />
Download FILO (I used filo-0.4.2.tar.bz2), decompress it, and cd to the created directory.<br />
<br />
First invocation of make creates the default Config file.<br />
$ make<br />
<br />
Edit this file as you like. The default configuration worked for me. <br />
$ vi Config <br />
<br />
Run make again to create filo.elf, the ELF FILO image. <br />
$ make <br />
<br />
You will use this file (filo.elf) as the LinuxBIOS payload later on.<br />
<br />
=== Building a Linux kernel payload ===<br />
<br />
If you are using FILO, skip this section.<br />
<br />
Download mkelfImage (I used mkelfImage-2.7.tar.gz), decompress it, and cd to the created directory.<br />
<br />
Configure and build the mkelfImage binary.<br />
$ ./configure<br />
$ make<br />
<br />
Now use mkelfImage to convert your Linux kernel image (vmlinuz) and initramfs (initrd) into a usable LinuxBIOS payload (linux.elf):<br />
$ mkelfImage --append="console=ttyS0" --initrd=initrd vmlinuz linux.elf<br />
<br />
=== Building LinuxBIOS ===<br />
<br />
Download the LinuxBIOS source code (I used LinuxBIOSv2-2405) and extract it. <br />
<br />
Change to directory targets/emulation/qemu-i386 and modify Config.lb:<br />
* change payload to point to your payload (filo.elf or linux.elf)<br />
* if you are using a Linux payload, increase the value of option ROM_SIZE to 2048*1024 (2 MB)<br />
<br />
Return to targets directory and execute: <br />
$ ./buildtarget emulation/qemu-i386 <br />
<br />
Go to targets/emulation/qemu-i386/qemu-i386 and execute: <br />
$ make <br />
<br />
This creates the LinuxBIOS image (qemu-bios.rom). Copy and rename this file to bios.bin in your home directory.<br />
<br />
=== Building Qemu ===<br />
<br />
If you plan to run Qemu version 0.8.2, you will have to build Qemu from source after applying a couple of patches. (Later versions of Qemu might incorporate these patches, allowing you to run them unmodified; hopefully someone will be kind enough to update this tutorial if this happens.)<br />
<br />
Download the Qemu source code (I used qemu-0.8.2.tar.gz) and extract it.<br />
<br />
Download the two patches and save them to the Qemu source directory:<br />
* [http://lists.gnu.org/archive/html/qemu-devel/2006-09/msg00155.html qemu-linuxbios.patch]<br />
* [http://lists.gnu.org/archive/html/qemu-devel/2006-09/msg00156.html qemu-piix-ram-size.patch]<br />
<br />
Enter the Qemu source directory and apply the patches:<br />
$ patch -p1 <qemu-linuxbios.patch<br />
$ patch -p1 <qemu-piix-ram-size.patch<br />
<br />
Configure and make Qemu (use the --cc option if your default gcc is newer than version 3.2):<br />
$ ./configure --cc=gcc32 --target-list=i386-softmmu<br />
$ make<br />
<br />
The Qemu binary is stored in the i386-softmmu directory.<br />
<br />
=== Creating a hard disk image ===<br />
<br />
If you are using FILO, you must create a hard disk image containing the Linux kernel and optional initramfs that FILO loads.<br />
<br />
Whether or not you use FILO, you may also wish to populate the disk image with the root filesystem of whatever Linux distribution you want to run.<br />
<br />
Create an empty disk image:<br />
$ qemu-img create -f raw disk.img 200M<br />
<br />
Format it:<br />
$ mkfs.ext2 -F disk.img <br />
<br />
The remaining steps must be performed as root. Create a temporary mountpoint and mount the image:<br />
# mkdir /mnt/rootfs<br />
# mount -o loop disk.img /mnt/rootfs<br />
<br />
Create a boot directory and copy your Linux kernel (vmlinuz) and initramfs (initrd) to it:<br />
# mkdir /mnt/rootfs/boot<br />
# cp vmlinuz vmlinuz<br />
# cp initrd initrd<br />
<br />
At this point, you can also copy a complete root filesystem to the disk image. For example, with Debian you can use the debootstrap command to create a basic root filesystem:<br />
# cp -R /debian/* /mnt/rootfs <br />
<br />
If you are using a debootstrap filesystem, open the file /mnt/rootfs/etc/inittab and change runlevel to level 1:<br />
id:1:initdefault: <br />
<br />
cd out of /mnt/rootfs and umount it:<br />
# umount /mnt/rootfs<br />
<br />
Exit from the root account:<br />
# exit<br />
<br />
=== Starting LinuxBIOS in Qemu ===<br />
<br />
Execute Qemu using the following parameters:<br />
$ qemu -L ~ -hda disk.img -nographic<br />
<br />
The -L option tells Qemu to look for bios.bin in your HOME directory. -nographic suppresses the graphical VGA display and connects the virtual machine's serial port to your console.<br />
<br />
You should now see all sorts of interesting LinuxBIOS messages, followed by Linux kernel boot messages or a FILO prompt.<br />
<br />
If you are using FILO, enter at the boot: prompt:<br />
boot: hda:/boot/vmlinuz root=/dev/hda initrd=/boot/initrd console=ttyS0</div>Eswierkhttps://www.coreboot.org/index.php?title=QEMU_Build_Tutorial&diff=1288QEMU Build Tutorial2006-09-14T03:02:34Z<p>Eswierk: /* Building a Linux kernel payload */</p>
<hr />
<div>=== Introduction ===<br />
<br />
If you don't have a mainboard supported by LinuxBIOS don't worry: Qemu can help you to emulate one.<br />
<br />
This nice tutorial was written by Alan Carvalho de Assis <acassis@gmail.com>, with additions by Ed Swierk <eswierk@arastra.com>.<br />
<br />
While there are many ways to use LinuxBIOS to load and run a Linux kernel, this tutorial covers two of the most common:<br />
<br />
* LinuxBIOS with FILO as payload, using FILO to load a Linux kernel (and optional initramfs) from a hard disk image. This approach involves a bit more mechanism (it relies on FILO's built-in disk and filesystem drivers) but it produces a tiny LinuxBIOS image.<br />
* LinuxBIOS with a Linux kernel (and optional initramfs) as payload. This cuts FILO out of the picture, but the main challenge with is approach is squeezing the resulting LinuxBIOS image into Qemu's BIOS ROM area (currently 2 MB, but easy to extend by patching Qemu).<br />
<br />
=== Requirements === <br />
<br />
You need the following software packages:<br />
<br />
* [http://linuxbios.org/index.php/Download_LinuxBIOS LinuxBIOSv2] r2405 or greater<br />
* [http://qemu.org/download.html Qemu] 0.8.2 or greater<br />
* [http://linuxbios.org/index.php/FILO FILO] 0.4.2 or greater (if using FILO)<br />
* [ftp://ftp.lnxi.com/pub/mkelfImage mkelfImage] 2.7 or greater (if not using FILO)<br />
<br />
plus a Linux kernel and root filesystem and a working development environment (make, gcc, etc.). gcc 4.0.x and 4.1.x are known to work for all packages except Qemu, which requires gcc 3.2.<br />
<br />
=== Building or finding a Linux kernel ===<br />
<br />
If you are using FILO, you can simply grab a Linux kernel and initramfs from your favorite distribution.<br />
<br />
Otherwise, you will probably need to build a kernel and initramfs from scratch, ensuring that the final LinuxBIOS image does not exceed Qemu's BIOS size limit. Building the kernel and initramfs is beyond the scope of this tutorial; how you configure them depends on your application.<br />
<br />
If you plan to use kexec to chain-boot another Linux kernel, tools from these projects can help automate the process of generating a kernel and initramfs:<br />
* [http://kboot.sourceforge.net/ kboot]<br />
* [http://wiki.laptop.org/go/Building_LinuxBIOS OLPC buildrom]<br />
<br />
=== Building a FILO payload ===<br />
<br />
If you plan to build your Linux kernel and root filesystem directly into LinuxBIOS, you can skip this section.<br />
<br />
Download FILO (I used filo-0.4.2.tar.bz2), decompress it, and cd to the created directory.<br />
<br />
First invocation of make creates the default Config file.<br />
$ make<br />
<br />
Edit this file as you like. The default configuration worked for me. <br />
$ vi Config <br />
<br />
Run make again to create filo.elf, the ELF FILO image. <br />
$ make <br />
<br />
You will use this file (filo.elf) as the LinuxBIOS payload later on.<br />
<br />
=== Building a Linux kernel payload ===<br />
<br />
If you are using FILO, skip this section.<br />
<br />
Download mkelfImage (I used mkelfImage-2.7.tar.gz), decompress it, and cd to the created directory.<br />
<br />
Configure and build the mkelfImage binary.<br />
$ ./configure<br />
$ make<br />
<br />
Now use mkelfImage to convert your Linux kernel image (vmlinuz) and initramfs (initrd) into a usable LinuxBIOS payload (linux.elf):<br />
$ mkelfImage --append="console=ttyS0" --initrd=initrd vmlinuz linux.elf<br />
<br />
=== Building LinuxBIOS ===<br />
<br />
Download the LinuxBIOS source code (I used LinuxBIOSv2-2394) and extract it. <br />
<br />
Change to directory targets/emulation/qemu-i386 and modify Config.lb:<br />
* change payload to point to your payload (filo.elf or linux.elf)<br />
* if you are using a Linux payload, increase the value of option ROM_SIZE to 2048*1024 (2 MB)<br />
<br />
Return to targets directory and execute: <br />
$ ./buildtarget emulation/qemu-i386 <br />
<br />
Go to targets/emulation/qemu-i386/qemu-i386 and execute: <br />
$ make <br />
<br />
This creates the LinuxBIOS image (qemu-bios.rom). Copy and rename this file to bios.bin in your home directory. <br />
<br />
=== Building Qemu ===<br />
<br />
If you plan to run Qemu version 0.8.2, you will have to build Qemu from source after applying a couple of patches. (Later versions of Qemu might incorporate these patches, allowing you to run them unmodified; hopefully someone will be kind enough to update this tutorial if this happens.)<br />
<br />
Download the Qemu source code (I used qemu-0.8.2.tar.gz) and extract it.<br />
<br />
Download the two patches and save them to the Qemu source directory:<br />
* [http://lists.gnu.org/archive/html/qemu-devel/2006-09/msg00155.html qemu-linuxbios.patch]<br />
* [http://lists.gnu.org/archive/html/qemu-devel/2006-09/msg00156.html qemu-piix-ram-size.patch]<br />
<br />
Enter the Qemu source directory and apply the patches:<br />
$ patch -p1 <qemu-linuxbios.patch<br />
$ patch -p1 <qemu-piix-ram-size.patch<br />
<br />
Configure and make Qemu (use the --cc option if your default gcc is newer than version 3.2):<br />
$ ./configure --cc=gcc32 --target-list=i386-softmmu<br />
$ make<br />
<br />
The Qemu binary is stored in the i386-softmmu directory.<br />
<br />
=== Creating a hard disk image ===<br />
<br />
If you are using FILO, you must create a hard disk image containing the Linux kernel and optional initramfs that FILO loads.<br />
<br />
Whether or not you use FILO, you may also wish to populate the disk image with the root filesystem of whatever Linux distribution you want to run.<br />
<br />
Create an empty disk image:<br />
$ qemu-img create -f raw disk.img 200M<br />
<br />
Format it:<br />
$ mkfs.ext2 -F disk.img <br />
<br />
The remaining steps must be performed as root. Create a temporary mountpoint and mount the image:<br />
# mkdir /mnt/rootfs<br />
# mount -o loop disk.img /mnt/rootfs<br />
<br />
Create a boot directory and copy your Linux kernel (vmlinuz) and initramfs (initrd) to it:<br />
# mkdir /mnt/rootfs/boot<br />
# cp vmlinuz vmlinuz<br />
# cp initrd initrd<br />
<br />
At this point, you can also copy a complete root filesystem to the disk image. For example, with Debian you can use the debootstrap command to create a basic root filesystem:<br />
# cp -R /debian/* /mnt/rootfs <br />
<br />
If you are using a debootstrap filesystem, open the file /mnt/rootfs/etc/inittab and change runlevel to level 1:<br />
id:1:initdefault: <br />
<br />
cd out of /mnt/rootfs and umount it:<br />
# umount /mnt/rootfs<br />
<br />
Exit from the root account:<br />
# exit<br />
<br />
=== Starting LinuxBIOS in Qemu ===<br />
<br />
Execute Qemu using the following parameters:<br />
$ qemu -L ~ -hda disk.img -nographic<br />
<br />
The -L option tells Qemu to look for bios.bin in your HOME directory. -nographic suppresses the graphical VGA display and connects the virtual machine's serial port to your console.<br />
<br />
You should now see all sorts of interesting LinuxBIOS messages, followed by Linux kernel boot messages or a FILO prompt.<br />
<br />
If you are using FILO, enter at the boot: prompt:<br />
boot: hda:/boot/vmlinuz root=/dev/hda initrd=/boot/initrd console=ttyS0</div>Eswierkhttps://www.coreboot.org/index.php?title=QEMU_Build_Tutorial&diff=1287QEMU Build Tutorial2006-09-14T00:49:56Z<p>Eswierk: /* Starting LinuxBIOS in Qemu */</p>
<hr />
<div>=== Introduction ===<br />
<br />
If you don't have a mainboard supported by LinuxBIOS don't worry: Qemu can help you to emulate one.<br />
<br />
This nice tutorial was written by Alan Carvalho de Assis <acassis@gmail.com>, with additions by Ed Swierk <eswierk@arastra.com>.<br />
<br />
While there are many ways to use LinuxBIOS to load and run a Linux kernel, this tutorial covers two of the most common:<br />
<br />
* LinuxBIOS with FILO as payload, using FILO to load a Linux kernel (and optional initramfs) from a hard disk image. This approach involves a bit more mechanism (it relies on FILO's built-in disk and filesystem drivers) but it produces a tiny LinuxBIOS image.<br />
* LinuxBIOS with a Linux kernel (and optional initramfs) as payload. This cuts FILO out of the picture, but the main challenge with is approach is squeezing the resulting LinuxBIOS image into Qemu's BIOS ROM area (currently 2 MB, but easy to extend by patching Qemu).<br />
<br />
=== Requirements === <br />
<br />
You need the following software packages:<br />
<br />
* [http://linuxbios.org/index.php/Download_LinuxBIOS LinuxBIOSv2] r2405 or greater<br />
* [http://qemu.org/download.html Qemu] 0.8.2 or greater<br />
* [http://linuxbios.org/index.php/FILO FILO] 0.4.2 or greater (if using FILO)<br />
* [ftp://ftp.lnxi.com/pub/mkelfImage mkelfImage] 2.7 or greater (if not using FILO)<br />
<br />
plus a Linux kernel and root filesystem and a working development environment (make, gcc, etc.). gcc 4.0.x and 4.1.x are known to work for all packages except Qemu, which requires gcc 3.2.<br />
<br />
=== Building or finding a Linux kernel ===<br />
<br />
If you are using FILO, you can simply grab a Linux kernel and initramfs from your favorite distribution.<br />
<br />
Otherwise, you will probably need to build a kernel and initramfs from scratch, ensuring that the final LinuxBIOS image does not exceed Qemu's BIOS size limit. Building the kernel and initramfs is beyond the scope of this tutorial; how you configure them depends on your application.<br />
<br />
If you plan to use kexec to chain-boot another Linux kernel, tools from these projects can help automate the process of generating a kernel and initramfs:<br />
* [http://kboot.sourceforge.net/ kboot]<br />
* [http://wiki.laptop.org/go/Building_LinuxBIOS OLPC buildrom]<br />
<br />
=== Building a FILO payload ===<br />
<br />
If you plan to build your Linux kernel and root filesystem directly into LinuxBIOS, you can skip this section.<br />
<br />
Download FILO (I used filo-0.4.2.tar.bz2), decompress it, and cd to the created directory.<br />
<br />
First invocation of make creates the default Config file.<br />
$ make<br />
<br />
Edit this file as you like. The default configuration worked for me. <br />
$ vi Config <br />
<br />
Run make again to create filo.elf, the ELF FILO image. <br />
$ make <br />
<br />
You will use this file (filo.elf) as the LinuxBIOS payload later on.<br />
<br />
=== Building a Linux kernel payload ===<br />
<br />
If you are using FILO, skip this section.<br />
<br />
Download mkelfImage (I used mkelfImage-2.7.tar.gz), decompress it, and cd to the created directory.<br />
<br />
Configure and build the mkelfImage binary.<br />
$ ./configure<br />
$ make<br />
<br />
Now use mkelfImage to convert your Linux kernel image (vmlinuz) and initramfs (initrd) into a usable LinuxBIOS payload (linux.elf):<br />
$ mkelfImage --initrd=initrd vmlinuz linux.elf<br />
<br />
=== Building LinuxBIOS ===<br />
<br />
Download the LinuxBIOS source code (I used LinuxBIOSv2-2394) and extract it. <br />
<br />
Change to directory targets/emulation/qemu-i386 and modify Config.lb:<br />
* change payload to point to your payload (filo.elf or linux.elf)<br />
* if you are using a Linux payload, increase the value of option ROM_SIZE to 2048*1024 (2 MB)<br />
<br />
Return to targets directory and execute: <br />
$ ./buildtarget emulation/qemu-i386 <br />
<br />
Go to targets/emulation/qemu-i386/qemu-i386 and execute: <br />
$ make <br />
<br />
This creates the LinuxBIOS image (qemu-bios.rom). Copy and rename this file to bios.bin in your home directory. <br />
<br />
=== Building Qemu ===<br />
<br />
If you plan to run Qemu version 0.8.2, you will have to build Qemu from source after applying a couple of patches. (Later versions of Qemu might incorporate these patches, allowing you to run them unmodified; hopefully someone will be kind enough to update this tutorial if this happens.)<br />
<br />
Download the Qemu source code (I used qemu-0.8.2.tar.gz) and extract it.<br />
<br />
Download the two patches and save them to the Qemu source directory:<br />
* [http://lists.gnu.org/archive/html/qemu-devel/2006-09/msg00155.html qemu-linuxbios.patch]<br />
* [http://lists.gnu.org/archive/html/qemu-devel/2006-09/msg00156.html qemu-piix-ram-size.patch]<br />
<br />
Enter the Qemu source directory and apply the patches:<br />
$ patch -p1 <qemu-linuxbios.patch<br />
$ patch -p1 <qemu-piix-ram-size.patch<br />
<br />
Configure and make Qemu (use the --cc option if your default gcc is newer than version 3.2):<br />
$ ./configure --cc=gcc32 --target-list=i386-softmmu<br />
$ make<br />
<br />
The Qemu binary is stored in the i386-softmmu directory.<br />
<br />
=== Creating a hard disk image ===<br />
<br />
If you are using FILO, you must create a hard disk image containing the Linux kernel and optional initramfs that FILO loads.<br />
<br />
Whether or not you use FILO, you may also wish to populate the disk image with the root filesystem of whatever Linux distribution you want to run.<br />
<br />
Create an empty disk image:<br />
$ qemu-img create -f raw disk.img 200M<br />
<br />
Format it:<br />
$ mkfs.ext2 -F disk.img <br />
<br />
The remaining steps must be performed as root. Create a temporary mountpoint and mount the image:<br />
# mkdir /mnt/rootfs<br />
# mount -o loop disk.img /mnt/rootfs<br />
<br />
Create a boot directory and copy your Linux kernel (vmlinuz) and initramfs (initrd) to it:<br />
# mkdir /mnt/rootfs/boot<br />
# cp vmlinuz vmlinuz<br />
# cp initrd initrd<br />
<br />
At this point, you can also copy a complete root filesystem to the disk image. For example, with Debian you can use the debootstrap command to create a basic root filesystem:<br />
# cp -R /debian/* /mnt/rootfs <br />
<br />
If you are using a debootstrap filesystem, open the file /mnt/rootfs/etc/inittab and change runlevel to level 1:<br />
id:1:initdefault: <br />
<br />
cd out of /mnt/rootfs and umount it:<br />
# umount /mnt/rootfs<br />
<br />
Exit from the root account:<br />
# exit<br />
<br />
=== Starting LinuxBIOS in Qemu ===<br />
<br />
Execute Qemu using the following parameters:<br />
$ qemu -L ~ -hda disk.img -nographic<br />
<br />
The -L option tells Qemu to look for bios.bin in your HOME directory. -nographic suppresses the graphical VGA display and connects the virtual machine's serial port to your console.<br />
<br />
You should now see all sorts of interesting LinuxBIOS messages, followed by Linux kernel boot messages or a FILO prompt.<br />
<br />
If you are using FILO, enter at the boot: prompt:<br />
boot: hda:/boot/vmlinuz root=/dev/hda initrd=/boot/initrd console=ttyS0</div>Eswierkhttps://www.coreboot.org/index.php?title=QEMU_Build_Tutorial&diff=1283QEMU Build Tutorial2006-09-14T00:48:25Z<p>Eswierk: </p>
<hr />
<div>=== Introduction ===<br />
<br />
If you don't have a mainboard supported by LinuxBIOS don't worry: Qemu can help you to emulate one.<br />
<br />
This nice tutorial was written by Alan Carvalho de Assis <acassis@gmail.com>, with additions by Ed Swierk <eswierk@arastra.com>.<br />
<br />
While there are many ways to use LinuxBIOS to load and run a Linux kernel, this tutorial covers two of the most common:<br />
<br />
* LinuxBIOS with FILO as payload, using FILO to load a Linux kernel (and optional initramfs) from a hard disk image. This approach involves a bit more mechanism (it relies on FILO's built-in disk and filesystem drivers) but it produces a tiny LinuxBIOS image.<br />
* LinuxBIOS with a Linux kernel (and optional initramfs) as payload. This cuts FILO out of the picture, but the main challenge with is approach is squeezing the resulting LinuxBIOS image into Qemu's BIOS ROM area (currently 2 MB, but easy to extend by patching Qemu).<br />
<br />
=== Requirements === <br />
<br />
You need the following software packages:<br />
<br />
* [http://linuxbios.org/index.php/Download_LinuxBIOS LinuxBIOSv2] r2405 or greater<br />
* [http://qemu.org/download.html Qemu] 0.8.2 or greater<br />
* [http://linuxbios.org/index.php/FILO FILO] 0.4.2 or greater (if using FILO)<br />
* [ftp://ftp.lnxi.com/pub/mkelfImage mkelfImage] 2.7 or greater (if not using FILO)<br />
<br />
plus a Linux kernel and root filesystem and a working development environment (make, gcc, etc.). gcc 4.0.x and 4.1.x are known to work for all packages except Qemu, which requires gcc 3.2.<br />
<br />
=== Building or finding a Linux kernel ===<br />
<br />
If you are using FILO, you can simply grab a Linux kernel and initramfs from your favorite distribution.<br />
<br />
Otherwise, you will probably need to build a kernel and initramfs from scratch, ensuring that the final LinuxBIOS image does not exceed Qemu's BIOS size limit. Building the kernel and initramfs is beyond the scope of this tutorial; how you configure them depends on your application.<br />
<br />
If you plan to use kexec to chain-boot another Linux kernel, tools from these projects can help automate the process of generating a kernel and initramfs:<br />
* [http://kboot.sourceforge.net/ kboot]<br />
* [http://wiki.laptop.org/go/Building_LinuxBIOS OLPC buildrom]<br />
<br />
=== Building a FILO payload ===<br />
<br />
If you plan to build your Linux kernel and root filesystem directly into LinuxBIOS, you can skip this section.<br />
<br />
Download FILO (I used filo-0.4.2.tar.bz2), decompress it, and cd to the created directory.<br />
<br />
First invocation of make creates the default Config file.<br />
$ make<br />
<br />
Edit this file as you like. The default configuration worked for me. <br />
$ vi Config <br />
<br />
Run make again to create filo.elf, the ELF FILO image. <br />
$ make <br />
<br />
You will use this file (filo.elf) as the LinuxBIOS payload later on.<br />
<br />
=== Building a Linux kernel payload ===<br />
<br />
If you are using FILO, skip this section.<br />
<br />
Download mkelfImage (I used mkelfImage-2.7.tar.gz), decompress it, and cd to the created directory.<br />
<br />
Configure and build the mkelfImage binary.<br />
$ ./configure<br />
$ make<br />
<br />
Now use mkelfImage to convert your Linux kernel image (vmlinuz) and initramfs (initrd) into a usable LinuxBIOS payload (linux.elf):<br />
$ mkelfImage --initrd=initrd vmlinuz linux.elf<br />
<br />
=== Building LinuxBIOS ===<br />
<br />
Download the LinuxBIOS source code (I used LinuxBIOSv2-2394) and extract it. <br />
<br />
Change to directory targets/emulation/qemu-i386 and modify Config.lb:<br />
* change payload to point to your payload (filo.elf or linux.elf)<br />
* if you are using a Linux payload, increase the value of option ROM_SIZE to 2048*1024 (2 MB)<br />
<br />
Return to targets directory and execute: <br />
$ ./buildtarget emulation/qemu-i386 <br />
<br />
Go to targets/emulation/qemu-i386/qemu-i386 and execute: <br />
$ make <br />
<br />
This creates the LinuxBIOS image (qemu-bios.rom). Copy and rename this file to bios.bin in your home directory. <br />
<br />
=== Building Qemu ===<br />
<br />
If you plan to run Qemu version 0.8.2, you will have to build Qemu from source after applying a couple of patches. (Later versions of Qemu might incorporate these patches, allowing you to run them unmodified; hopefully someone will be kind enough to update this tutorial if this happens.)<br />
<br />
Download the Qemu source code (I used qemu-0.8.2.tar.gz) and extract it.<br />
<br />
Download the two patches and save them to the Qemu source directory:<br />
* [http://lists.gnu.org/archive/html/qemu-devel/2006-09/msg00155.html qemu-linuxbios.patch]<br />
* [http://lists.gnu.org/archive/html/qemu-devel/2006-09/msg00156.html qemu-piix-ram-size.patch]<br />
<br />
Enter the Qemu source directory and apply the patches:<br />
$ patch -p1 <qemu-linuxbios.patch<br />
$ patch -p1 <qemu-piix-ram-size.patch<br />
<br />
Configure and make Qemu (use the --cc option if your default gcc is newer than version 3.2):<br />
$ ./configure --cc=gcc32 --target-list=i386-softmmu<br />
$ make<br />
<br />
The Qemu binary is stored in the i386-softmmu directory.<br />
<br />
=== Creating a hard disk image ===<br />
<br />
If you are using FILO, you must create a hard disk image containing the Linux kernel and optional initramfs that FILO loads.<br />
<br />
Whether or not you use FILO, you may also wish to populate the disk image with the root filesystem of whatever Linux distribution you want to run.<br />
<br />
Create an empty disk image:<br />
$ qemu-img create -f raw disk.img 200M<br />
<br />
Format it:<br />
$ mkfs.ext2 -F disk.img <br />
<br />
The remaining steps must be performed as root. Create a temporary mountpoint and mount the image:<br />
# mkdir /mnt/rootfs<br />
# mount -o loop disk.img /mnt/rootfs<br />
<br />
Create a boot directory and copy your Linux kernel (vmlinuz) and initramfs (initrd) to it:<br />
# mkdir /mnt/rootfs/boot<br />
# cp vmlinuz vmlinuz<br />
# cp initrd initrd<br />
<br />
At this point, you can also copy a complete root filesystem to the disk image. For example, with Debian you can use the debootstrap command to create a basic root filesystem:<br />
# cp -R /debian/* /mnt/rootfs <br />
<br />
If you are using a debootstrap filesystem, open the file /mnt/rootfs/etc/inittab and change runlevel to level 1:<br />
id:1:initdefault: <br />
<br />
cd out of /mnt/rootfs and umount it:<br />
# umount /mnt/rootfs<br />
<br />
Exit from the root account:<br />
# exit<br />
<br />
=== Starting LinuxBIOS in Qemu ===<br />
<br />
Execute Qemu using the following parameters:<br />
$ qemu -L ~ -hda disk.img -nographic<br />
<br />
The -L option tells Qemu to look for bios.bin in your HOME directory. -nographic is needed to suppress the graphical VGA display; the virtual machine's serial port device is instead redirected to your console.<br />
<br />
You should now see all sorts of interesting LinuxBIOS messages, followed by Linux kernel boot messages or a FILO prompt.<br />
<br />
If you are using FILO, enter at the boot: prompt:<br />
boot: hda:/boot/vmlinuz root=/dev/hda initrd=/boot/initrd console=ttyS0</div>Eswierkhttps://www.coreboot.org/index.php?title=QEMU_Build_Tutorial&diff=1282QEMU Build Tutorial2006-09-14T00:46:00Z<p>Eswierk: /* Building or finding a Linux kernel */</p>
<hr />
<div>=== Introduction ===<br />
<br />
If you don't have a mainboard supported by LinuxBIOS don't worry: Qemu can help you to emulate one.<br />
<br />
This nice tutorial was written by Alan Carvalho de Assis <acassis@gmail.com>, with additions by Ed Swierk <eswierk@arastra.com>.<br />
<br />
While there are many ways to use LinuxBIOS to load and run a Linux kernel, this tutorial covers two of the most common:<br />
<br />
* LinuxBIOS with FILO as payload, using FILO to load a Linux kernel (and optional initramfs) from a hard disk image. This approach involves a bit more mechanism (it relies on FILO's built-in disk and filesystem drivers) but it produces a tiny LinuxBIOS image.<br />
* LinuxBIOS with a Linux kernel (and optional initramfs) as payload. This cuts FILO out of the picture, but the main challenge with is approach is squeezing the resulting LinuxBIOS image into Qemu's BIOS ROM area (currently 2 MB, but easy to extend by patching Qemu).<br />
<br />
=== Requirements === <br />
<br />
You need the following software packages:<br />
<br />
* [http://linuxbios.org/index.php/Download_LinuxBIOS LinuxBIOSv2] r2405 or greater<br />
* [http://qemu.org/download.html Qemu] 0.8.2 or greater<br />
* [http://linuxbios.org/index.php/FILO FILO] 0.4.2 or greater (if using FILO)<br />
* [ftp://ftp.lnxi.com/pub/mkelfImage mkelfImage] 2.7 or greater (if not using FILO)<br />
<br />
plus a Linux kernel and root filesystem and a working development environment (make, gcc, etc.). gcc 4.0.x and 4.1.x are known to work for all packages except Qemu, which requires gcc 3.2.<br />
<br />
=== Building or finding a Linux kernel ===<br />
<br />
If you are using FILO, you can simply grab a Linux kernel and initramfs from your favorite distribution.<br />
<br />
Otherwise, you will probably need to build a kernel and initramfs from scratch, ensuring that the final LinuxBIOS image does not exceed Qemu's BIOS size limit. Building the kernel and initramfs is beyond the scope of this tutorial; how you configure them depends on your application.<br />
<br />
If you plan to use kexec to chain-boot another Linux kernel, tools from these projects can help automate the process of generating a kernel and initramfs:<br />
* [http://kboot.sourceforge.net/ kboot]<br />
* [http://wiki.laptop.org/go/Building_LinuxBIOS OLPC buildrom]<br />
<br />
=== Building a FILO payload ===<br />
<br />
If you plan to build your Linux kernel and root filesystem directly into LinuxBIOS, you can skip this section.<br />
<br />
Download FILO (I used filo-0.4.2.tar.bz2), decompress it, and cd to the created directory.<br />
<br />
First invocation of make creates the default Config file.<br />
$ make<br />
<br />
Edit this file as you like. The default configuration worked for me. <br />
$ vi Config <br />
<br />
Run make again to create filo.elf, the ELF FILO image. <br />
$ make <br />
<br />
You will use this file (filo.elf) as the LinuxBIOS payload later on.<br />
<br />
=== Building a Linux kernel payload ===<br />
<br />
If you are using FILO, skip this section.<br />
<br />
Download mkelfImage (I used mkelfImage-2.7.tar.gz), decompress it, and cd to the created directory.<br />
<br />
Configure and build the mkelfImage binary.<br />
$ ./configure<br />
$ make<br />
<br />
Now use mkelfImage to convert your Linux kernel image (vmlinuz) and initramfs (initrd) into a usable LinuxBIOS payload (linux.elf):<br />
$ mkelfImage --initrd=initrd vmlinuz linux.elf<br />
<br />
=== Building LinuxBIOS ===<br />
<br />
Download the LinuxBIOS source code (I used LinuxBIOSv2-2394) and extract it. <br />
<br />
Change to directory targets/emulation/qemu-i386 and modify Config.lb:<br />
* change payload to point to your payload (filo.elf or linux.elf)<br />
* if you are using a Linux payload, increase the value of option ROM_SIZE to 2048*1024 (2 MB)<br />
<br />
Return to targets directory and execute: <br />
$ ./buildtarget emulation/qemu-i386 <br />
<br />
Go to targets/emulation/qemu-i386/qemu-i386 and execute: <br />
$ make <br />
<br />
This creates the LinuxBIOS image (qemu-bios.rom). Copy and rename this file to bios.bin in your home directory. <br />
<br />
=== Building or obtaining Qemu ===<br />
<br />
If you plan to run Qemu version 0.8.2, you will have to build Qemu from source after applying a couple of patches. (Later versions of Qemu might incorporate these patches, allowing you to run them unmodified; hopefully someone will be kind enough to update this tutorial if this happens.)<br />
<br />
Download the Qemu source code (I used qemu-0.8.2.tar.gz) and extract it.<br />
<br />
Download the two patches and save them to the Qemu source directory:<br />
* [http://lists.gnu.org/archive/html/qemu-devel/2006-09/msg00155.html qemu-linuxbios.patch]<br />
* [http://lists.gnu.org/archive/html/qemu-devel/2006-09/msg00156.html qemu-piix-ram-size.patch]<br />
<br />
Enter the Qemu source directory and apply the patches:<br />
$ patch -p1 <qemu-linuxbios.patch<br />
$ patch -p1 <qemu-piix-ram-size.patch<br />
<br />
Configure and make Qemu (use the --cc option if your default gcc is newer than version 3.2):<br />
$ ./configure --cc=gcc32 --target-list=i386-softmmu<br />
$ make<br />
<br />
The Qemu binary is stored in the i386-softmmu directory.<br />
<br />
=== Creating a hard disk image ===<br />
<br />
If you are using FILO, you must create a hard disk image containing the Linux kernel and optional initramfs that FILO loads.<br />
<br />
Whether or not you use FILO, you may also wish to populate the disk image with the root filesystem of whatever Linux distribution you want to run.<br />
<br />
Create an empty disk image:<br />
$ qemu-img create -f raw disk.img 200M<br />
<br />
Format it:<br />
$ mkfs.ext2 -F disk.img <br />
<br />
The remaining steps must be performed as root. Create a temporary mountpoint and mount the image:<br />
# mkdir /mnt/rootfs<br />
# mount -o loop disk.img /mnt/rootfs<br />
<br />
Create a boot directory and copy your Linux kernel (vmlinuz) and initramfs (initrd) to it:<br />
# mkdir /mnt/rootfs/boot<br />
# cp vmlinuz vmlinuz<br />
# cp initrd initrd<br />
<br />
At this point, you can also copy a complete root filesystem to the disk image. For example, with Debian you can use the debootstrap command to create a basic root filesystem:<br />
# cp -R /debian/* /mnt/rootfs <br />
<br />
If you are using a debootstrap filesystem, open the file /mnt/rootfs/etc/inittab and change runlevel to level 1:<br />
id:1:initdefault: <br />
<br />
cd out of /mnt/rootfs and umount it:<br />
# umount /mnt/rootfs<br />
<br />
Exit from the root account:<br />
# exit<br />
<br />
=== Starting LinuxBIOS in Qemu ===<br />
<br />
Execute Qemu using the following parameters:<br />
$ qemu -L ~ -hda disk.img -nographic<br />
<br />
The -L option tells Qemu to look for bios.bin in your HOME directory. -nographic is needed to suppress the graphical VGA display; the virtual machine's serial port device is instead redirected to your console.<br />
<br />
You should now see all sorts of interesting LinuxBIOS messages, followed by Linux kernel boot messages or a FILO prompt.<br />
<br />
If you are using FILO, enter at the boot: prompt:<br />
boot: hda:/boot/vmlinuz root=/dev/hda initrd=/boot/initrd console=ttyS0</div>Eswierkhttps://www.coreboot.org/index.php?title=QEMU_Build_Tutorial&diff=1281QEMU Build Tutorial2006-09-14T00:36:19Z<p>Eswierk: </p>
<hr />
<div>=== Introduction ===<br />
<br />
If you don't have a mainboard supported by LinuxBIOS don't worry: Qemu can help you to emulate one.<br />
<br />
This nice tutorial was written by Alan Carvalho de Assis <acassis@gmail.com>, with additions by Ed Swierk <eswierk@arastra.com>.<br />
<br />
While there are many ways to use LinuxBIOS to load and run a Linux kernel, this tutorial covers two of the most common:<br />
<br />
* LinuxBIOS with FILO as payload, using FILO to load a Linux kernel (and optional initramfs) from a hard disk image. This approach involves a bit more mechanism (it relies on FILO's built-in disk and filesystem drivers) but it produces a tiny LinuxBIOS image.<br />
* LinuxBIOS with a Linux kernel (and optional initramfs) as payload. This cuts FILO out of the picture, but the main challenge with is approach is squeezing the resulting LinuxBIOS image into Qemu's BIOS ROM area (currently 2 MB, but easy to extend by patching Qemu).<br />
<br />
=== Requirements === <br />
<br />
You need the following software packages:<br />
<br />
* [http://linuxbios.org/index.php/Download_LinuxBIOS LinuxBIOSv2] r2405 or greater<br />
* [http://qemu.org/download.html Qemu] 0.8.2 or greater<br />
* [http://linuxbios.org/index.php/FILO FILO] 0.4.2 or greater (if using FILO)<br />
* [ftp://ftp.lnxi.com/pub/mkelfImage mkelfImage] 2.7 or greater (if not using FILO)<br />
<br />
plus a Linux kernel and root filesystem and a working development environment (make, gcc, etc.). gcc 4.0.x and 4.1.x are known to work for all packages except Qemu, which requires gcc 3.2.<br />
<br />
=== Building or finding a Linux kernel ===<br />
<br />
If you are using FILO, you can simply grab a Linux kernel and initramfs from your favorite distribution.<br />
<br />
Otherwise, you will probably need to build a kernel and initramfs from scratch, ensuring that the final LinuxBIOS image does not exceed Qemu's BIOS size limit. Building the kernel and initramfs is beyond the scope of this tutorial; how you configure them depends on your application.<br />
<br />
If you plan to use kexec to chain-boot another Linux kernel, tools from these projects can help automate the process of generating a kernel and initramfs for LinuxBIOS:<br />
* [http://kboot.sourceforge.net/ kboot]<br />
* [http://wiki.laptop.org/go/LinuxBIOS OLPC LinuxBIOS] (buildrom)<br />
<br />
=== Building a FILO payload ===<br />
<br />
If you plan to build your Linux kernel and root filesystem directly into LinuxBIOS, you can skip this section.<br />
<br />
Download FILO (I used filo-0.4.2.tar.bz2), decompress it, and cd to the created directory.<br />
<br />
First invocation of make creates the default Config file.<br />
$ make<br />
<br />
Edit this file as you like. The default configuration worked for me. <br />
$ vi Config <br />
<br />
Run make again to create filo.elf, the ELF FILO image. <br />
$ make <br />
<br />
You will use this file (filo.elf) as the LinuxBIOS payload later on.<br />
<br />
=== Building a Linux kernel payload ===<br />
<br />
If you are using FILO, skip this section.<br />
<br />
Download mkelfImage (I used mkelfImage-2.7.tar.gz), decompress it, and cd to the created directory.<br />
<br />
Configure and build the mkelfImage binary.<br />
$ ./configure<br />
$ make<br />
<br />
Now use mkelfImage to convert your Linux kernel image (vmlinuz) and initramfs (initrd) into a usable LinuxBIOS payload (linux.elf):<br />
$ mkelfImage --initrd=initrd vmlinuz linux.elf<br />
<br />
=== Building LinuxBIOS ===<br />
<br />
Download the LinuxBIOS source code (I used LinuxBIOSv2-2394) and extract it. <br />
<br />
Change to directory targets/emulation/qemu-i386 and modify Config.lb:<br />
* change payload to point to your payload (filo.elf or linux.elf)<br />
* if you are using a Linux payload, increase the value of option ROM_SIZE to 2048*1024 (2 MB)<br />
<br />
Return to targets directory and execute: <br />
$ ./buildtarget emulation/qemu-i386 <br />
<br />
Go to targets/emulation/qemu-i386/qemu-i386 and execute: <br />
$ make <br />
<br />
This creates the LinuxBIOS image (qemu-bios.rom). Copy and rename this file to bios.bin in your home directory. <br />
<br />
=== Building or obtaining Qemu ===<br />
<br />
If you plan to run Qemu version 0.8.2, you will have to build Qemu from source after applying a couple of patches. (Later versions of Qemu might incorporate these patches, allowing you to run them unmodified; hopefully someone will be kind enough to update this tutorial if this happens.)<br />
<br />
Download the Qemu source code (I used qemu-0.8.2.tar.gz) and extract it.<br />
<br />
Download the two patches and save them to the Qemu source directory:<br />
* [http://lists.gnu.org/archive/html/qemu-devel/2006-09/msg00155.html qemu-linuxbios.patch]<br />
* [http://lists.gnu.org/archive/html/qemu-devel/2006-09/msg00156.html qemu-piix-ram-size.patch]<br />
<br />
Enter the Qemu source directory and apply the patches:<br />
$ patch -p1 <qemu-linuxbios.patch<br />
$ patch -p1 <qemu-piix-ram-size.patch<br />
<br />
Configure and make Qemu (use the --cc option if your default gcc is newer than version 3.2):<br />
$ ./configure --cc=gcc32 --target-list=i386-softmmu<br />
$ make<br />
<br />
The Qemu binary is stored in the i386-softmmu directory.<br />
<br />
=== Creating a hard disk image ===<br />
<br />
If you are using FILO, you must create a hard disk image containing the Linux kernel and optional initramfs that FILO loads.<br />
<br />
Whether or not you use FILO, you may also wish to populate the disk image with the root filesystem of whatever Linux distribution you want to run.<br />
<br />
Create an empty disk image:<br />
$ qemu-img create -f raw disk.img 200M<br />
<br />
Format it:<br />
$ mkfs.ext2 -F disk.img <br />
<br />
The remaining steps must be performed as root. Create a temporary mountpoint and mount the image:<br />
# mkdir /mnt/rootfs<br />
# mount -o loop disk.img /mnt/rootfs<br />
<br />
Create a boot directory and copy your Linux kernel (vmlinuz) and initramfs (initrd) to it:<br />
# mkdir /mnt/rootfs/boot<br />
# cp vmlinuz vmlinuz<br />
# cp initrd initrd<br />
<br />
At this point, you can also copy a complete root filesystem to the disk image. For example, with Debian you can use the debootstrap command to create a basic root filesystem:<br />
# cp -R /debian/* /mnt/rootfs <br />
<br />
If you are using a debootstrap filesystem, open the file /mnt/rootfs/etc/inittab and change runlevel to level 1:<br />
id:1:initdefault: <br />
<br />
cd out of /mnt/rootfs and umount it:<br />
# umount /mnt/rootfs<br />
<br />
Exit from the root account:<br />
# exit<br />
<br />
=== Starting LinuxBIOS in Qemu ===<br />
<br />
Execute Qemu using the following parameters:<br />
$ qemu -L ~ -hda disk.img -nographic<br />
<br />
The -L option tells Qemu to look for bios.bin in your HOME directory. -nographic is needed to suppress the graphical VGA display; the virtual machine's serial port device is instead redirected to your console.<br />
<br />
You should now see all sorts of interesting LinuxBIOS messages, followed by Linux kernel boot messages or a FILO prompt.<br />
<br />
If you are using FILO, enter at the boot: prompt:<br />
boot: hda:/boot/vmlinuz root=/dev/hda initrd=/boot/initrd console=ttyS0</div>Eswierkhttps://www.coreboot.org/index.php?title=QEMU_Build_Tutorial&diff=1279QEMU Build Tutorial2006-09-13T23:03:04Z<p>Eswierk: /* Building FILO */</p>
<hr />
<div>=== Introduction ===<br />
<br />
If you don't have a mainboard supported by LinuxBIOS don't worry: Qemu can help you to emulate one.<br />
<br />
This nice tutorial was written by Alan Carvalho de Assis <acassis@gmail.com>, with additions by Ed Swierk <eswierk@arastra.com>.<br />
<br />
While there are many ways to use LinuxBIOS to load and run a Linux kernel, this tutorial covers two of the most common:<br />
<br />
* LinuxBIOS with FILO as payload, using FILO to load a Linux kernel and initramfs from a hard disk image.<br />
* LinuxBIOS with a Linux kernel and initramfs as payload.<br />
<br />
=== Requirements === <br />
<br />
You need the following software packages:<br />
<br />
* [http://linuxbios.org/index.php/Download_LinuxBIOS LinuxBIOSv2] r2405 or greater<br />
* [http://qemu.org/download.html Qemu] 0.8.2 or greater<br />
* [http://linuxbios.org/index.php/FILO FILO] 0.4.2 or greater (if using FILO)<br />
* [ftp://ftp.lnxi.com/pub/mkelfImage mkelfImage] 2.7 or greater (if not using FILO)<br />
<br />
plus a Linux kernel and root filesystem and a working development environment (make, gcc, etc.). gcc 4.0.x and 4.1.x are known to work.<br />
<br />
=== Building FILO ===<br />
<br />
If you plan to build your Linux kernel and root filesystem directly into LinuxBIOS, you can skip this section.<br />
<br />
Download FILO (I used filo-0.4.2.tar.bz2), decompress it, enter inside the created directory.<br />
<br />
First invocation of make creates the default Config file.<br />
$ make<br />
<br />
Edit this file as you like. The default configuration worked for me. <br />
$ vi Config <br />
<br />
Run make again to create filo.elf, the ELF FILO image. <br />
$ make <br />
<br />
You will use this file (filo.elf) as the LinuxBIOS payload later on.<br />
<br />
=== Creating LinuxBIOS ===<br />
<br />
Download LinuxBIOS source code (I used LinuxBIOSv2-2394). <br />
Decompress it. <br />
<br />
Change to directory targets/emulation/qemu-i386 and modify Config.lb to point to your filo.elf. <br />
<br />
Return to targets directory and execute: <br />
<br />
$ ./buildtarget emulation/qemu-i386 <br />
<br />
Go to targets/emulation/qemu-i386/qemu-i386 and execute: <br />
<br />
$ make <br />
<br />
It will create the file "qemu-bios.rom" <br />
<br />
Rename this file to "bios.bin" and copy to your HOME directory. <br />
<br />
<br />
=== Creating your disk image ===<br />
<br />
Create a empty file (~ 200MB): <br />
<br />
# dd if=/dev/zero of=disk.img bs=1M count=200 <br />
<br />
Format it as ext2: <br />
<br />
# mkfs.ext2 -F disk.img <br />
<br />
Mount it on somewhere: <br />
<br />
# mount disk.img /mnt/rootfs -t ext2 -o loop <br />
<br />
Now you need copy a root filesystem to it. <br />
<br />
I create a directory /debian and used debootstrap command to create a basic root filesystem, but you can use any root filesystem from your distro (i.e. copy one from diskboot.img): <br />
<br />
# cp -R /debian/* /mnt/rootfs <br />
<br />
Open the file /mnt/rootfs/etc/inittab and change runlevel to level 1: <br />
<br />
id:1:initdefault: <br />
<br />
Change to /mnt/rootfs/boot and copy your default vmlinuz and initrd:<br />
<br />
# cp /boot/vmlinuz-2.6.16-2-686 vmlinuz<br />
# cp /boot/initrd.img-2.6.16-2-686 initrd<br />
<br />
Change to /root and umount /mnt/rootfs:<br />
<br />
# umount /mnt/rootfs<br />
<br />
Exit of root account:<br />
<br />
# exit<br />
<br />
<br />
=== Starting LinuxBIOS in Qemu ===<br />
<br />
Execute Qemu using the followings parameters:<br />
<br />
$ qemu -L ~ -hda disk.img -nographic -no-kqemu -d in_asm,exec<br />
<br />
When appear "boot:" text enter it:<br />
<br />
boot: hda:/boot/vmlinuz root=/dev/hda initrd=/boot/initrd console=tty0 console=ttyS0,115200</div>Eswierkhttps://www.coreboot.org/index.php?title=QEMU_Build_Tutorial&diff=1278QEMU Build Tutorial2006-09-13T22:57:56Z<p>Eswierk: /* Requirements */</p>
<hr />
<div>=== Introduction ===<br />
<br />
If you don't have a mainboard supported by LinuxBIOS don't worry: Qemu can help you to emulate one.<br />
<br />
This nice tutorial was written by Alan Carvalho de Assis <acassis@gmail.com>, with additions by Ed Swierk <eswierk@arastra.com>.<br />
<br />
While there are many ways to use LinuxBIOS to load and run a Linux kernel, this tutorial covers two of the most common:<br />
<br />
* LinuxBIOS with FILO as payload, using FILO to load a Linux kernel and initramfs from a hard disk image.<br />
* LinuxBIOS with a Linux kernel and initramfs as payload.<br />
<br />
=== Requirements === <br />
<br />
You need the following software packages:<br />
<br />
* [http://linuxbios.org/index.php/Download_LinuxBIOS LinuxBIOSv2] r2405 or greater<br />
* [http://qemu.org/download.html Qemu] 0.8.2 or greater<br />
* [http://linuxbios.org/index.php/FILO FILO] 0.4.2 or greater (if using FILO)<br />
* [ftp://ftp.lnxi.com/pub/mkelfImage mkelfImage] 2.7 or greater (if not using FILO)<br />
<br />
plus a Linux kernel and root filesystem and a working development environment (make, gcc, etc.). gcc 4.0.x and 4.1.x are known to work.<br />
<br />
=== Creating FILO ===<br />
<br />
Download FILO (I used filo-0.4.2.tar.bz2), decompress it, enter inside directory created. <br />
<br />
First invocation of make creates the default Config file. <br />
$ make <br />
<br />
Edit this file as you like. The default configuration worked to me. <br />
$ vi Config <br />
<br />
Run make again to create filo.elf, the ELF FILO image. <br />
$ make <br />
<br />
You will need this file (filo.elf) to start Linux. <br />
This is used as a payload in LinuxBIOS, when executed it can load Linux kernel. <br />
<br />
<br />
=== Creating LinuxBIOS ===<br />
<br />
Download LinuxBIOS source code (I used LinuxBIOSv2-2394). <br />
Decompress it. <br />
<br />
Change to directory targets/emulation/qemu-i386 and modify Config.lb to point to your filo.elf. <br />
<br />
Return to targets directory and execute: <br />
<br />
$ ./buildtarget emulation/qemu-i386 <br />
<br />
Go to targets/emulation/qemu-i386/qemu-i386 and execute: <br />
<br />
$ make <br />
<br />
It will create the file "qemu-bios.rom" <br />
<br />
Rename this file to "bios.bin" and copy to your HOME directory. <br />
<br />
<br />
=== Creating your disk image ===<br />
<br />
Create a empty file (~ 200MB): <br />
<br />
# dd if=/dev/zero of=disk.img bs=1M count=200 <br />
<br />
Format it as ext2: <br />
<br />
# mkfs.ext2 -F disk.img <br />
<br />
Mount it on somewhere: <br />
<br />
# mount disk.img /mnt/rootfs -t ext2 -o loop <br />
<br />
Now you need copy a root filesystem to it. <br />
<br />
I create a directory /debian and used debootstrap command to create a basic root filesystem, but you can use any root filesystem from your distro (i.e. copy one from diskboot.img): <br />
<br />
# cp -R /debian/* /mnt/rootfs <br />
<br />
Open the file /mnt/rootfs/etc/inittab and change runlevel to level 1: <br />
<br />
id:1:initdefault: <br />
<br />
Change to /mnt/rootfs/boot and copy your default vmlinuz and initrd:<br />
<br />
# cp /boot/vmlinuz-2.6.16-2-686 vmlinuz<br />
# cp /boot/initrd.img-2.6.16-2-686 initrd<br />
<br />
Change to /root and umount /mnt/rootfs:<br />
<br />
# umount /mnt/rootfs<br />
<br />
Exit of root account:<br />
<br />
# exit<br />
<br />
<br />
=== Starting LinuxBIOS in Qemu ===<br />
<br />
Execute Qemu using the followings parameters:<br />
<br />
$ qemu -L ~ -hda disk.img -nographic -no-kqemu -d in_asm,exec<br />
<br />
When appear "boot:" text enter it:<br />
<br />
boot: hda:/boot/vmlinuz root=/dev/hda initrd=/boot/initrd console=tty0 console=ttyS0,115200</div>Eswierkhttps://www.coreboot.org/index.php?title=QEMU_Build_Tutorial&diff=1277QEMU Build Tutorial2006-09-13T22:46:18Z<p>Eswierk: /* Introduction */</p>
<hr />
<div>=== Introduction ===<br />
<br />
If you don't have a mainboard supported by LinuxBIOS don't worry: Qemu can help you to emulate one.<br />
<br />
This nice tutorial was written by Alan Carvalho de Assis <acassis@gmail.com>, with additions by Ed Swierk <eswierk@arastra.com>.<br />
<br />
While there are many ways to use LinuxBIOS to load and run a Linux kernel, this tutorial covers two of the most common:<br />
<br />
* LinuxBIOS with FILO as payload, using FILO to load a Linux kernel and initramfs from a hard disk image.<br />
* LinuxBIOS with a Linux kernel and initramfs as payload.<br />
<br />
=== Requirements === <br />
<br />
You need the following softwares: <br />
<br />
* GCC ie. v4.x<br />
* Qemu ie. v0.8.2<br />
* FILO ie. v0.4.2<br />
* LinuxBIOS ie. r2394<br />
<br />
=== Creating FILO ===<br />
<br />
Download FILO (I used filo-0.4.2.tar.bz2), decompress it, enter inside directory created. <br />
<br />
First invocation of make creates the default Config file. <br />
$ make <br />
<br />
Edit this file as you like. The default configuration worked to me. <br />
$ vi Config <br />
<br />
Run make again to create filo.elf, the ELF FILO image. <br />
$ make <br />
<br />
You will need this file (filo.elf) to start Linux. <br />
This is used as a payload in LinuxBIOS, when executed it can load Linux kernel. <br />
<br />
<br />
=== Creating LinuxBIOS ===<br />
<br />
Download LinuxBIOS source code (I used LinuxBIOSv2-2394). <br />
Decompress it. <br />
<br />
Change to directory targets/emulation/qemu-i386 and modify Config.lb to point to your filo.elf. <br />
<br />
Return to targets directory and execute: <br />
<br />
$ ./buildtarget emulation/qemu-i386 <br />
<br />
Go to targets/emulation/qemu-i386/qemu-i386 and execute: <br />
<br />
$ make <br />
<br />
It will create the file "qemu-bios.rom" <br />
<br />
Rename this file to "bios.bin" and copy to your HOME directory. <br />
<br />
<br />
=== Creating your disk image ===<br />
<br />
Create a empty file (~ 200MB): <br />
<br />
# dd if=/dev/zero of=disk.img bs=1M count=200 <br />
<br />
Format it as ext2: <br />
<br />
# mkfs.ext2 -F disk.img <br />
<br />
Mount it on somewhere: <br />
<br />
# mount disk.img /mnt/rootfs -t ext2 -o loop <br />
<br />
Now you need copy a root filesystem to it. <br />
<br />
I create a directory /debian and used debootstrap command to create a basic root filesystem, but you can use any root filesystem from your distro (i.e. copy one from diskboot.img): <br />
<br />
# cp -R /debian/* /mnt/rootfs <br />
<br />
Open the file /mnt/rootfs/etc/inittab and change runlevel to level 1: <br />
<br />
id:1:initdefault: <br />
<br />
Change to /mnt/rootfs/boot and copy your default vmlinuz and initrd:<br />
<br />
# cp /boot/vmlinuz-2.6.16-2-686 vmlinuz<br />
# cp /boot/initrd.img-2.6.16-2-686 initrd<br />
<br />
Change to /root and umount /mnt/rootfs:<br />
<br />
# umount /mnt/rootfs<br />
<br />
Exit of root account:<br />
<br />
# exit<br />
<br />
<br />
=== Starting LinuxBIOS in Qemu ===<br />
<br />
Execute Qemu using the followings parameters:<br />
<br />
$ qemu -L ~ -hda disk.img -nographic -no-kqemu -d in_asm,exec<br />
<br />
When appear "boot:" text enter it:<br />
<br />
boot: hda:/boot/vmlinuz root=/dev/hda initrd=/boot/initrd console=tty0 console=ttyS0,115200</div>Eswierk