ubifs does not go though the generic block layer because mtd devices
are special, so the "any" filesystem option to sysboot does not work,
this adds support for a "ubifs" filesystem to the sysboot command which
makes it possible to boot from ubifs using an extlinux.conf file.

Signed-off-by: Hans de Goede <hdego...@redhat.com>
---
 common/cmd_pxe.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/common/cmd_pxe.c b/common/cmd_pxe.c
index 080b376..b4f2e3e 100644
--- a/common/cmd_pxe.c
+++ b/common/cmd_pxe.c
@@ -16,6 +16,10 @@
 #include <fs.h>
 #include <asm/io.h>
 
+#ifdef CONFIG_CMD_UBIFS
+#include "../fs/ubifs/ubifs.h"
+#endif
+
 #include "menu.h"
 #include "cli.h"
 
@@ -156,6 +160,17 @@ static int do_get_ext2(cmd_tbl_t *cmdtp, const char 
*file_path, char *file_addr)
        return -ENOENT;
 }
 
+static int do_get_ubifs(cmd_tbl_t *cmdtp, const char *file_path, char 
*file_addr)
+{
+#ifdef CONFIG_CMD_UBIFS
+       u32 addr = simple_strtoul(file_addr, NULL, 16);
+
+       if (!ubifs_load((char *)file_path, addr, 0))
+               return 1;
+#endif
+       return -ENOENT;
+}
+
 static int do_get_fat(cmd_tbl_t *cmdtp, const char *file_path, char *file_addr)
 {
 #ifdef CONFIG_CMD_FAT
@@ -1680,6 +1695,8 @@ static int do_sysboot(cmd_tbl_t *cmdtp, int flag, int 
argc, char * const argv[])
                do_getfile = do_get_ext2;
        else if (strstr(argv[3], "fat"))
                do_getfile = do_get_fat;
+       else if (strstr(argv[3], "ubifs"))
+               do_getfile = do_get_ubifs;
        else if (strstr(argv[3], "any"))
                do_getfile = do_get_any;
        else {
-- 
2.4.3

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to