Rework payload handling to only provide two options:

- Payload file
  - No payload

Document the current procedure in the README.

Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Stefan Reinauer <stepan@coresystems.de>



git-svn-id: svn://coreboot.org/repository/LinuxBIOSv3@350 f3766cd6-281f-0410-b1cd-43a5c92072e9
This commit is contained in:
Stefan Reinauer 2007-06-09 17:43:26 +00:00
commit 1e384b3bb9
4 changed files with 106 additions and 78 deletions

75
Kconfig
View file

@ -76,71 +76,32 @@ menu "Payload"
choice
prompt "Payload type"
default PAYLOAD_ELF
config PAYLOAD_FILO
bool "FILO"
help
TODO
config PAYLOAD_ETHERBOOT
bool "Etherboot"
help
TODO
config PAYLOAD_MEMTEST86
bool "Memtest86"
help
TODO
config PAYLOAD_LINUX
bool "Linux kernel"
help
TODO
default PAYLOAD_NONE
config PAYLOAD_ELF
bool "Any ELF executable"
bool "An ELF executable payload file"
help
TODO
Select this option if you have a payload image (an ELF file)
which LinuxBIOS should run as soon as the basic hardware
initialization is completed.
config PAYLOAD_DUMMY
bool "Dummy payload"
You will be able to specify the location and file name of the
payload image later.
config PAYLOAD_NONE
bool "No payload"
help
For testing purposes only.
Select this option if you want to create an "empty" LinuxBIOS
ROM image for a certain mainboard, i.e. a LinuxBIOS ROM image
which does not yet contain a payload.
For such an image to be useful, you have to use the 'lar' tool
to add a payload to the ROM image later.
endchoice
config PAYLOAD_FILO_DIR
string "FILO source code directory"
depends PAYLOAD_FILO
default "/tmp/filo-0.5"
help
The directory where the FILO source code is located.
config PAYLOAD_FILO_CONFIGFILE
string "Filename of the FILO 'Config' file"
depends PAYLOAD_FILO
default "Config"
help
The filename of the FILO 'Config' file to use. This file must reside
in the directory specified via PAYLOAD_FILO_DIR.
config PAYLOAD_LINUX_DIR
string "Linux kernel source code directory"
depends PAYLOAD_LINUX
default "/usr/src/linux"
help
The directory where the Linux kernel source code is located.
config PAYLOAD_LINUX_CONFIGFILE
string "Path and filename of the Linux .config file to use"
depends PAYLOAD_LINUX
default ".config" # FIXME!
help
The path and filename of the Linux .config file to use.
config PAYLOAD_ELF_FILE
string "Path and filename of the ELF file to use as payload"
config PAYLOAD_FILE
string "Payload path and filename"
depends PAYLOAD_ELF
default "payload.elf"
help

78
README
View file

@ -6,7 +6,7 @@ LinuxBIOS is a Free Software project aimed at replacing the proprietary
BIOS you can find in most of today's computers.
It performs just a little bit of hardware initialization and then executes
one of many possible payloads, e.g. a Linux kernel.
one of many possible payloads.
Payloads
@ -39,37 +39,90 @@ For details please consult:
* http://www.linuxbios.org/Supported_Chipsets_and_Devices
Building and Installing
Building And Installing
-----------------------
Note: Currently only the x86 QEMU target is supported in LinuxBIOSv3.
1) Build a payload:
For example: FILO.
THIS IS NOT IMPLEMENTED YET. PLEASE BUILD YOUR PAYLOAD MANUALLY.
$ make payload
This step is optional. The 'make payload' command will execute a
helper tool which allows you to easily build and configure a wide
variety of payloads. The result of this step is usually a file
called 'payload.elf' in the top-level directory.
2) Configure LinuxBIOS:
$ make menuconfig
Select at least the desired mainboard vendor, the mainboard device,
the size of your ROM chip, and a payload.
Select at least the desired mainboard vendor, the mainboard device, and
the size of your ROM chip. Per default LinuxBIOS will look for a file
called 'payload.elf' in the current directory and use that as the payload.
If that's not what you want, you can change the path/filename of the
payload to use some other payload file. Or you can choose 'No payload'
in the configuration menu, in which case the resulting LinuxBIOS ROM image
will not contain any payload. You'll have to manually add a payload
later using the 'lar' utility for the LinuxBIOS ROM image to be useful.
3) Build the LinuxBIOS ROM image:
$ make
The generated ROM image is build/linuxbios.rom.
The generated ROM image is the file linuxbios.rom in the build/ directory.
4) You can now test the LinuxBIOS image using:
4) Flash the LinuxBIOS ROM image on a BIOS chip:
$ flashrom -wv linuxbios.rom
NOTE: This step will OVERWRITE the current BIOS located on the ROM chip!
Make sure you have adequate backup facilities before performing this
step, otherwise you might not be able to recover in case of problems.
If you have any questions, please contact us on the mailing list!
The 'flashrom' tool is located in util/flashrom where you can build it
from source code by typing 'make'. Alternatively, your favorite Linux
distribution might ship a 'flashrom' package which provides the 'flashrom'
program in (e.g.) /usr/bin. On Debian GNU/Linux systems you can get
the flashrom package via 'apt-get install flashrom'.
Testing LinuxBIOS Without Modifying Your Hardware
-------------------------------------------------
If you want to test LinuxBIOS without any risks before you really decide
to use it on your hardware, you can use the QEMU system emulator to run
LinuxBIOS virtually in QEMU.
The required steps are:
$ make menuconfig
Select 'Emulated systems' as mainboard vendor and 'QEMU x86' as
mainboard model.
$ make
$ qemu -L build -hda /dev/zero -serial stdio
If you have a full QEMU image with a Linux distribution installed,
you can boot that Linux kernel by using a proper FILO payload and typing:
This will run LinuxBIOS in QEMU and output all debugging messages (which
are usually emitted to a serial console) on stdout. It will not do
anything useful beyond that, as you provided no virtual harddrive to
QEMU (-hda /dev/zero).
If you have a full QEMU hard drive image (say /tmp/qemu.img) with a Linux
distribution installed, you can boot that Linux kernel by using a proper
FILO payload with LinuxBIOS and typing:
$ qemu -L build -hda /tmp/qemu.img -serial stdio
Installing a Linux distribution in QEMU and building the FILO payload is
beyond the scope of this document.
Website and Mailing List
------------------------
@ -92,10 +145,9 @@ developers and companies. Please check the individual source files for details.
LinuxBIOS is licensed under the terms of the GNU General Public License (GPL).
Some files are licensed under the "GPL (version 2, or any later version)",
and some files (mostly those derived from the Linux kernel) are licensed under
the "GPL, version 2". For some parts, which were derived from other projects,
other (GPL-compatible) licenses may apply. Please check the individual
source files for details.
and some files are licensed under the "GPL, version 2". For some parts,
which were derived from other Free Software projects, other (GPL-compatible)
licenses may apply. Please check the individual source files for details.
This makes the resulting LinuxBIOS images licensed under the GPL, version 2.

