bootstd: sandbox: Add a hostfs bootdev
It is helpful to be able to try out bootstd on sandbox, using host files. This is easier than using a block device, which must have a filesystem, partition table, etc. Add a new driver which provides this feature. For now it is not used in tests, but it is likely to be useful. Add notes in the devicetree also, but don't disturb the tests. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
126947b773
commit
7d0478d241
@ -66,6 +66,10 @@
|
||||
fake-host-hwaddr = [00 00 66 44 22 00];
|
||||
};
|
||||
|
||||
host-fs {
|
||||
compatible = "sandbox,bootdev-host";
|
||||
};
|
||||
|
||||
i2c_0: i2c@0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
@ -19,6 +19,11 @@
|
||||
#sound-dai-cells = <1>;
|
||||
};
|
||||
|
||||
bootstd {
|
||||
compatible = "u-boot,boot-std";
|
||||
filename-prefixes = "./";
|
||||
};
|
||||
|
||||
buttons {
|
||||
compatible = "gpio-keys";
|
||||
|
||||
|
@ -16,6 +16,8 @@ source "fs/fat/Kconfig"
|
||||
|
||||
source "fs/jffs2/Kconfig"
|
||||
|
||||
source "fs/sandbox/Kconfig"
|
||||
|
||||
source "fs/ubifs/Kconfig"
|
||||
|
||||
source "fs/cramfs/Kconfig"
|
||||
|
2
fs/sandbox/Kconfig
Normal file
2
fs/sandbox/Kconfig
Normal file
@ -0,0 +1,2 @@
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
@ -9,3 +9,4 @@
|
||||
# Pavel Bartusek, Sysgo Real-Time Solutions AG, pba@sysgo.de
|
||||
|
||||
obj-y := sandboxfs.o
|
||||
obj-$(CONFIG_$(SPL_TPL_)BOOTSTD) += host_bootdev.o
|
||||
|
56
fs/sandbox/host_bootdev.c
Normal file
56
fs/sandbox/host_bootdev.c
Normal file
@ -0,0 +1,56 @@
|
||||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Bootdevice for MMC
|
||||
*
|
||||
* Copyright 2021 Google LLC
|
||||
* Written by Simon Glass <sjg@chromium.org>
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <bootdev.h>
|
||||
#include <bootflow.h>
|
||||
#include <bootmeth.h>
|
||||
#include <dm.h>
|
||||
#include <fs.h>
|
||||
|
||||
static int host_get_bootflow(struct udevice *dev, struct bootflow_iter *iter,
|
||||
struct bootflow *bflow)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (iter->part)
|
||||
return log_msg_ret("max", -ESHUTDOWN);
|
||||
|
||||
bflow->name = strdup(dev->name);
|
||||
if (!bflow->name)
|
||||
return log_msg_ret("name", -ENOMEM);
|
||||
|
||||
ret = bootmeth_check(bflow->method, iter);
|
||||
if (ret)
|
||||
return log_msg_ret("check", ret);
|
||||
|
||||
bflow->state = BOOTFLOWST_MEDIA;
|
||||
bflow->fs_type = FS_TYPE_SANDBOX;
|
||||
|
||||
ret = bootmeth_read_bootflow(bflow->method, bflow);
|
||||
if (ret)
|
||||
return log_msg_ret("method", ret);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct bootdev_ops host_bootdev_ops = {
|
||||
.get_bootflow = host_get_bootflow,
|
||||
};
|
||||
|
||||
static const struct udevice_id host_bootdev_ids[] = {
|
||||
{ .compatible = "sandbox,bootdev-host" },
|
||||
{ }
|
||||
};
|
||||
|
||||
U_BOOT_DRIVER(host_bootdev) = {
|
||||
.name = "host_bootdev",
|
||||
.id = UCLASS_BOOTDEV,
|
||||
.ops = &host_bootdev_ops,
|
||||
.of_match = host_bootdev_ids,
|
||||
};
|
Loading…
Reference in New Issue
Block a user