Source code for the Trusted Boot Module.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tbm-mcu/source/shell/boot.c

75 lines
1.3 KiB

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <console.h>
#include <macros.h>
#include <shell.h>
#include <fs/mufs.h>
#include <shell/boot.h>
extern struct mufs *mufs;
extern struct shell user_shell;
struct cmd safe_cmds[] = {
{ "booting", "", shell_boot },
{ NULL, NULL, NULL },
};
int shell_prepare(struct console *con, size_t argc, const char **argv)
{
char buf[256];
struct mufs_file *file;
size_t size, n;
if (argc < 1) {
fprintf(con->fp, "usage: booting <version>\n");
return -1;
}
if (!mufs) {
fprintf(con->fp, "error: no file system mounted.\n");
return -1;
}
if (!(file = mufs_open(mufs, "logs/boot.log", MUFS_WRITE | MUFS_APPEND))) {
fprintf(con->fp, "error: unable to open the file\n");
return -1;
}
n = min(strlen(argv[0]), sizeof(buf) - 2);
memcpy(buf, argv[0], n);
buf[n++] = '\n';
buf[n] = '\0';
size = mufs_write(file, buf, n);
mufs_close(file);
if (size < n) {
fprintf(con->fp, "error: unable to log the version to boot\n");
return -1;
}
user_shell.cmds = safe_cmds;
return 0;
}
int shell_boot(struct console *con, size_t argc, const char **argv)
{
(void)con;
if (argc < 1) {
fprintf(con->fp, "usage: booting ok\n");
return -1;
}
if (strcmp(argv[0], "ok") != 0)
return -1;
return 0;
}