[OpenBIOS] r456 - openbios-devel/arch/ppc/qemu

svn at openbios.org svn at openbios.org
Wed Feb 18 14:58:36 CET 2009


Author: laurent
Date: 2009-02-18 14:58:35 +0100 (Wed, 18 Feb 2009)
New Revision: 456

Modified:
   openbios-devel/arch/ppc/qemu/main.c
Log:
Extract "bootargs" from "boot" command line.

It is needed to boot Fedora-10 as we must specify the path to the yaboot.conf.

To boot Fedora:

boot cd: conf=cd:,\ppc\ppc32\yaboot.conf

so "bootpath" is "cd:", and "bootargs" is "conf=cd:,\ppc\ppc32\yaboot.conf"



Modified: openbios-devel/arch/ppc/qemu/main.c
===================================================================
--- openbios-devel/arch/ppc/qemu/main.c	2009-02-17 22:45:41 UTC (rev 455)
+++ openbios-devel/arch/ppc/qemu/main.c	2009-02-18 13:58:35 UTC (rev 456)
@@ -182,7 +182,8 @@
 
         ELF_DPRINTF("bootpath %s bootargs %s\n", path, args);
 	set_property( chosen_ph, "bootpath", path, strlen(spec)+1 );
-	set_property( chosen_ph, "bootargs", args, strlen(args)+1 );
+	if (args)
+		set_property( chosen_ph, "bootargs", args, strlen(args)+1 );
 }
 
 /************************************************************************/
@@ -224,7 +225,7 @@
   http://playground.sun.com/1275/bindings/chrp/chrp1_7a.ps
 */
 static void
-try_bootinfo(const char *path)
+try_bootinfo(const char *path, const char *param)
 {
     int fd, len, tag, taglen, script, scriptlen, entity;
     char tagbuf[256], bootscript[256], c;
@@ -311,6 +312,8 @@
 
     ELF_DPRINTF("got bootscript %s\n", bootscript);
 
+    encode_bootpath(path, param);
+
     feval(bootscript);
  badf:
     close_io( fd );
@@ -412,6 +415,12 @@
         char *path = pop_fstr_copy(), *param;
         int i;
 
+	param = strchr(path, ' ');
+	if (param) {
+		*param = 0;
+		param++;
+	}
+
         if (!path) {
             ELF_DPRINTF("Entering boot, no path\n");
             push_str("boot-device");
@@ -435,7 +444,7 @@
                     param = pop_fstr_copy();
                 }
                 try_path(path, param);
-                try_bootinfo(path);
+                try_bootinfo(path, param);
             } else {
                 char boot_device = nvram_read(0x34);
 
@@ -448,12 +457,12 @@
                     path = strdup("cd:0");
                     break;
                 }
-                try_bootinfo(path);
+                try_bootinfo(path, NULL);
             }
         } else {
             ELF_DPRINTF("Entering boot, path %s\n", path);
-            try_path(path, "");
-            try_bootinfo(path);
+            try_path(path, param);
+            try_bootinfo(path, param);
         }
         for( i=0; i < sizeof(paths) / sizeof(paths[0]); i++ ) {
             try_path(paths[i], args[i]);




More information about the OpenBIOS mailing list