[LinuxBIOS] r350 - in LinuxBIOSv3: . arch/x86 lib

svn at openbios.org svn at openbios.org
Sat Jun 9 19:43:27 CEST 2007

Author: stepan
Date: 2007-06-09 19:43:26 +0200 (Sat, 09 Jun 2007)
New Revision: 350

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 at hermann-uwe.de>
Acked-by: Stefan Reinauer <stepan at coresystems.de>

Modified: LinuxBIOSv3/Kconfig
--- LinuxBIOSv3/Kconfig	2007-06-07 17:34:17 UTC (rev 349)
+++ LinuxBIOSv3/Kconfig	2007-06-09 17:43:26 UTC (rev 350)
@@ -76,71 +76,32 @@
         prompt "Payload type"
-        default PAYLOAD_ELF
+        default PAYLOAD_NONE
-	bool "FILO"
+	bool "An ELF executable payload file"
-	  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.
-	bool "Etherboot"
-	help
-	  TODO
+	  You will be able to specify the location and file name of the
+	  payload image later.
-	bool "Memtest86"
+	bool "No payload"
-	  TODO
+	  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.
-	bool "Linux kernel"
-	help
-	  TODO
+	  For such an image to be useful, you have to use the 'lar' tool
+	  to add a payload to the ROM image later.
-	bool "Any ELF executable"
-	help
-	  TODO
-	bool "Dummy payload"
-	help
-	  For testing purposes only.
-	string "FILO source code directory"
-	depends PAYLOAD_FILO
-	default "/tmp/filo-0.5"
-	help
-	  The directory where the FILO source code is located.
-	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.
-	string "Linux kernel source code directory"
-	default "/usr/src/linux"
-	help
-	  The directory where the Linux kernel source code is located.
-	string "Path and filename of the Linux .config file to use"
-	default ".config" # FIXME!
-	help
-	  The path and filename of the Linux .config file to use.
-	string "Path and filename of the ELF file to use as payload"
+	string "Payload path and filename"
 	depends PAYLOAD_ELF
 	default "payload.elf"

Modified: LinuxBIOSv3/README
--- LinuxBIOSv3/README	2007-06-07 17:34:17 UTC (rev 349)
+++ LinuxBIOSv3/README	2007-06-09 17:43:26 UTC (rev 350)
@@ -6,7 +6,7 @@
 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.
@@ -39,38 +39,91 @@
  * 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.
+  $ 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 @@
 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.

Modified: LinuxBIOSv3/arch/x86/Makefile
--- LinuxBIOSv3/arch/x86/Makefile	2007-06-07 17:34:17 UTC (rev 349)
+++ LinuxBIOSv3/arch/x86/Makefile	2007-06-09 17:43:26 UTC (rev 350)
@@ -36,14 +36,25 @@
 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
+	$(Q)printf "  PAYLOAD none (as specified by user)\n"
+	$(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
 	$(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 @@
-# The payload as we love it. Get it from somewhere.
-# Is this a place to incorporate buildrom?
+# TODO: Compress the payload (CONFIG_PAYLOAD_FILE) with the default compressor.
-# TODO: This is not implemented yet.
-# TODO: This needs to be compressed with the default compressor.
-	$(Q)printf "  BUILD   PAYLOAD (skipped)\n"
+	$(Q)printf "  ZIP     $(CONFIG_PAYLOAD_FILE) (skipped)\n"

Modified: LinuxBIOSv3/lib/Makefile
--- LinuxBIOSv3/lib/Makefile	2007-06-07 17:34:17 UTC (rev 349)
+++ LinuxBIOSv3/lib/Makefile	2007-06-09 17:43:26 UTC (rev 350)
@@ -33,7 +33,9 @@
 	$(Q)printf "  BUILD   LZMA (skipped)\n"
 $(obj)/lib/%.o: $(src)/lib/%.c
 	$(Q)mkdir -p $(obj)/lib

More information about the coreboot mailing list