View file

@ -36,14 +36,25 @@ SILENT := >/dev/null 2>&1
ROM_SIZE := $(shell expr $(CONFIG_LINUXBIOS_ROMSIZE_KB) \* 1024)
$(obj)/linuxbios.rom: $(obj)/linuxbios.bootblock $(obj)/util/lar/lar lzma $(obj)/linuxbios.initram $(obj)/linuxbios.stage2 $(obj)/option_table payload
$(obj)/linuxbios.rom: $(obj)/linuxbios.bootblock $(obj)/util/lar/lar lzma $(obj)/linuxbios.initram $(obj)/linuxbios.stage2 $(obj)/option_table payload_compress
$(Q)rm -rf $(obj)/lar.tmp
$(Q)mkdir $(obj)/lar.tmp
$(Q)mkdir $(obj)/lar.tmp/normal
$(Q)cp $(obj)/linuxbios.initram $(obj)/lar.tmp/normal/initram
$(Q)cp $(obj)/linuxbios.stage2 $(obj)/lar.tmp/normal/stage2
$(Q)cp $(obj)/option_table $(obj)/lar.tmp/normal/option_table
$(Q)cp $(CONFIG_PAYLOAD) $(obj)/lar.tmp/normal/payload
ifeq ($(CONFIG_PAYLOAD_NONE),y)
$(Q)printf " PAYLOAD none (as specified by user)\n"
else
$(Q)# TODO: Print sth. other than $(CONFIG_PAYLOAD_FILE) if compressed.
$(Q)if [ -r $(CONFIG_PAYLOAD_FILE) ]; then \
printf " PAYLOAD $(CONFIG_PAYLOAD_FILE)\n"; \
cp $(CONFIG_PAYLOAD_FILE) $(obj)/lar.tmp/normal/payload; \
else \
printf "Error: payload file '$(CONFIG_PAYLOAD_FILE)' not found.\n"; \
exit 1; \
fi
endif
$(Q)printf " LAR $(subst $(shell pwd)/,,$(@))\n"
$(Q)cd $(obj)/lar.tmp && ../util/lar/lar -c ../linuxbios.rom . \
-s $(ROM_SIZE) -b $(obj)/linuxbios.bootblock
@ -147,15 +158,17 @@ $(obj)/linuxbios.stage2: $(obj)/stage0.init $(STAGE2_OBJ)
#
# The payload as we love it. Get it from somewhere.
# Is this a place to incorporate buildrom?
#
# TODO: This is not implemented yet.
# TODO: This needs to be compressed with the default compressor.
# TODO: Compress the payload (CONFIG_PAYLOAD_FILE) with the default compressor.
#
payload:
$(Q)printf " BUILD PAYLOAD (skipped)\n"
payload_compress:
ifeq ($(CONFIG_PAYLOAD_NONE),y)
else
ifeq ($(CONFIG_DEFAULT_COMPRESSION_NONE),y)
else
$(Q)printf " ZIP $(CONFIG_PAYLOAD_FILE) (skipped)\n"
endif
endif
#

View file

@ -33,7 +33,9 @@ endif
#
lzma:
ifeq ($(CONFIG_DEFAULT_COMPRESSION_LZMA),y)
$(Q)printf " BUILD LZMA (skipped)\n"
endif
$(obj)/lib/%.o: $(src)/lib/%.c
$(Q)mkdir -p $(obj)/lib