aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Herring <rob.herring@calxeda.com>2012-03-28 05:51:37 +0000
committerJohn Rigby <john.rigby@linaro.org>2012-07-20 20:33:31 -0600
commit36f306c3239b195fadb2ee4e66ca4ab0f15a0b52 (patch)
tree134a12902a643223f29d0b260c0e3c0e8258f8b0
parentae97aaf7d0837c69cc37f5fc3e3ff0ea0cf6d663 (diff)
pxe: parse initrd file from append string
For syslinux, the initrd can be set in the append string as "initrd=<file>", so try to find it there if we haven't already set the initrd. Signed-off-by: Rob Herring <rob.herring@calxeda.com>
-rw-r--r--common/cmd_pxe.c15
-rw-r--r--doc/README.pxe3
2 files changed, 14 insertions, 4 deletions
diff --git a/common/cmd_pxe.c b/common/cmd_pxe.c
index b03fc5688..9e929717b 100644
--- a/common/cmd_pxe.c
+++ b/common/cmd_pxe.c
@@ -1002,6 +1002,7 @@ static int parse_label_menu(char **c, struct pxe_menu *cfg,
static int parse_label(char **c, struct pxe_menu *cfg)
{
struct token t;
+ int len;
char *s = *c;
struct pxe_label *label;
int err;
@@ -1036,10 +1037,22 @@ static int parse_label(char **c, struct pxe_menu *cfg)
case T_APPEND:
err = parse_sliteral(c, &label->append);
+ if (label->initrd)
+ break;
+ s = strstr(label->append, "initrd=");
+ if (!s)
+ break;
+ s += 7;
+ len = (int)(strchr(s, ' ') - s);
+ label->initrd = malloc(len + 1);
+ strncpy(label->initrd, s, len);
+ label->initrd[len] = '\0';
+
break;
case T_INITRD:
- err = parse_sliteral(c, &label->initrd);
+ if (!label->initrd)
+ err = parse_sliteral(c, &label->initrd);
break;
case T_LOCALBOOT:
diff --git a/doc/README.pxe b/doc/README.pxe
index 95cd9b90d..2bbf53d95 100644
--- a/doc/README.pxe
+++ b/doc/README.pxe
@@ -224,9 +224,6 @@ PXELINUX and U-boot's pxe support.
- U-boot's pxe expects U-boot uimg's as kernels. Anything that would work
with the 'bootm' command in U-boot could work with the 'pxe boot' command.
-- U-boot's pxe doesn't recognize initrd options in the append command - you
- must specify initrd files using the initrd command.
-
- U-boot's pxe only recognizes a single file on the initrd command line. It
could be extended to support multiple.