diff options
author | Marc Kleine-Budde <mkl@pengutronix.de> | 2015-03-03 13:14:47 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2015-03-06 07:42:21 +0100 |
commit | 09d343e941e039afa19b5ead777780e1f799cab4 (patch) | |
tree | 4a00a0f22d4165a74f2f5bd21dd53c2f03633ea2 /arch/sandbox/os | |
parent | 1b756f522686d3f469f1ff3363ce158d3d45f204 (diff) | |
download | barebox-09d343e941e039afa19b5ead777780e1f799cab4.tar.gz barebox-09d343e941e039afa19b5ead777780e1f799cab4.tar.xz |
sandbox: add support to pass dtb to barebox
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/sandbox/os')
-rw-r--r-- | arch/sandbox/os/common.c | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/arch/sandbox/os/common.c b/arch/sandbox/os/common.c index 65dc4a1ab7..cfb261acf2 100644 --- a/arch/sandbox/os/common.c +++ b/arch/sandbox/os/common.c @@ -265,6 +265,42 @@ err_out: return -1; } +static int add_dtb(const char *file) +{ + struct stat s; + void *dtb = NULL; + int fd; + + fd = open(file, O_RDONLY); + if (fd < 0) { + perror("open"); + goto err_out; + } + + if (fstat(fd, &s)) { + perror("fstat"); + goto err_out; + } + + dtb = mmap(NULL, s.st_size, PROT_READ, MAP_SHARED, fd, 0); + if (dtb == MAP_FAILED) { + perror("mmap"); + goto err_out; + } + + if (barebox_register_dtb(dtb)) + goto err_out; + + return 0; + + err_out: + if (dtb) + munmap(dtb, s.st_size); + if (fd > 0) + close(fd); + return -1; +} + static void print_usage(const char*); static struct option long_options[] = { @@ -272,6 +308,7 @@ static struct option long_options[] = { {"malloc", 1, 0, 'm'}, {"image", 1, 0, 'i'}, {"env", 1, 0, 'e'}, + {"dtb", 1, 0, 'd'}, {"stdout", 1, 0, 'O'}, {"stdin", 1, 0, 'I'}, {"xres", 1, 0, 'x'}, @@ -279,7 +316,7 @@ static struct option long_options[] = { {0, 0, 0, 0}, }; -static const char optstring[] = "hm:i:e:O:I:x:y:"; +static const char optstring[] = "hm:i:e:d:O:I:x:y:"; int main(int argc, char *argv[]) { @@ -308,6 +345,13 @@ int main(int argc, char *argv[]) break; case 'e': break; + case 'd': + ret = add_dtb(optarg); + if (ret) { + printf("Failed to load dtb: '%s'\n", optarg); + exit(1); + } + break; case 'O': fd = open(optarg, O_WRONLY); if (fd < 0) { @@ -408,6 +452,7 @@ static void print_usage(const char *prgname) " and thus are used as the default environment.\n" " An empty file generated with dd will do to get started\n" " with an empty environment.\n" +" -d, --dtb=<file> Map a device tree binary blob (dtb) into barebox.\n" " -O, --stdout=<file> Register a file as a console capable of doing stdout.\n" " <file> can be a regular file or a FIFO.\n" " -I, --stdin=<file> Register a file as a console capable of doing stdin.\n" |