Hi,

the attached patch is the last infrastructure change necessary for romfs.
Everything else to make a target romfs aware happens in the targets.

What the patch does:
1. missing romfs.h include
2. special handling while creating coreboot.rom
While the romfs code path in the makefile doesn't actually use the file, it's possible that the build of coreboot.rom fails in a romfs setup, because the individual buildrom image is too small to host both coreboot and payloads (as the payloads aren't supposed to be there). Thus, a special case to replace the payload with /dev/null in case of a romfs build. There would be cleaner ways, but they're not easily encoded in the Config.lb format.
3. config.g is changed to create rules for a romfs build

Targets should still build (they do for me)

Signed-off-by: Patrick Georgi <[email protected]>

Regards,
Patrick
Index: src/boot/hardwaremain.c
===================================================================
--- src/boot/hardwaremain.c     (Revision 4048)
+++ src/boot/hardwaremain.c     (Arbeitskopie)
@@ -36,6 +36,7 @@
 #include <part/hard_reset.h>
 #include <part/init_timer.h>
 #include <boot/elf.h>
+#include <romfs.h>
 
 /**
  * @brief Main function of the DRAM part of coreboot.
Index: src/arch/i386/Config.lb
===================================================================
--- src/arch/i386/Config.lb     (Revision 4048)
+++ src/arch/i386/Config.lb     (Arbeitskopie)
@@ -79,8 +79,8 @@
        end
 else
        makerule coreboot.rom 
-               depends "coreboot.strip buildrom $(PAYLOAD-1)" 
-               action "./buildrom $< $@ $(PAYLOAD-1) $(ROM_IMAGE_SIZE) 
$(ROM_SECTION_SIZE)"
+               depends "coreboot.strip buildrom $(PAYLOAD-1)"
+               action "PAYLOAD=$(PAYLOAD-1); if [ $(CONFIG_ROMFS) -eq 1 ]; 
then PAYLOAD=/dev/null; fi; ./buildrom $< $@ $$PAYLOAD $(ROM_IMAGE_SIZE) 
$(ROM_SECTION_SIZE)"
        end
 end
 
Index: util/newconfig/config.g
===================================================================
--- util/newconfig/config.g     (Revision 4048)
+++ util/newconfig/config.g     (Arbeitskopie)
@@ -22,7 +22,9 @@
 global_exported_options = []
 romimages = {}
 buildroms = []
+rommapping = {}
 curimage = 0
+bootblocksize = 0
 alloptions = 0 # override uses at top level
 
 local_path = re.compile(r'^\.')
@@ -277,8 +279,11 @@
                self.arch = arch
 
        def setpayload(self, payload):
+               global rommapping
                self.payload = payload
 
+               rommapping[self.name] = payload
+
        def setinitfile(self, initfile):
                self.initfile = initfile
 
@@ -1351,7 +1356,10 @@
 
 def endromimage():
        global curimage
+       global bootblocksize
        mainboard()
+       imagesize = getoption("ROM_IMAGE_SIZE", curimage)
+       bootblocksize += imagesize
        print "End ROMIMAGE"
        curimage = 0
        #curpart = 0
@@ -2209,16 +2217,22 @@
 
 #
 def writemakefile(path):
+       global rommapping
+       global bootblocksize
        makefilepath = os.path.join(path, "Makefile")
        print "Creating", makefilepath
        file = safe_open(makefilepath, 'w+')
        writemakefileheader(file, makefilepath)
 
        # main rule
-       file.write("\nall:")
+       file.write("\nall: romtool")
        for i in buildroms:
-               file.write(" %s" % i.name)
+               file.write(" %sfs" % i.name)
        file.write("\n\n")      
+
+       # romtool rules
+       file.write("\nromtool:\n\tcd $(TOP)/util/romtool; make\n")
+
        file.write("include Makefile.settings\n\n")
        for i, o in romimages.items():
                file.write("%s/coreboot.rom:\n" % o.getname())
@@ -2245,9 +2259,26 @@
                for j in i.roms:
                        file.write(" %s/coreboot.rom " % j)
                file.write("> %s\n\n" %i.name)
+               # build the bootblock here as well. 
+               file.write("\n")
+               file.write("\t cat ")
+               for j in i.roms:
+                       file.write(" %s/coreboot.strip " % j)
+               file.write("> %s.bootblock\n\n" %i.name)
 
+       romsize = getoption("ROM_SIZE", image)
+       # i.name? That can not be right, can it? 
+       file.write("%sfs: %s $(TOP)/util/romtool/romtool\n" %(i.name,i.name));
+       file.write("\trm -f coreboot.romfs\n");
+       file.write("\t$(TOP)/util/romtool/romtool %sfs create %s %s 
%s.bootblock\n" % (i.name, romsize, bootblocksize, i.name))
+       for i in buildroms:
+               for j in i.roms:
+                       #failover is a hack that will go away soon. 
+                       if (j != "failover") and (rommapping[j] != "/dev/null"):
+                               file.write("\t $(TOP)/util/romtool/romtool %sfs 
add-payload %s %s/payload\n" % (i.name, rommapping[j], j))
+               file.write("\t $(TOP)/util/romtool/romtool %sfs print\n" % 
i.name)
 
-       file.write(".PHONY: all clean")
+       file.write(".PHONY: all clean romtool")
        for i in romimages.keys():
                file.write(" %s-clean" % i)
        for i, o in romimages.items():
-- 
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to