Dear LinuxBIOS experts,
I note the comment on the web site saying that most motherboards have only a 512 kbyte flash chip, which isn't enough for a compressed kernel, and so LinuxBIOS is normally used with a bootloader like FILO to load a kernel from an IDE device or whatever.
But larger flash chips are available. For example, my VIA board has a 512k SST chip for which pin-compatible 1M and 2M parts are available (but apparently no larger than that). So my first question is, will higher-capacity flash chips "just work", or does the motherboard design limit them to the flash size that they are supplied with? If it is possible to fit a larger chip the next question is whether these are easy to obtain in small (e.g. one-off) quantities.
Assuming that this is possible, let's say that I build a kernel containing only minimal drivers for the framebuffer and ethernet - no IDE etc, and maybe use the "Linux-Tiny" patch. I wonder how much space would then be left for an initrd. Ideally I would like to fit a single executable of maybe a few hundred kbytes uncompressed which is run instead of init (this is a for fixed-purpose box).
This is a very appealing way to use cheap PC hardware in fixed-purpose applications, if it can be done. Maybe other readers are already doing this sort of thing?
Many thanks for any advice, or pointers to existing docs.
Cheers,
Phil.
Phil Endecott wrote:
So my first question is, will higher-capacity flash chips "just work", or does the motherboard design limit them to the flash size that they are supplied with?
Motherboard designs that make use of parallel flash devices often don't route the higher address lines required required for larger BIOS flash devices. For example a motherboard that ships with a 2Mbit (256k x 8) device may only have A0 - A17 routed from the chipset to the flash socket, even though A18 - A22 may be available on the chipset.
Motherboard designs that use a serial LPC or FWH interface have all the control and address lines required routed from the chipset to the BIOS flash socket, but may still not be able to access memory windows of larger than 256KB, unless the chipset pin straps are set for 512KB, 1MB or larger. There may be other chipset dependent issues with accessing flash control register space (e.g., block locking) that require hardware and/or firmware workarounds.
If it is possible to fit a larger chip the next question is whether these are easy to obtain in small (e.g. one-off) quantities.
It depends on the distributor of the devices. They may have minimum requirements based on dollar amounts or quantities (e.g., $100, 25pcs.).
Assuming that this is possible, let's say that I build a kernel containing only minimal drivers for the framebuffer and ethernet - no IDE etc, and maybe use the "Linux-Tiny" patch. I wonder how much space would then be left for an initrd. Ideally I would like to fit a single executable of maybe a few hundred kbytes uncompressed which is run instead of init (this is a for fixed-purpose box).
It's been done with custom designs. Some current chipsets have firmware address ranges of 4MB. There may be some off-the-shelf motherboards that support this.
-Bari
Thanks Bari.
Bari Ari wrote:
Phil Endecott wrote:
So my first question is, will higher-capacity flash chips "just work", or does the motherboard design limit them to the flash size that they are supplied with?
Motherboard designs that use a serial LPC or FWH interface have all the control and address lines required routed from the chipset to the BIOS flash socket, but may still not be able to access memory windows of larger than 256KB, unless the chipset pin straps are set for 512KB, 1MB or larger. There may be other chipset dependent issues with accessing flash control register space (e.g., block locking) that require hardware and/or firmware workarounds.
So the answer looks like "maybe". Perhaps someone can suggest a motherboard where this is known to work? I have recently done some things using VIA mini- and nano-itx boards (I've just finished a digital picture frame based on a 500 MHz nano-itx) and they would be ideal for what I have in mind now, but if they are known to not work then I would consider something else. The nano-itx has a 512 Mbyte LPC flash chip; presumably there is no freely-available documentation about how it is connected up. Is there a way to know what will work apart from trying it?
Thanks,
Phil.
Phil Endecott wrote:
So the answer looks like "maybe". Perhaps someone can suggest a motherboard where this is known to work?
most K8 -- I use 1 MB flash all the time.
ron
Phil Endecott wrote:
Assuming that this is possible, let's say that I build a kernel containing only minimal drivers for the framebuffer and ethernet - no IDE etc, and maybe use the "Linux-Tiny" patch. I wonder how much space would then be left for an initrd. Ideally I would like to fit a single executable of maybe a few hundred kbytes uncompressed which is run instead of init (this is a for fixed-purpose box).
it's how we did our alphas in 2001, and how we are doing OLPC now. Yep, it's really a good thing to do.
thanks
ron