[PATCH 2/2] ARM: very basic uboot bootloader configuration support

Dennis Gilmore dennis at ausil.us
Mon Jul 16 16:24:44 UTC 2012


Signed-off-by: Dennis Gilmore <dennis at ausil.us>
---
 pyanaconda/bootloader.py |  118 ++++++++++++++++++++++++++++++++++++++++++++++
 pyanaconda/platform.py   |    9 +---
 2 files changed, 120 insertions(+), 7 deletions(-)

diff --git a/pyanaconda/bootloader.py b/pyanaconda/bootloader.py
index ea4de5e..995ebba 100644
--- a/pyanaconda/bootloader.py
+++ b/pyanaconda/bootloader.py
@@ -2295,6 +2295,124 @@ class SILO(YabootSILOBase):
         if rc:
             raise BootLoaderError("bootloader install failed")
 
+class UBOOTBase(BootLoader):
+
+    #
+    # configuration
+    #
+
+    @property
+    def config_dir(self):
+        if self.stage2_device.format.mountpoint == "/boot/uboot/":
+            return "/boot/uboot"
+        else:
+            return "/boot"
+
+    @property
+    def config_file(self):
+        return "%s/%s" % (self.config_dir, self._config_file)
+
+
+class UBOOT(UBOOTbase):
+    name = "UBOOT"
+    _config_file = "boot.scr.in"
+    packages = ['uboot-tools']
+    stage2_format_types = ["ext3", "ext2",  "vfat"]
+    can_dual_boot = False
+    def write_config_header(self, config):
+        header = ("# boot.scr.in generated by anaconda\n\n"
+                  "#boot=%(stage1dev)s\n"
+                  % {"stage1dev": self.stage1_device.path})
+        config.write(header)
+
+    def write_config_images(self, config):
+        for image in self.images:
+
+
+            args = Arguments()
+            armMachine = iutil.getARMMachine()
+
+            dtb_addr = ""
+            dtb_line = ""
+            load_method = "ext2load"
+            disk_info = "0:1"
+
+            if armMachine in ["highbank"]:
+                storage_type = "scsi"
+            elif armMachine in ["tegra", "kirkwood"]:
+                storage_type = "usb"
+            elif armMachine in ["imx"]:
+                storage_type = ""
+                disk_info = ""
+                load_method = "${loadcmd}"
+            else:
+                storage_type = "sata"
+
+            if image.initrd:
+                if armMachine in ["highbank"]:
+                    initrd_addr = "${ramdisk_addr_r}"
+                elif armMachine in ["imx"]:
+                    initrd_addr = "${ramdiskaddr}"
+                elif armMachine in ["tegra"]:
+                    initrd_addr = "0x4400000"
+                else:
+                    initrd_addr = "0x81600000"
+
+                initrd_line = "%s %s %s %s %s/uInitrd" % (load_method,
+                                storage_type, disk_info
+                                initrd_addr, self.boot_prefix)
+            else:
+                initrd_line = ""
+                initrd_addr = "-"
+
+            if armMachine in ["highbank"]:
+                kernel_addr = "${kernel_addr_r}"
+                dtb_addr = "${fdt_addr_r}"
+            elif armMachine in ["imx"]:
+                kernel_addr = "${kerneladdr}"
+            elif armMachine in ["tegra"]:
+                kernel_addr = "0x4080000"
+            else:
+                kernel_addr = "0x80300000"
+
+            kernel_line = "%s %s %s %s %s/uImage" % (load_method,
+                                    storage_type, disk_info
+                                    kernel_addr, self.boot_prefix
+
+            root_device_spec = self.storage.rootDevice.fstabSpec
+            args.update("ro", "root=%s" % root_device_spec)
+
+            args.update(self.boot_args)
+            log.info("bootloader.py: used boot args: %s " % args)
+
+            stanza = ("\nsetenv bootargs %(root_device)s rootwait %(args)s\n"
+                      "%(kernel_line)s"
+                      "%(initrd_line)s"
+                      "%(dtb_line)s"
+                      "bootm %(kernel_addr)s %(initrd_addr)s %(dtb_addr)s"
+                      "\n\n"
+                      % {"kernel_line": kernel_line, "initrd_line": initrd_line,
+                         "dtb_line": dtb_line, "kernel_addr": kernel_addr,
+                         "initrd_addr":, initrd_addr, "dtb_addr": dtb_addr,
+                         "root_device": root_device, "args": args})
+            config.write(stanza)
+
+    #
+    # installation
+    #
+    def write_config(self):
+        super(UBOOT, self).write_config()
+
+
+    def install(self):
+         args = ["-A", "arm", "-T", "script", "-C none", "-n", "%s boot script" % productName, "-d", self.config_file, "/boot/boot.scr"]
+         rc = iutil.execWithRedirect("mkimage", args,
+                                    stdout="/dev/tty5", stderr="/dev/tty5",
+                                    root=ROOT_PATH)
+
+        if rc:
+            raise BootLoaderError("bootloader install failed")
+
 
 # anaconda-specific functions
 
diff --git a/pyanaconda/platform.py b/pyanaconda/platform.py
index 05a496f..ccdec28 100644
--- a/pyanaconda/platform.py
+++ b/pyanaconda/platform.py
@@ -336,12 +336,7 @@ class Sparc(Platform):
 
 class ARM(Platform):
     _armMachine = iutil.getARMMachine()
-    _bootloaderClass = bootloader.GRUB2
-    _boot_stage1_device_types = ["disk"]
-    _boot_mbr_description = N_("Master Boot Record")
-    _boot_descriptions = {"disk": _boot_mbr_description,
-                          "partition": Platform._boot_partition_description}
-
+    _bootloaderClass = bootloader.UBOOT
     _disklabel_types = ["msdos"]
 
     @property
@@ -349,7 +344,7 @@ class ARM(Platform):
         return self._armMachine
 
 class omapARM(ARM):
-    _bootloaderClass = bootloader.UBOOTuEnv
+    _bootloaderClass = bootloader.UBOOTBase
     _boot_stage1_format_types = ["vfat"]
     _boot_stage1_device_types = ["partition"]
     _boot_stage1_mountpoints = ["/boot/uboot"]
-- 
1.7.10.4



More information about the anaconda-patches mailing list