sandbox: restore ability to access host fs through standard commands
authorStephen Warren <swarren@nvidia.com>
Thu, 12 Jun 2014 16:28:32 +0000 (10:28 -0600)
committerSimon Glass <sjg@chromium.org>
Mon, 23 Jun 2014 21:37:23 +0000 (15:37 -0600)
Commit 95fac6ab4589 "sandbox: Use os functions to read host device tree"
removed the ability for get_device_and_partition() to handle the "host"
device type, and redirect accesses to it to the host filesystem. This
broke some unit tests that use this feature. So, revert that change. The
code added back by this patch is slightly different to pacify checkpatch.

However, we're then left with "host" being both:
- A pseudo device that accesses the hosts real filesystem.
- An emulated block device, which accesses "sectors" inside a file stored
  on the host.

In order to resolve this discrepancy, rename the pseudo device from host
to hostfs, and adjust the unit-tests for this change.

The "help sb" output is modified to reflect this rename, and state where
the host and hostfs devices should be used.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
Tested-by: Josh Wu <josh.wu@atmel.com>
Acked-by: Simon Glass <sjg@chromium.org>
Tested-by: Simon Glass <sjg@chromium.org>
common/cmd_sandbox.c
disk/part.c
test/command_ut.c
test/vboot/vboot_test.sh

index 00982b164dd3c41e562fadffa0adf522c8841e66..3d9fce7e554883f8dbb6b886d17420704f2f8a03 100644 (file)
@@ -114,11 +114,13 @@ static int do_sandbox(cmd_tbl_t *cmdtp, int flag, int argc,
 U_BOOT_CMD(
        sb,     8,      1,      do_sandbox,
        "Miscellaneous sandbox commands",
-       "load host <dev> <addr> <filename> [<bytes> <offset>]  - "
+       "load hostfs - <addr> <filename> [<bytes> <offset>]  - "
                "load a file from host\n"
-       "sb ls host <filename>                      - list files on host\n"
-       "sb save host <dev> <filename> <addr> <bytes> [<offset>] - "
+       "sb ls hostfs - <filename>                    - list files on host\n"
+       "sb save hostfs - <filename> <addr> <bytes> [<offset>] - "
                "save a file to host\n"
        "sb bind <dev> [<filename>] - bind \"host\" device to file\n"
-       "sb info [<dev>]            - show device binding & info"
+       "sb info [<dev>]            - show device binding & info\n"
+       "sb commands use the \"hostfs\" device. The \"host\" device is used\n"
+       "with standard IO commands such as fatls or ext2load"
 );
index b3097e32f0eb0a14bb356f21d816abb39e78ca72..baceb19c60c7212c215e69eaba0be55d3f720170 100644 (file)
@@ -510,6 +510,25 @@ int get_device_and_partition(const char *ifname, const char *dev_part_str,
        int part;
        disk_partition_t tmpinfo;
 
+       /*
+        * Special-case a psuedo block device "hostfs", to allow access to the
+        * host's own filesystem.
+        */
+       if (0 == strcmp(ifname, "hostfs")) {
+               *dev_desc = NULL;
+               info->start = 0;
+               info->size = 0;
+               info->blksz = 0;
+               info->bootable = 0;
+               strcpy((char *)info->type, BOOT_PART_TYPE);
+               strcpy((char *)info->name, "Sandbox host");
+#ifdef CONFIG_PARTITION_UUIDS
+               info->uuid[0] = 0;
+#endif
+
+               return 0;
+       }
+
        /* If no dev_part_str, use bootdevice environment variable */
        if (!dev_part_str || !strlen(dev_part_str) ||
            !strcmp(dev_part_str, "-"))
index b2666bfc182b7641d6d2b8130e5c17f868015d83..ae6466d0ed8340fc64d833bdf29a618896e80d04 100644 (file)
@@ -165,12 +165,12 @@ static int do_ut_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
 #ifdef CONFIG_SANDBOX
        /* File existence */
-       HUSH_TEST(e, "-e host - creating_this_file_breaks_uboot_unit_test", n);
-       run_command("sb save host - creating_this_file_breaks_uboot_unit_test 0 1", 0);
-       HUSH_TEST(e, "-e host - creating_this_file_breaks_uboot_unit_test", y);
+       HUSH_TEST(e, "-e hostfs - creating_this_file_breaks_uboot_unit_test", n);
+       run_command("sb save hostfs - creating_this_file_breaks_uboot_unit_test 0 1", 0);
+       HUSH_TEST(e, "-e hostfs - creating_this_file_breaks_uboot_unit_test", y);
        /* Perhaps this could be replaced by an "rm" shell command one day */
        assert(!os_unlink("creating_this_file_breaks_uboot_unit_test"));
-       HUSH_TEST(e, "-e host - creating_this_file_breaks_uboot_unit_test", n);
+       HUSH_TEST(e, "-e hostfs - creating_this_file_breaks_uboot_unit_test", n);
 #endif
 #endif
 
index cc67bed2e236bca236c8c53dfcee477b7274b2ea..8074fc6adc0708c984297c2172ad41ded4f0995e 100755 (executable)
@@ -14,7 +14,7 @@ set -e
 run_uboot() {
        echo -n "Test Verified Boot Run: $1: "
        ${uboot} -d sandbox-u-boot.dtb >${tmp} -c '
-sb load host 0 100 test.fit;
+sb load hostfs - 100 test.fit;
 fdt addr 100;
 bootm 100;
 reset'