mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-13 08:27:23 +00:00
Merge branch '2022-10-11-assorted-fixes-and-updates'
- Assorted code cleanups and fixes, along with two new commands.
This commit is contained in:
commit
8db1fa5a0d
37 changed files with 749 additions and 57 deletions
12
MAINTAINERS
12
MAINTAINERS
|
@ -786,6 +786,11 @@ M: Simon Glass <sjg@chromium.org>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: tools/buildman/
|
F: tools/buildman/
|
||||||
|
|
||||||
|
CAT
|
||||||
|
M: Roger Knecht <rknecht@pm.me>
|
||||||
|
S: Maintained
|
||||||
|
F: cmd/cat.c
|
||||||
|
|
||||||
CFI FLASH
|
CFI FLASH
|
||||||
M: Stefan Roese <sr@denx.de>
|
M: Stefan Roese <sr@denx.de>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
@ -1514,6 +1519,13 @@ M: Max Filippov <jcmvbkbc@gmail.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: arch/xtensa/
|
F: arch/xtensa/
|
||||||
|
|
||||||
|
XXD
|
||||||
|
M: Roger Knecht <rknecht@pm.me>
|
||||||
|
S: Maintained
|
||||||
|
F: cmd/xxd.c
|
||||||
|
F: doc/usage/cmd/xxd.rst
|
||||||
|
F: test/py/tests/test_xxd/
|
||||||
|
|
||||||
THE REST
|
THE REST
|
||||||
M: Tom Rini <trini@konsulko.com>
|
M: Tom Rini <trini@konsulko.com>
|
||||||
L: u-boot@lists.denx.de
|
L: u-boot@lists.denx.de
|
||||||
|
|
|
@ -443,6 +443,10 @@
|
||||||
sandbox_tee {
|
sandbox_tee {
|
||||||
compatible = "sandbox,tee";
|
compatible = "sandbox,tee";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
thermal {
|
||||||
|
compatible = "sandbox,thermal";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
&cros_ec {
|
&cros_ec {
|
||||||
|
|
|
@ -1694,6 +1694,10 @@
|
||||||
compatible = "sandbox,regmap_test";
|
compatible = "sandbox,regmap_test";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
thermal {
|
||||||
|
compatible = "sandbox,thermal";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "sandbox_pmic.dtsi"
|
#include "sandbox_pmic.dtsi"
|
||||||
|
|
|
@ -11,49 +11,6 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
#include <u-boot/sha256.h>
|
#include <u-boot/sha256.h>
|
||||||
|
|
||||||
#define IMAGE_PRE_LOAD_SIG_MAGIC 0x55425348
|
|
||||||
#define IMAGE_PRE_LOAD_SIG_OFFSET_MAGIC 0
|
|
||||||
#define IMAGE_PRE_LOAD_SIG_OFFSET_IMG_LEN 4
|
|
||||||
#define IMAGE_PRE_LOAD_SIG_OFFSET_SIG 8
|
|
||||||
|
|
||||||
#define IMAGE_PRE_LOAD_PATH "/image/pre-load/sig"
|
|
||||||
#define IMAGE_PRE_LOAD_PROP_ALGO_NAME "algo-name"
|
|
||||||
#define IMAGE_PRE_LOAD_PROP_PADDING_NAME "padding-name"
|
|
||||||
#define IMAGE_PRE_LOAD_PROP_SIG_SIZE "signature-size"
|
|
||||||
#define IMAGE_PRE_LOAD_PROP_PUBLIC_KEY "public-key"
|
|
||||||
#define IMAGE_PRE_LOAD_PROP_MANDATORY "mandatory"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Information in the device-tree about the signature in the header
|
|
||||||
*/
|
|
||||||
struct image_sig_info {
|
|
||||||
char *algo_name; /* Name of the algo (eg: sha256,rsa2048) */
|
|
||||||
char *padding_name; /* Name of the padding */
|
|
||||||
u8 *key; /* Public signature key */
|
|
||||||
int key_len; /* Length of the public key */
|
|
||||||
u32 sig_size; /* size of the signature (in the header) */
|
|
||||||
int mandatory; /* Set if the signature is mandatory */
|
|
||||||
|
|
||||||
struct image_sign_info sig_info; /* Signature info */
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Header of the signature header
|
|
||||||
*/
|
|
||||||
struct sig_header_s {
|
|
||||||
u32 magic;
|
|
||||||
u32 version;
|
|
||||||
u32 header_size;
|
|
||||||
u32 image_size;
|
|
||||||
u32 offset_img_sig;
|
|
||||||
u32 flags;
|
|
||||||
u32 reserved0;
|
|
||||||
u32 reserved1;
|
|
||||||
u8 sha256_img_sig[SHA256_SUM_LEN];
|
|
||||||
};
|
|
||||||
|
|
||||||
#define SIG_HEADER_LEN (sizeof(struct sig_header_s))
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Offset of the image
|
* Offset of the image
|
||||||
*
|
*
|
||||||
|
@ -76,6 +33,7 @@ static int image_pre_load_sig_setup(struct image_sig_info *info)
|
||||||
const u32 *sig_size;
|
const u32 *sig_size;
|
||||||
int key_len;
|
int key_len;
|
||||||
int node, ret = 0;
|
int node, ret = 0;
|
||||||
|
char *sig_info_path = NULL;
|
||||||
|
|
||||||
if (!info) {
|
if (!info) {
|
||||||
log_err("ERROR: info is NULL for image pre-load sig check\n");
|
log_err("ERROR: info is NULL for image pre-load sig check\n");
|
||||||
|
@ -85,7 +43,11 @@ static int image_pre_load_sig_setup(struct image_sig_info *info)
|
||||||
|
|
||||||
memset(info, 0, sizeof(*info));
|
memset(info, 0, sizeof(*info));
|
||||||
|
|
||||||
node = fdt_path_offset(gd_fdt_blob(), IMAGE_PRE_LOAD_PATH);
|
sig_info_path = env_get("pre_load_sig_info_path");
|
||||||
|
if (!sig_info_path)
|
||||||
|
sig_info_path = IMAGE_PRE_LOAD_PATH;
|
||||||
|
|
||||||
|
node = fdt_path_offset(gd_fdt_blob(), sig_info_path);
|
||||||
if (node < 0) {
|
if (node < 0) {
|
||||||
log_info("INFO: no info for image pre-load sig check\n");
|
log_info("INFO: no info for image pre-load sig check\n");
|
||||||
ret = 1;
|
ret = 1;
|
||||||
|
|
|
@ -380,6 +380,7 @@ err:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* label_boot_fdtoverlay() - Loads fdt overlays specified in 'fdtoverlays'
|
* label_boot_fdtoverlay() - Loads fdt overlays specified in 'fdtoverlays'
|
||||||
|
* or 'devicetree-overlay'
|
||||||
*
|
*
|
||||||
* @ctx: PXE context
|
* @ctx: PXE context
|
||||||
* @label: Label to process
|
* @label: Label to process
|
||||||
|
@ -809,6 +810,7 @@ static const struct token keywords[] = {
|
||||||
{"devicetreedir", T_FDTDIR},
|
{"devicetreedir", T_FDTDIR},
|
||||||
{"fdtdir", T_FDTDIR},
|
{"fdtdir", T_FDTDIR},
|
||||||
{"fdtoverlays", T_FDTOVERLAYS},
|
{"fdtoverlays", T_FDTOVERLAYS},
|
||||||
|
{"devicetree-overlay", T_FDTOVERLAYS},
|
||||||
{"ontimeout", T_ONTIMEOUT,},
|
{"ontimeout", T_ONTIMEOUT,},
|
||||||
{"ipappend", T_IPAPPEND,},
|
{"ipappend", T_IPAPPEND,},
|
||||||
{"background", T_BACKGROUND,},
|
{"background", T_BACKGROUND,},
|
||||||
|
|
16
cmd/Kconfig
16
cmd/Kconfig
|
@ -469,6 +469,11 @@ config CMD_XIMG
|
||||||
help
|
help
|
||||||
Extract a part of a multi-image.
|
Extract a part of a multi-image.
|
||||||
|
|
||||||
|
config CMD_XXD
|
||||||
|
bool "xxd"
|
||||||
|
help
|
||||||
|
Print file as hexdump to standard output
|
||||||
|
|
||||||
config CMD_SPL
|
config CMD_SPL
|
||||||
bool "spl export - Export boot information for Falcon boot"
|
bool "spl export - Export boot information for Falcon boot"
|
||||||
depends on SPL
|
depends on SPL
|
||||||
|
@ -1449,6 +1454,12 @@ config DEFAULT_SPI_MODE
|
||||||
depends on CMD_SPI
|
depends on CMD_SPI
|
||||||
default 0
|
default 0
|
||||||
|
|
||||||
|
config CMD_TEMPERATURE
|
||||||
|
bool "temperature - display the temperature from thermal sensors"
|
||||||
|
depends on DM_THERMAL
|
||||||
|
help
|
||||||
|
Provides a way to list thermal sensors and to get their readings.
|
||||||
|
|
||||||
config CMD_TSI148
|
config CMD_TSI148
|
||||||
bool "tsi148 - Command to access tsi148 device"
|
bool "tsi148 - Command to access tsi148 device"
|
||||||
help
|
help
|
||||||
|
@ -1533,6 +1544,11 @@ endmenu
|
||||||
|
|
||||||
menu "Shell scripting commands"
|
menu "Shell scripting commands"
|
||||||
|
|
||||||
|
config CMD_CAT
|
||||||
|
bool "cat"
|
||||||
|
help
|
||||||
|
Print file to standard output
|
||||||
|
|
||||||
config CMD_ECHO
|
config CMD_ECHO
|
||||||
bool "echo"
|
bool "echo"
|
||||||
default y
|
default y
|
||||||
|
|
|
@ -38,6 +38,7 @@ obj-$(CONFIG_CMD_BOOTZ) += bootz.o
|
||||||
obj-$(CONFIG_CMD_BOOTI) += booti.o
|
obj-$(CONFIG_CMD_BOOTI) += booti.o
|
||||||
obj-$(CONFIG_CMD_BTRFS) += btrfs.o
|
obj-$(CONFIG_CMD_BTRFS) += btrfs.o
|
||||||
obj-$(CONFIG_CMD_BUTTON) += button.o
|
obj-$(CONFIG_CMD_BUTTON) += button.o
|
||||||
|
obj-$(CONFIG_CMD_CAT) += cat.o
|
||||||
obj-$(CONFIG_CMD_CACHE) += cache.o
|
obj-$(CONFIG_CMD_CACHE) += cache.o
|
||||||
obj-$(CONFIG_CMD_CBFS) += cbfs.o
|
obj-$(CONFIG_CMD_CBFS) += cbfs.o
|
||||||
obj-$(CONFIG_CMD_CLK) += clk.o
|
obj-$(CONFIG_CMD_CLK) += clk.o
|
||||||
|
@ -155,6 +156,7 @@ obj-$(CONFIG_CMD_STRINGS) += strings.o
|
||||||
obj-$(CONFIG_CMD_SMC) += smccc.o
|
obj-$(CONFIG_CMD_SMC) += smccc.o
|
||||||
obj-$(CONFIG_CMD_SYSBOOT) += sysboot.o
|
obj-$(CONFIG_CMD_SYSBOOT) += sysboot.o
|
||||||
obj-$(CONFIG_CMD_STACKPROTECTOR_TEST) += stackprot_test.o
|
obj-$(CONFIG_CMD_STACKPROTECTOR_TEST) += stackprot_test.o
|
||||||
|
obj-$(CONFIG_CMD_TEMPERATURE) += temperature.o
|
||||||
obj-$(CONFIG_CMD_TERMINAL) += terminal.o
|
obj-$(CONFIG_CMD_TERMINAL) += terminal.o
|
||||||
obj-$(CONFIG_CMD_TIME) += time.o
|
obj-$(CONFIG_CMD_TIME) += time.o
|
||||||
obj-$(CONFIG_CMD_TIMER) += timer.o
|
obj-$(CONFIG_CMD_TIMER) += timer.o
|
||||||
|
@ -184,6 +186,7 @@ obj-$(CONFIG_CMD_USB_SDP) += usb_gadget_sdp.o
|
||||||
obj-$(CONFIG_CMD_THOR_DOWNLOAD) += thordown.o
|
obj-$(CONFIG_CMD_THOR_DOWNLOAD) += thordown.o
|
||||||
obj-$(CONFIG_CMD_VBE) += vbe.o
|
obj-$(CONFIG_CMD_VBE) += vbe.o
|
||||||
obj-$(CONFIG_CMD_XIMG) += ximg.o
|
obj-$(CONFIG_CMD_XIMG) += ximg.o
|
||||||
|
obj-$(CONFIG_CMD_XXD) += xxd.o
|
||||||
obj-$(CONFIG_CMD_YAFFS2) += yaffs2.o
|
obj-$(CONFIG_CMD_YAFFS2) += yaffs2.o
|
||||||
obj-$(CONFIG_CMD_SPL) += spl.o
|
obj-$(CONFIG_CMD_SPL) += spl.o
|
||||||
obj-$(CONFIG_CMD_W1) += w1.o
|
obj-$(CONFIG_CMD_W1) += w1.o
|
||||||
|
|
85
cmd/cat.c
Normal file
85
cmd/cat.c
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
/*
|
||||||
|
* Copyright 2022
|
||||||
|
* Roger Knecht <rknecht@pm.de>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include <command.h>
|
||||||
|
#include <fs.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
#include <mapmem.h>
|
||||||
|
|
||||||
|
static int do_cat(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||||
|
char *const argv[])
|
||||||
|
{
|
||||||
|
char *ifname;
|
||||||
|
char *dev;
|
||||||
|
char *file;
|
||||||
|
char *buffer;
|
||||||
|
phys_addr_t addr;
|
||||||
|
loff_t file_size;
|
||||||
|
|
||||||
|
if (argc < 4)
|
||||||
|
return CMD_RET_USAGE;
|
||||||
|
|
||||||
|
ifname = argv[1];
|
||||||
|
dev = argv[2];
|
||||||
|
file = argv[3];
|
||||||
|
|
||||||
|
// check file exists
|
||||||
|
if (fs_set_blk_dev(ifname, dev, FS_TYPE_ANY))
|
||||||
|
return CMD_RET_FAILURE;
|
||||||
|
|
||||||
|
if (!fs_exists(file)) {
|
||||||
|
log_err("File does not exist: ifname=%s dev=%s file=%s\n", ifname, dev, file);
|
||||||
|
return CMD_RET_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// get file size
|
||||||
|
if (fs_set_blk_dev(ifname, dev, FS_TYPE_ANY))
|
||||||
|
return CMD_RET_FAILURE;
|
||||||
|
|
||||||
|
if (fs_size(file, &file_size)) {
|
||||||
|
log_err("Cannot read file size: ifname=%s dev=%s file=%s\n", ifname, dev, file);
|
||||||
|
return CMD_RET_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// allocate memory for file content
|
||||||
|
buffer = calloc(sizeof(char), file_size + 1);
|
||||||
|
if (!buffer) {
|
||||||
|
log_err("Out of memory\n");
|
||||||
|
return CMD_RET_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// map pointer to system memory
|
||||||
|
addr = map_to_sysmem(buffer);
|
||||||
|
|
||||||
|
// read file to memory
|
||||||
|
if (fs_set_blk_dev(ifname, dev, FS_TYPE_ANY))
|
||||||
|
return CMD_RET_FAILURE;
|
||||||
|
|
||||||
|
if (fs_read(file, addr, 0, 0, &file_size)) {
|
||||||
|
log_err("Cannot read file: ifname=%s dev=%s file=%s\n", ifname, dev, file);
|
||||||
|
return CMD_RET_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// print file content
|
||||||
|
buffer[file_size] = '\0';
|
||||||
|
puts(buffer);
|
||||||
|
|
||||||
|
free(buffer);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_LONGHELP
|
||||||
|
static char cat_help_text[] =
|
||||||
|
"<interface> <dev[:part]> <file>\n"
|
||||||
|
" - Print file from 'dev' on 'interface' to standard output\n";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
U_BOOT_CMD(cat, 4, 1, do_cat,
|
||||||
|
"Print file to standard output",
|
||||||
|
cat_help_text
|
||||||
|
);
|
85
cmd/temperature.c
Normal file
85
cmd/temperature.c
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022 Sartura Ltd.
|
||||||
|
* Written by Robert Marko <robert.marko@sartura.hr>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include <command.h>
|
||||||
|
#include <dm.h>
|
||||||
|
#include <thermal.h>
|
||||||
|
|
||||||
|
#define LIMIT_DEVNAME 30
|
||||||
|
|
||||||
|
static int do_get(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||||
|
char *const argv[])
|
||||||
|
{
|
||||||
|
struct udevice *dev;
|
||||||
|
int ret, temp;
|
||||||
|
|
||||||
|
if (argc < 2) {
|
||||||
|
printf("thermal device not selected\n");
|
||||||
|
return CMD_RET_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = uclass_get_device_by_name(UCLASS_THERMAL, argv[1], &dev);
|
||||||
|
if (ret) {
|
||||||
|
printf("thermal device not found\n");
|
||||||
|
return CMD_RET_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = thermal_get_temp(dev, &temp);
|
||||||
|
if (ret)
|
||||||
|
return CMD_RET_FAILURE;
|
||||||
|
|
||||||
|
printf("%s: %d C\n", dev->name, temp);
|
||||||
|
|
||||||
|
return CMD_RET_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int do_list(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||||
|
char *const argv[])
|
||||||
|
{
|
||||||
|
struct udevice *dev;
|
||||||
|
|
||||||
|
printf("| %-*.*s| %-*.*s| %s\n",
|
||||||
|
LIMIT_DEVNAME, LIMIT_DEVNAME, "Device",
|
||||||
|
LIMIT_DEVNAME, LIMIT_DEVNAME, "Driver",
|
||||||
|
"Parent");
|
||||||
|
|
||||||
|
uclass_foreach_dev_probe(UCLASS_THERMAL, dev) {
|
||||||
|
printf("| %-*.*s| %-*.*s| %s\n",
|
||||||
|
LIMIT_DEVNAME, LIMIT_DEVNAME, dev->name,
|
||||||
|
LIMIT_DEVNAME, LIMIT_DEVNAME, dev->driver->name,
|
||||||
|
dev->parent->name);
|
||||||
|
}
|
||||||
|
|
||||||
|
return CMD_RET_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct cmd_tbl temperature_subcmd[] = {
|
||||||
|
U_BOOT_CMD_MKENT(list, 1, 1, do_list, "", ""),
|
||||||
|
U_BOOT_CMD_MKENT(get, 2, 1, do_get, "", ""),
|
||||||
|
};
|
||||||
|
|
||||||
|
static int do_temperature(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||||
|
char *const argv[])
|
||||||
|
{
|
||||||
|
struct cmd_tbl *cmd;
|
||||||
|
|
||||||
|
argc--;
|
||||||
|
argv++;
|
||||||
|
|
||||||
|
cmd = find_cmd_tbl(argv[0], temperature_subcmd, ARRAY_SIZE(temperature_subcmd));
|
||||||
|
if (!cmd || argc > cmd->maxargs)
|
||||||
|
return CMD_RET_USAGE;
|
||||||
|
|
||||||
|
return cmd->cmd(cmdtp, flag, argc, argv);
|
||||||
|
}
|
||||||
|
|
||||||
|
U_BOOT_CMD(temperature, CONFIG_SYS_MAXARGS, 1, do_temperature,
|
||||||
|
"thermal sensor temperature",
|
||||||
|
"list\t\tshow list of temperature sensors\n"
|
||||||
|
"get [thermal device name]\tprint temperature in degrees C"
|
||||||
|
);
|
85
cmd/xxd.c
Normal file
85
cmd/xxd.c
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
/*
|
||||||
|
* Copyright 2022
|
||||||
|
* Roger Knecht <rknecht@pm.de>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include <command.h>
|
||||||
|
#include <display_options.h>
|
||||||
|
#include <fs.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
#include <mapmem.h>
|
||||||
|
|
||||||
|
static int do_xxd(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||||
|
char *const argv[])
|
||||||
|
{
|
||||||
|
char *ifname;
|
||||||
|
char *dev;
|
||||||
|
char *file;
|
||||||
|
char *buffer;
|
||||||
|
phys_addr_t addr;
|
||||||
|
loff_t file_size;
|
||||||
|
|
||||||
|
if (argc < 4)
|
||||||
|
return CMD_RET_USAGE;
|
||||||
|
|
||||||
|
ifname = argv[1];
|
||||||
|
dev = argv[2];
|
||||||
|
file = argv[3];
|
||||||
|
|
||||||
|
// check file exists
|
||||||
|
if (fs_set_blk_dev(ifname, dev, FS_TYPE_ANY))
|
||||||
|
return CMD_RET_FAILURE;
|
||||||
|
|
||||||
|
if (!fs_exists(file)) {
|
||||||
|
log_err("File does not exist: ifname=%s dev=%s file=%s\n", ifname, dev, file);
|
||||||
|
return CMD_RET_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// get file size
|
||||||
|
if (fs_set_blk_dev(ifname, dev, FS_TYPE_ANY))
|
||||||
|
return CMD_RET_FAILURE;
|
||||||
|
|
||||||
|
if (fs_size(file, &file_size)) {
|
||||||
|
log_err("Cannot read file size: ifname=%s dev=%s file=%s\n", ifname, dev, file);
|
||||||
|
return CMD_RET_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// allocate memory for file content
|
||||||
|
buffer = calloc(sizeof(char), file_size);
|
||||||
|
if (!buffer) {
|
||||||
|
log_err("Out of memory\n");
|
||||||
|
return CMD_RET_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// map pointer to system memory
|
||||||
|
addr = map_to_sysmem(buffer);
|
||||||
|
|
||||||
|
// read file to memory
|
||||||
|
if (fs_set_blk_dev(ifname, dev, FS_TYPE_ANY))
|
||||||
|
return CMD_RET_FAILURE;
|
||||||
|
|
||||||
|
if (fs_read(file, addr, 0, 0, &file_size)) {
|
||||||
|
log_err("Cannot read file: ifname=%s dev=%s file=%s\n", ifname, dev, file);
|
||||||
|
return CMD_RET_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// print file content
|
||||||
|
print_buffer(0, buffer, sizeof(char), file_size, 0);
|
||||||
|
|
||||||
|
free(buffer);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_LONGHELP
|
||||||
|
static char xxd_help_text[] =
|
||||||
|
"<interface> <dev[:part]> <file>\n"
|
||||||
|
" - Print file from 'dev' on 'interface' as hexdump to standard output\n";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
U_BOOT_CMD(xxd, 4, 1, do_xxd,
|
||||||
|
"Print file as hexdump to standard output",
|
||||||
|
xxd_help_text
|
||||||
|
);
|
|
@ -22,6 +22,7 @@ CONFIG_CONSOLE_RECORD=y
|
||||||
CONFIG_CONSOLE_RECORD_OUT_SIZE=0x1000
|
CONFIG_CONSOLE_RECORD_OUT_SIZE=0x1000
|
||||||
CONFIG_PRE_CONSOLE_BUFFER=y
|
CONFIG_PRE_CONSOLE_BUFFER=y
|
||||||
CONFIG_DISPLAY_BOARDINFO_LATE=y
|
CONFIG_DISPLAY_BOARDINFO_LATE=y
|
||||||
|
CONFIG_CMD_CAT=y
|
||||||
CONFIG_CMD_CPU=y
|
CONFIG_CMD_CPU=y
|
||||||
CONFIG_CMD_LICENSE=y
|
CONFIG_CMD_LICENSE=y
|
||||||
CONFIG_CMD_BOOTZ=y
|
CONFIG_CMD_BOOTZ=y
|
||||||
|
@ -54,6 +55,7 @@ CONFIG_CMD_READ=y
|
||||||
CONFIG_CMD_REMOTEPROC=y
|
CONFIG_CMD_REMOTEPROC=y
|
||||||
CONFIG_CMD_SPI=y
|
CONFIG_CMD_SPI=y
|
||||||
CONFIG_CMD_USB=y
|
CONFIG_CMD_USB=y
|
||||||
|
CONFIG_CMD_XXD=y
|
||||||
CONFIG_BOOTP_DNS2=y
|
CONFIG_BOOTP_DNS2=y
|
||||||
CONFIG_CMD_TFTPPUT=y
|
CONFIG_CMD_TFTPPUT=y
|
||||||
CONFIG_CMD_TFTPSRV=y
|
CONFIG_CMD_TFTPSRV=y
|
||||||
|
|
|
@ -36,6 +36,7 @@ CONFIG_LOG_DEFAULT_LEVEL=6
|
||||||
CONFIG_DISPLAY_BOARDINFO_LATE=y
|
CONFIG_DISPLAY_BOARDINFO_LATE=y
|
||||||
CONFIG_STACKPROTECTOR=y
|
CONFIG_STACKPROTECTOR=y
|
||||||
CONFIG_ANDROID_AB=y
|
CONFIG_ANDROID_AB=y
|
||||||
|
CONFIG_CMD_CAT=y
|
||||||
CONFIG_CMD_CPU=y
|
CONFIG_CMD_CPU=y
|
||||||
CONFIG_CMD_LICENSE=y
|
CONFIG_CMD_LICENSE=y
|
||||||
CONFIG_CMD_BOOTM_PRE_LOAD=y
|
CONFIG_CMD_BOOTM_PRE_LOAD=y
|
||||||
|
@ -60,6 +61,7 @@ CONFIG_CMD_MEM_SEARCH=y
|
||||||
CONFIG_CMD_MX_CYCLIC=y
|
CONFIG_CMD_MX_CYCLIC=y
|
||||||
CONFIG_CMD_MEMTEST=y
|
CONFIG_CMD_MEMTEST=y
|
||||||
CONFIG_CMD_UNZIP=y
|
CONFIG_CMD_UNZIP=y
|
||||||
|
CONFIG_CMD_XXD=y
|
||||||
CONFIG_CMD_BIND=y
|
CONFIG_CMD_BIND=y
|
||||||
CONFIG_CMD_DEMO=y
|
CONFIG_CMD_DEMO=y
|
||||||
CONFIG_CMD_GPIO=y
|
CONFIG_CMD_GPIO=y
|
||||||
|
@ -77,6 +79,7 @@ CONFIG_CMD_PCI=y
|
||||||
CONFIG_CMD_READ=y
|
CONFIG_CMD_READ=y
|
||||||
CONFIG_CMD_REMOTEPROC=y
|
CONFIG_CMD_REMOTEPROC=y
|
||||||
CONFIG_CMD_SPI=y
|
CONFIG_CMD_SPI=y
|
||||||
|
CONFIG_CMD_TEMPERATURE=y
|
||||||
CONFIG_CMD_USB=y
|
CONFIG_CMD_USB=y
|
||||||
CONFIG_CMD_AXI=y
|
CONFIG_CMD_AXI=y
|
||||||
CONFIG_CMD_SETEXPR_FMT=y
|
CONFIG_CMD_SETEXPR_FMT=y
|
||||||
|
@ -279,6 +282,7 @@ CONFIG_SYSINFO=y
|
||||||
CONFIG_SYSINFO_SANDBOX=y
|
CONFIG_SYSINFO_SANDBOX=y
|
||||||
CONFIG_SYSINFO_GPIO=y
|
CONFIG_SYSINFO_GPIO=y
|
||||||
CONFIG_SYSRESET=y
|
CONFIG_SYSRESET=y
|
||||||
|
CONFIG_DM_THERMAL=y
|
||||||
CONFIG_TIMER=y
|
CONFIG_TIMER=y
|
||||||
CONFIG_TIMER_EARLY=y
|
CONFIG_TIMER_EARLY=y
|
||||||
CONFIG_SANDBOX_TIMER=y
|
CONFIG_SANDBOX_TIMER=y
|
||||||
|
|
|
@ -45,6 +45,7 @@ CONFIG_CMD_OSD=y
|
||||||
CONFIG_CMD_PCI=y
|
CONFIG_CMD_PCI=y
|
||||||
CONFIG_CMD_REMOTEPROC=y
|
CONFIG_CMD_REMOTEPROC=y
|
||||||
CONFIG_CMD_SPI=y
|
CONFIG_CMD_SPI=y
|
||||||
|
CONFIG_CMD_TEMPERATURE=y
|
||||||
CONFIG_CMD_USB=y
|
CONFIG_CMD_USB=y
|
||||||
CONFIG_BOOTP_DNS2=y
|
CONFIG_BOOTP_DNS2=y
|
||||||
CONFIG_CMD_TFTPPUT=y
|
CONFIG_CMD_TFTPPUT=y
|
||||||
|
@ -186,6 +187,7 @@ CONFIG_SYSINFO=y
|
||||||
CONFIG_SYSINFO_SANDBOX=y
|
CONFIG_SYSINFO_SANDBOX=y
|
||||||
CONFIG_SYSINFO_GPIO=y
|
CONFIG_SYSINFO_GPIO=y
|
||||||
CONFIG_SYSRESET=y
|
CONFIG_SYSRESET=y
|
||||||
|
CONFIG_DM_THERMAL=y
|
||||||
CONFIG_TIMER=y
|
CONFIG_TIMER=y
|
||||||
CONFIG_TIMER_EARLY=y
|
CONFIG_TIMER_EARLY=y
|
||||||
CONFIG_SANDBOX_TIMER=y
|
CONFIG_SANDBOX_TIMER=y
|
||||||
|
|
|
@ -62,6 +62,7 @@ CONFIG_CMD_OSD=y
|
||||||
CONFIG_CMD_PCI=y
|
CONFIG_CMD_PCI=y
|
||||||
CONFIG_CMD_REMOTEPROC=y
|
CONFIG_CMD_REMOTEPROC=y
|
||||||
CONFIG_CMD_SPI=y
|
CONFIG_CMD_SPI=y
|
||||||
|
CONFIG_CMD_TEMPERATURE=y
|
||||||
CONFIG_CMD_USB=y
|
CONFIG_CMD_USB=y
|
||||||
CONFIG_BOOTP_DNS2=y
|
CONFIG_BOOTP_DNS2=y
|
||||||
CONFIG_CMD_TFTPPUT=y
|
CONFIG_CMD_TFTPPUT=y
|
||||||
|
@ -213,6 +214,7 @@ CONFIG_SYSINFO_SANDBOX=y
|
||||||
CONFIG_SYSINFO_GPIO=y
|
CONFIG_SYSINFO_GPIO=y
|
||||||
CONFIG_SYSRESET=y
|
CONFIG_SYSRESET=y
|
||||||
CONFIG_SPL_SYSRESET=y
|
CONFIG_SPL_SYSRESET=y
|
||||||
|
CONFIG_DM_THERMAL=y
|
||||||
CONFIG_TIMER=y
|
CONFIG_TIMER=y
|
||||||
CONFIG_TIMER_EARLY=y
|
CONFIG_TIMER_EARLY=y
|
||||||
CONFIG_SANDBOX_TIMER=y
|
CONFIG_SANDBOX_TIMER=y
|
||||||
|
|
|
@ -62,6 +62,7 @@ CONFIG_CMD_OSD=y
|
||||||
CONFIG_CMD_PCI=y
|
CONFIG_CMD_PCI=y
|
||||||
CONFIG_CMD_REMOTEPROC=y
|
CONFIG_CMD_REMOTEPROC=y
|
||||||
CONFIG_CMD_SPI=y
|
CONFIG_CMD_SPI=y
|
||||||
|
CONFIG_CMD_TEMPERATURE=y
|
||||||
CONFIG_CMD_USB=y
|
CONFIG_CMD_USB=y
|
||||||
CONFIG_BOOTP_DNS2=y
|
CONFIG_BOOTP_DNS2=y
|
||||||
CONFIG_CMD_TFTPPUT=y
|
CONFIG_CMD_TFTPPUT=y
|
||||||
|
@ -216,6 +217,7 @@ CONFIG_SYSINFO_SANDBOX=y
|
||||||
CONFIG_SYSINFO_GPIO=y
|
CONFIG_SYSINFO_GPIO=y
|
||||||
CONFIG_SYSRESET=y
|
CONFIG_SYSRESET=y
|
||||||
CONFIG_SPL_SYSRESET=y
|
CONFIG_SPL_SYSRESET=y
|
||||||
|
CONFIG_DM_THERMAL=y
|
||||||
CONFIG_TIMER=y
|
CONFIG_TIMER=y
|
||||||
CONFIG_TIMER_EARLY=y
|
CONFIG_TIMER_EARLY=y
|
||||||
CONFIG_SANDBOX_TIMER=y
|
CONFIG_SANDBOX_TIMER=y
|
||||||
|
|
|
@ -74,6 +74,7 @@ CONFIG_CMD_OSD=y
|
||||||
CONFIG_CMD_PCI=y
|
CONFIG_CMD_PCI=y
|
||||||
CONFIG_CMD_REMOTEPROC=y
|
CONFIG_CMD_REMOTEPROC=y
|
||||||
CONFIG_CMD_SPI=y
|
CONFIG_CMD_SPI=y
|
||||||
|
CONFIG_CMD_TEMPERATURE=y
|
||||||
CONFIG_CMD_USB=y
|
CONFIG_CMD_USB=y
|
||||||
CONFIG_BOOTP_DNS2=y
|
CONFIG_BOOTP_DNS2=y
|
||||||
CONFIG_CMD_TFTPPUT=y
|
CONFIG_CMD_TFTPPUT=y
|
||||||
|
@ -223,6 +224,7 @@ CONFIG_SYSINFO_GPIO=y
|
||||||
CONFIG_SYSRESET=y
|
CONFIG_SYSRESET=y
|
||||||
CONFIG_SPL_SYSRESET=y
|
CONFIG_SPL_SYSRESET=y
|
||||||
CONFIG_TPL_SYSRESET=y
|
CONFIG_TPL_SYSRESET=y
|
||||||
|
CONFIG_DM_THERMAL=y
|
||||||
CONFIG_TIMER=y
|
CONFIG_TIMER=y
|
||||||
CONFIG_TIMER_EARLY=y
|
CONFIG_TIMER_EARLY=y
|
||||||
CONFIG_SANDBOX_TIMER=y
|
CONFIG_SANDBOX_TIMER=y
|
||||||
|
|
|
@ -163,6 +163,13 @@ fdtoverlays <path> [...] - if this label is chosen, use tftp to retrieve the DT
|
||||||
and then applied in the load order to the fdt blob stored at the
|
and then applied in the load order to the fdt blob stored at the
|
||||||
address indicated in the fdt_addr_r environment variable.
|
address indicated in the fdt_addr_r environment variable.
|
||||||
|
|
||||||
|
devicetree-overlay <path> [...] - if this label is chosen, use tftp to retrieve the DT
|
||||||
|
overlay(s) at <path>. it will be temporarily stored at the
|
||||||
|
address indicated in the fdtoverlay_addr_r environment variable,
|
||||||
|
and then applied in the load order to the fdt blob stored at the
|
||||||
|
address indicated in the fdt_addr_r environment variable.
|
||||||
|
Alias for fdtoverlays.
|
||||||
|
|
||||||
kaslrseed - set this label to request random number from hwrng as kaslr seed.
|
kaslrseed - set this label to request random number from hwrng as kaslr seed.
|
||||||
|
|
||||||
append <string> - use <string> as the kernel command line when booting this
|
append <string> - use <string> as the kernel command line when booting this
|
||||||
|
@ -178,6 +185,11 @@ fdt <path> - if this label is chosen, use tftp to retrieve the fdt blob
|
||||||
the fdt_addr_r environment variable, and that address will
|
the fdt_addr_r environment variable, and that address will
|
||||||
be passed to bootm.
|
be passed to bootm.
|
||||||
|
|
||||||
|
devicetree <path> - if this label is chosen, use tftp to retrieve the fdt blob
|
||||||
|
at <path>. it will be stored at the address indicated in
|
||||||
|
the fdt_addr_r environment variable, and that address will
|
||||||
|
be passed to bootm. Alias for fdt.
|
||||||
|
|
||||||
fdtdir <path> - if this label is chosen, use tftp to retrieve a fdt blob
|
fdtdir <path> - if this label is chosen, use tftp to retrieve a fdt blob
|
||||||
relative to <path>. If the fdtfile environment variable
|
relative to <path>. If the fdtfile environment variable
|
||||||
is set, <path>/<fdtfile> is retrieved. Otherwise, the
|
is set, <path>/<fdtfile> is retrieved. Otherwise, the
|
||||||
|
|
|
@ -68,10 +68,10 @@ Boot Configuration Files
|
||||||
|
|
||||||
The standard format for boot configuration files is that of extlinux.conf, as
|
The standard format for boot configuration files is that of extlinux.conf, as
|
||||||
handled by U-Boot's "syslinux" (disk) or "pxe boot" (network). This is roughly
|
handled by U-Boot's "syslinux" (disk) or "pxe boot" (network). This is roughly
|
||||||
as specified at BootLoaderSpec_:
|
as specified at `Boot Loader Specification`_:
|
||||||
|
|
||||||
|
|
||||||
... with the exceptions that the BootLoaderSpec document:
|
... with the exceptions that the Boot Loader Specification document:
|
||||||
|
|
||||||
* Prescribes a separate configuration per boot menu option, whereas U-Boot
|
* Prescribes a separate configuration per boot menu option, whereas U-Boot
|
||||||
lumps all options into a single extlinux.conf file. Hence, U-Boot searches
|
lumps all options into a single extlinux.conf file. Hence, U-Boot searches
|
||||||
|
@ -81,6 +81,8 @@ as specified at BootLoaderSpec_:
|
||||||
* Does not document the fdtdir option, which automatically selects the DTB to
|
* Does not document the fdtdir option, which automatically selects the DTB to
|
||||||
pass to the kernel.
|
pass to the kernel.
|
||||||
|
|
||||||
|
See also doc/README.pxe under 'pxe file format'.
|
||||||
|
|
||||||
One example extlinux.conf generated by the Fedora installer is::
|
One example extlinux.conf generated by the Fedora installer is::
|
||||||
|
|
||||||
# extlinux.conf generated by anaconda
|
# extlinux.conf generated by anaconda
|
||||||
|
@ -115,6 +117,25 @@ One example extlinux.conf generated by the Fedora installer is::
|
||||||
fdtdir /boot/dtb-3.16.0-0.rc6.git1.1.fc22.armv7hl+lpae
|
fdtdir /boot/dtb-3.16.0-0.rc6.git1.1.fc22.armv7hl+lpae
|
||||||
|
|
||||||
|
|
||||||
|
One example of hand-crafted extlinux.conf::
|
||||||
|
|
||||||
|
menu title Select kernel
|
||||||
|
timeout 100
|
||||||
|
|
||||||
|
label Arch with uart devicetree overlay
|
||||||
|
kernel /arch/Image.gz
|
||||||
|
initrd /arch/initramfs-linux.img
|
||||||
|
fdt /dtbs/arch/board.dtb
|
||||||
|
fdtoverlays /dtbs/arch/overlay/uart0-gpio0-1.dtbo
|
||||||
|
append console=ttyS0,115200 console=tty1 rw root=UUID=fc0d0284-ca84-4194-bf8a-4b9da8d66908
|
||||||
|
|
||||||
|
label Arch with uart devicetree overlay but with Boot Loader Specification keys
|
||||||
|
kernel /arch/Image.gz
|
||||||
|
initrd /arch/initramfs-linux.img
|
||||||
|
devicetree /dtbs/arch/board.dtb
|
||||||
|
devicetree-overlay /dtbs/arch/overlay/uart0-gpio0-1.dtbo
|
||||||
|
append console=ttyS0,115200 console=tty1 rw root=UUID=fc0d0284-ca84-4194-bf8a-4b9da8d66908
|
||||||
|
|
||||||
Another hand-crafted network boot configuration file is::
|
Another hand-crafted network boot configuration file is::
|
||||||
|
|
||||||
TIMEOUT 100
|
TIMEOUT 100
|
||||||
|
@ -214,6 +235,11 @@ fdt_addr_r:
|
||||||
|
|
||||||
A size of 1MB for the FDT/DTB seems reasonable.
|
A size of 1MB for the FDT/DTB seems reasonable.
|
||||||
|
|
||||||
|
fdtoverlay_addr_r:
|
||||||
|
Mandatory. The location in RAM where DTB overlays will be temporarily
|
||||||
|
stored and then applied in the load order to the fdt blob stored at the
|
||||||
|
address indicated in the fdt_addr_r environment variable.
|
||||||
|
|
||||||
fdtfile:
|
fdtfile:
|
||||||
Mandatory. the name of the DTB file for the specific board for instance
|
Mandatory. the name of the DTB file for the specific board for instance
|
||||||
the espressobin v5 board the value is "marvell/armada-3720-espressobin.dtb"
|
the espressobin v5 board the value is "marvell/armada-3720-espressobin.dtb"
|
||||||
|
@ -408,7 +434,7 @@ way in future u-boot versions. In particular the <device type>_boot
|
||||||
variables (e.g. mmc_boot, usb_boot) are a strictly internal implementation
|
variables (e.g. mmc_boot, usb_boot) are a strictly internal implementation
|
||||||
detail and must not be used as a public interface.
|
detail and must not be used as a public interface.
|
||||||
|
|
||||||
.. _BootLoaderSpec: http://www.freedesktop.org/wiki/Specifications/BootLoaderSpec/
|
.. _`Boot Loader Specification`: https://systemd.io/BOOT_LOADER_SPECIFICATION/
|
||||||
|
|
||||||
.. sectionauthor:: (C) Copyright 2014 Red Hat Inc.
|
.. sectionauthor:: (C) Copyright 2014 Red Hat Inc.
|
||||||
.. sectionauthor:: Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.
|
.. sectionauthor:: Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.
|
||||||
|
|
49
doc/usage/cmd/cat.rst
Normal file
49
doc/usage/cmd/cat.rst
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
.. SPDX-License-Identifier: GPL-2.0+:
|
||||||
|
|
||||||
|
cat command
|
||||||
|
===============
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
--------
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
cat <interface> <dev[:part]> <file>
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
The cat command prints the file content to standard out.
|
||||||
|
|
||||||
|
interface
|
||||||
|
interface for accessing the block device (mmc, sata, scsi, usb, ....)
|
||||||
|
|
||||||
|
dev
|
||||||
|
device number
|
||||||
|
|
||||||
|
part
|
||||||
|
partition number, defaults to 1
|
||||||
|
|
||||||
|
file
|
||||||
|
path to file
|
||||||
|
|
||||||
|
Example
|
||||||
|
-------
|
||||||
|
|
||||||
|
Here is the output for a example text file:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
=> cat mmc 0:1 hello
|
||||||
|
hello world
|
||||||
|
=>
|
||||||
|
|
||||||
|
Configuration
|
||||||
|
-------------
|
||||||
|
|
||||||
|
The cat command is only available if CONFIG_CMD_CAT=y.
|
||||||
|
|
||||||
|
Return value
|
||||||
|
------------
|
||||||
|
|
||||||
|
The return value $? is set to 0 (true) if the file is readable, otherwise it returns a non-zero error code.
|
50
doc/usage/cmd/temperature.rst
Normal file
50
doc/usage/cmd/temperature.rst
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
.. SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
temperature command
|
||||||
|
===================
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
--------
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
temperature list
|
||||||
|
temperature get [thermal device name]
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
The *temperature* command is used to list thermal sensors and get their
|
||||||
|
readings.
|
||||||
|
|
||||||
|
The 'temperature list' command diplays the available thermal devices.
|
||||||
|
|
||||||
|
The 'temperature get' command is used to get the reading in degrees C from
|
||||||
|
the desired device which is selected by passing its device name.
|
||||||
|
|
||||||
|
thermal device name
|
||||||
|
device name of thermal sensor to select
|
||||||
|
|
||||||
|
Example
|
||||||
|
-------
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
|
||||||
|
=> temperature list
|
||||||
|
| Device | Driver | Parent
|
||||||
|
| tmon@610508110 | sparx5-temp | axi@600000000
|
||||||
|
=>
|
||||||
|
=> temperature get tmon@610508110
|
||||||
|
tmon@610508110: 42 C
|
||||||
|
|
||||||
|
Configuration
|
||||||
|
-------------
|
||||||
|
|
||||||
|
The *temperature* command is only available if CONFIG_CMD_TEMPERATURE=y.
|
||||||
|
|
||||||
|
Return value
|
||||||
|
------------
|
||||||
|
|
||||||
|
The return value $? is set to 0 (true) if the command succeeded and to 1 (false)
|
||||||
|
otherwise.
|
50
doc/usage/cmd/xxd.rst
Normal file
50
doc/usage/cmd/xxd.rst
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
.. SPDX-License-Identifier: GPL-2.0+:
|
||||||
|
|
||||||
|
xxd command
|
||||||
|
===============
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
--------
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
xxd <interface> <dev[:part]> <file>
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
The xxd command prints the file content as hexdump to standard out.
|
||||||
|
|
||||||
|
interface
|
||||||
|
interface for accessing the block device (mmc, sata, scsi, usb, ....)
|
||||||
|
|
||||||
|
dev
|
||||||
|
device number
|
||||||
|
|
||||||
|
part
|
||||||
|
partition number, defaults to 1
|
||||||
|
|
||||||
|
file
|
||||||
|
path to file
|
||||||
|
|
||||||
|
Example
|
||||||
|
-------
|
||||||
|
|
||||||
|
Here is the output for a example text file:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
=> xxd mmc 0:1 hello
|
||||||
|
00000000: 68 65 6c 6c 6f 20 77 6f 72 6c 64 0a 00 01 02 03 hello world.....
|
||||||
|
00000010: 04 05 ..
|
||||||
|
=>
|
||||||
|
|
||||||
|
Configuration
|
||||||
|
-------------
|
||||||
|
|
||||||
|
The xxd command is only available if CONFIG_CMD_XXD=y.
|
||||||
|
|
||||||
|
Return value
|
||||||
|
------------
|
||||||
|
|
||||||
|
The return value $? is set to 0 (true) if the file is readable, otherwise it returns a non-zero error code.
|
|
@ -31,6 +31,7 @@ Shell commands
|
||||||
cmd/bootmeth
|
cmd/bootmeth
|
||||||
cmd/button
|
cmd/button
|
||||||
cmd/bootz
|
cmd/bootz
|
||||||
|
cmd/cat
|
||||||
cmd/cbsysinfo
|
cmd/cbsysinfo
|
||||||
cmd/cls
|
cmd/cls
|
||||||
cmd/conitrace
|
cmd/conitrace
|
||||||
|
@ -67,10 +68,12 @@ Shell commands
|
||||||
cmd/scp03
|
cmd/scp03
|
||||||
cmd/setexpr
|
cmd/setexpr
|
||||||
cmd/size
|
cmd/size
|
||||||
|
cmd/temperature
|
||||||
cmd/tftpput
|
cmd/tftpput
|
||||||
cmd/true
|
cmd/true
|
||||||
cmd/ums
|
cmd/ums
|
||||||
cmd/wdt
|
cmd/wdt
|
||||||
|
cmd/xxd
|
||||||
|
|
||||||
Booting OS
|
Booting OS
|
||||||
----------
|
----------
|
||||||
|
|
|
@ -132,7 +132,7 @@ config DM_BOOTCOUNT_PMIC_PFUZE100
|
||||||
depends on DM_PMIC_PFUZE100
|
depends on DM_PMIC_PFUZE100
|
||||||
help
|
help
|
||||||
Enable support for the bootcounter using PMIC PFUZE100 registers.
|
Enable support for the bootcounter using PMIC PFUZE100 registers.
|
||||||
This works only, if the PMIC is not connected.
|
This works only, if the PMIC is not connected to a battery.
|
||||||
|
|
||||||
config DM_BOOTCOUNT_SPI_FLASH
|
config DM_BOOTCOUNT_SPI_FLASH
|
||||||
bool "Support SPI flash devices as a backing store for bootcount"
|
bool "Support SPI flash devices as a backing store for bootcount"
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
* Philip Oberfichtner <pro@denx.de>
|
* Philip Oberfichtner <pro@denx.de>
|
||||||
*
|
*
|
||||||
* A bootcount driver using the registers MEMA - MEMD on the PFUZE100.
|
* A bootcount driver using the registers MEMA - MEMD on the PFUZE100.
|
||||||
* This works only, if the PMIC is not connected.
|
* This works only, if the PMIC is not connected to a battery.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
|
|
|
@ -1388,10 +1388,10 @@ static int npcm7xx_gpio_reset_persist(struct udevice *dev, unsigned int banknum,
|
||||||
dev_dbg(dev, "set gpio persist, bank %d, enable %d\n", banknum, enable);
|
dev_dbg(dev, "set gpio persist, bank %d, enable %d\n", banknum, enable);
|
||||||
|
|
||||||
if (enable) {
|
if (enable) {
|
||||||
regmap_update_bits(priv->rst_regmap, NPCM7XX_RST_WD0RCR, BIT(num) | CA9C_RESET, 0);
|
regmap_update_bits(priv->rst_regmap, NPCM7XX_RST_WD0RCR, BIT(num), 0);
|
||||||
regmap_update_bits(priv->rst_regmap, NPCM7XX_RST_WD1RCR, BIT(num) | CA9C_RESET, 0);
|
regmap_update_bits(priv->rst_regmap, NPCM7XX_RST_WD1RCR, BIT(num), 0);
|
||||||
regmap_update_bits(priv->rst_regmap, NPCM7XX_RST_WD2RCR, BIT(num) | CA9C_RESET, 0);
|
regmap_update_bits(priv->rst_regmap, NPCM7XX_RST_WD2RCR, BIT(num), 0);
|
||||||
regmap_update_bits(priv->rst_regmap, NPCM7XX_RST_CORSTC, BIT(num) | CA9C_RESET, 0);
|
regmap_update_bits(priv->rst_regmap, NPCM7XX_RST_CORSTC, BIT(num), 0);
|
||||||
} else {
|
} else {
|
||||||
regmap_update_bits(priv->rst_regmap, NPCM7XX_RST_WD0RCR, BIT(num) | CA9C_RESET, BIT(num) | CA9C_RESET);
|
regmap_update_bits(priv->rst_regmap, NPCM7XX_RST_WD0RCR, BIT(num) | CA9C_RESET, BIT(num) | CA9C_RESET);
|
||||||
regmap_update_bits(priv->rst_regmap, NPCM7XX_RST_WD1RCR, BIT(num) | CA9C_RESET, BIT(num) | CA9C_RESET);
|
regmap_update_bits(priv->rst_regmap, NPCM7XX_RST_WD1RCR, BIT(num) | CA9C_RESET, BIT(num) | CA9C_RESET);
|
||||||
|
|
|
@ -237,7 +237,7 @@ enum pinmux_subnode_type {
|
||||||
static const char *alloc_name_with_prefix(const char *name, const char *prefix)
|
static const char *alloc_name_with_prefix(const char *name, const char *prefix)
|
||||||
{
|
{
|
||||||
if (prefix) {
|
if (prefix) {
|
||||||
char *name_with_prefix = malloc(strlen(prefix) + sizeof("pins"));
|
char *name_with_prefix = malloc(strlen(prefix) + strlen(name) + 1);
|
||||||
if (name_with_prefix)
|
if (name_with_prefix)
|
||||||
sprintf(name_with_prefix, "%s%s", prefix, name);
|
sprintf(name_with_prefix, "%s%s", prefix, name);
|
||||||
return name_with_prefix;
|
return name_with_prefix;
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
# Author: Nitin Garg <nitin.garg@freescale.com>
|
# Author: Nitin Garg <nitin.garg@freescale.com>
|
||||||
|
|
||||||
obj-$(CONFIG_DM_THERMAL) += thermal-uclass.o
|
obj-$(CONFIG_DM_THERMAL) += thermal-uclass.o
|
||||||
|
obj-$(CONFIG_SANDBOX) += thermal_sandbox.o
|
||||||
obj-$(CONFIG_IMX_THERMAL) += imx_thermal.o
|
obj-$(CONFIG_IMX_THERMAL) += imx_thermal.o
|
||||||
obj-$(CONFIG_IMX_SCU_THERMAL) += imx_scu_thermal.o
|
obj-$(CONFIG_IMX_SCU_THERMAL) += imx_scu_thermal.o
|
||||||
obj-$(CONFIG_TI_DRA7_THERMAL) += ti-bandgap.o
|
obj-$(CONFIG_TI_DRA7_THERMAL) += ti-bandgap.o
|
||||||
|
|
36
drivers/thermal/thermal_sandbox.c
Normal file
36
drivers/thermal/thermal_sandbox.c
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022 Sartura Ltd.
|
||||||
|
* Written by Robert Marko <robert.marko@sartura.hr>
|
||||||
|
*
|
||||||
|
* Sandbox driver for the thermal uclass.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include <dm.h>
|
||||||
|
#include <thermal.h>
|
||||||
|
|
||||||
|
int sandbox_thermal_get_temp(struct udevice *dev, int *temp)
|
||||||
|
{
|
||||||
|
/* Simply return 100°C */
|
||||||
|
*temp = 100;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct dm_thermal_ops sandbox_thermal_ops = {
|
||||||
|
.get_temp = sandbox_thermal_get_temp,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct udevice_id sandbox_thermal_ids[] = {
|
||||||
|
{ .compatible = "sandbox,thermal" },
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
U_BOOT_DRIVER(thermal_sandbox) = {
|
||||||
|
.name = "thermal-sandbox",
|
||||||
|
.id = UCLASS_THERMAL,
|
||||||
|
.of_match = sandbox_thermal_ids,
|
||||||
|
.ops = &sandbox_thermal_ops,
|
||||||
|
.flags = DM_FLAG_PRE_RELOC,
|
||||||
|
};
|
|
@ -1421,6 +1421,49 @@ struct crypto_algo *image_get_crypto_algo(const char *full_name);
|
||||||
*/
|
*/
|
||||||
struct padding_algo *image_get_padding_algo(const char *name);
|
struct padding_algo *image_get_padding_algo(const char *name);
|
||||||
|
|
||||||
|
#define IMAGE_PRE_LOAD_SIG_MAGIC 0x55425348
|
||||||
|
#define IMAGE_PRE_LOAD_SIG_OFFSET_MAGIC 0
|
||||||
|
#define IMAGE_PRE_LOAD_SIG_OFFSET_IMG_LEN 4
|
||||||
|
#define IMAGE_PRE_LOAD_SIG_OFFSET_SIG 8
|
||||||
|
|
||||||
|
#define IMAGE_PRE_LOAD_PATH "/image/pre-load/sig"
|
||||||
|
#define IMAGE_PRE_LOAD_PROP_ALGO_NAME "algo-name"
|
||||||
|
#define IMAGE_PRE_LOAD_PROP_PADDING_NAME "padding-name"
|
||||||
|
#define IMAGE_PRE_LOAD_PROP_SIG_SIZE "signature-size"
|
||||||
|
#define IMAGE_PRE_LOAD_PROP_PUBLIC_KEY "public-key"
|
||||||
|
#define IMAGE_PRE_LOAD_PROP_MANDATORY "mandatory"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Information in the device-tree about the signature in the header
|
||||||
|
*/
|
||||||
|
struct image_sig_info {
|
||||||
|
char *algo_name; /* Name of the algo (eg: sha256,rsa2048) */
|
||||||
|
char *padding_name; /* Name of the padding */
|
||||||
|
uint8_t *key; /* Public signature key */
|
||||||
|
int key_len; /* Length of the public key */
|
||||||
|
uint32_t sig_size; /* size of the signature (in the header) */
|
||||||
|
int mandatory; /* Set if the signature is mandatory */
|
||||||
|
|
||||||
|
struct image_sign_info sig_info; /* Signature info */
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Header of the signature header
|
||||||
|
*/
|
||||||
|
struct sig_header_s {
|
||||||
|
uint32_t magic;
|
||||||
|
uint32_t version;
|
||||||
|
uint32_t header_size;
|
||||||
|
uint32_t image_size;
|
||||||
|
uint32_t offset_img_sig;
|
||||||
|
uint32_t flags;
|
||||||
|
uint32_t reserved0;
|
||||||
|
uint32_t reserved1;
|
||||||
|
uint8_t sha256_img_sig[SHA256_SUM_LEN];
|
||||||
|
};
|
||||||
|
|
||||||
|
#define SIG_HEADER_LEN (sizeof(struct sig_header_s))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* image_pre_load() - Manage pre load header
|
* image_pre_load() - Manage pre load header
|
||||||
*
|
*
|
||||||
|
|
|
@ -12,7 +12,6 @@ if CRYPT_PW
|
||||||
config CRYPT_PW_SHA256
|
config CRYPT_PW_SHA256
|
||||||
bool "Provide sha256crypt"
|
bool "Provide sha256crypt"
|
||||||
select SHA256
|
select SHA256
|
||||||
select SHA256_ALGO
|
|
||||||
help
|
help
|
||||||
Enables support for the sha256crypt password-hashing algorithm.
|
Enables support for the sha256crypt password-hashing algorithm.
|
||||||
The prefix is "$5$".
|
The prefix is "$5$".
|
||||||
|
|
|
@ -16,3 +16,4 @@ obj-$(CONFIG_CMD_MEM_SEARCH) += mem_search.o
|
||||||
obj-$(CONFIG_CMD_PINMUX) += pinmux.o
|
obj-$(CONFIG_CMD_PINMUX) += pinmux.o
|
||||||
obj-$(CONFIG_CMD_PWM) += pwm.o
|
obj-$(CONFIG_CMD_PWM) += pwm.o
|
||||||
obj-$(CONFIG_CMD_SETEXPR) += setexpr.o
|
obj-$(CONFIG_CMD_SETEXPR) += setexpr.o
|
||||||
|
obj-$(CONFIG_CMD_TEMPERATURE) += temperature.o
|
||||||
|
|
39
test/cmd/temperature.c
Normal file
39
test/cmd/temperature.c
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
/*
|
||||||
|
* Executes tests for temperature command
|
||||||
|
*
|
||||||
|
* Copyright (C) 2022 Sartura Ltd.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include <command.h>
|
||||||
|
#include <dm.h>
|
||||||
|
#include <dm/test.h>
|
||||||
|
#include <test/test.h>
|
||||||
|
#include <test/ut.h>
|
||||||
|
|
||||||
|
static int dm_test_cmd_temperature(struct unit_test_state *uts)
|
||||||
|
{
|
||||||
|
struct udevice *dev;
|
||||||
|
|
||||||
|
ut_assertok(uclass_get_device(UCLASS_THERMAL, 0, &dev));
|
||||||
|
ut_assertnonnull(dev);
|
||||||
|
|
||||||
|
ut_assertok(console_record_reset_enable());
|
||||||
|
|
||||||
|
/* Test that "temperature list" shows the sandbox device */
|
||||||
|
ut_assertok(run_command("temperature list", 0));
|
||||||
|
ut_assert_nextline("| Device | Driver | Parent");
|
||||||
|
ut_assert_nextline("| thermal | thermal-sandbox | root_driver");
|
||||||
|
ut_assert_console_end();
|
||||||
|
|
||||||
|
/* Test that "temperature get thermal" returns expected value */
|
||||||
|
console_record_reset();
|
||||||
|
ut_assertok(run_command("temperature get thermal", 0));
|
||||||
|
ut_assert_nextline("thermal: 100 C");
|
||||||
|
ut_assert_console_end();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
DM_TEST(dm_test_cmd_temperature, UT_TESTF_SCAN_FDT | UT_TESTF_CONSOLE_REC);
|
35
test/py/tests/test_cat/conftest.py
Normal file
35
test/py/tests/test_cat/conftest.py
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
|
"""Fixture for cat command test
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
from subprocess import check_call, CalledProcessError
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
@pytest.fixture(scope='session')
|
||||||
|
def cat_data(u_boot_config):
|
||||||
|
"""Set up a file system to be used in cat tests
|
||||||
|
|
||||||
|
Args:
|
||||||
|
u_boot_config -- U-boot configuration.
|
||||||
|
"""
|
||||||
|
mnt_point = u_boot_config.persistent_data_dir + '/test_cat'
|
||||||
|
image_path = u_boot_config.persistent_data_dir + '/cat.img'
|
||||||
|
|
||||||
|
try:
|
||||||
|
os.mkdir(mnt_point, mode = 0o755)
|
||||||
|
|
||||||
|
with open(mnt_point + '/hello', 'w', encoding = 'ascii') as file:
|
||||||
|
file.write('hello world\n')
|
||||||
|
|
||||||
|
check_call(f'virt-make-fs --partition=gpt --size=+1M --type=vfat {mnt_point} {image_path}',
|
||||||
|
shell=True)
|
||||||
|
|
||||||
|
yield image_path
|
||||||
|
except CalledProcessError:
|
||||||
|
pytest.skip('Setup failed')
|
||||||
|
finally:
|
||||||
|
shutil.rmtree(mnt_point)
|
||||||
|
os.remove(image_path)
|
20
test/py/tests/test_cat/test_cat.py
Normal file
20
test/py/tests/test_cat/test_cat.py
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
|
""" Unit test for cat command
|
||||||
|
"""
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
@pytest.mark.boardspec('sandbox')
|
||||||
|
@pytest.mark.buildconfigspec('cmd_cat')
|
||||||
|
def test_cat(u_boot_console, cat_data):
|
||||||
|
""" Unit test for cat
|
||||||
|
|
||||||
|
Args:
|
||||||
|
u_boot_console -- U-Boot console
|
||||||
|
cat_data -- Path to the disk image used for testing.
|
||||||
|
"""
|
||||||
|
response = u_boot_console.run_command_list([
|
||||||
|
f'host bind 0 {cat_data}',
|
||||||
|
'cat host 0 hello'])
|
||||||
|
assert 'hello world' in response
|
35
test/py/tests/test_xxd/conftest.py
Normal file
35
test/py/tests/test_xxd/conftest.py
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
|
"""Fixture for xxd command test
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
from subprocess import check_call, CalledProcessError
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
@pytest.fixture(scope='session')
|
||||||
|
def xxd_data(u_boot_config):
|
||||||
|
"""Set up a file system to be used in xxd tests
|
||||||
|
|
||||||
|
Args:
|
||||||
|
u_boot_config -- U-boot configuration.
|
||||||
|
"""
|
||||||
|
mnt_point = u_boot_config.persistent_data_dir + '/test_xxd'
|
||||||
|
image_path = u_boot_config.persistent_data_dir + '/xxd.img'
|
||||||
|
|
||||||
|
try:
|
||||||
|
os.mkdir(mnt_point, mode = 0o755)
|
||||||
|
|
||||||
|
with open(mnt_point + '/hello', 'w', encoding = 'ascii') as file:
|
||||||
|
file.write('hello world\n\x00\x01\x02\x03\x04\x05')
|
||||||
|
|
||||||
|
check_call(f'virt-make-fs --partition=gpt --size=+1M --type=vfat {mnt_point} {image_path}',
|
||||||
|
shell=True)
|
||||||
|
|
||||||
|
yield image_path
|
||||||
|
except CalledProcessError:
|
||||||
|
pytest.skip('Setup failed')
|
||||||
|
finally:
|
||||||
|
shutil.rmtree(mnt_point)
|
||||||
|
os.remove(image_path)
|
23
test/py/tests/test_xxd/test_xxd.py
Normal file
23
test/py/tests/test_xxd/test_xxd.py
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
|
""" Unit test for xxd command
|
||||||
|
"""
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
@pytest.mark.boardspec('sandbox')
|
||||||
|
@pytest.mark.buildconfigspec('cmd_xxd')
|
||||||
|
def test_xxd(u_boot_console, xxd_data):
|
||||||
|
""" Unit test for xxd
|
||||||
|
|
||||||
|
Args:
|
||||||
|
u_boot_console -- U-Boot console
|
||||||
|
xxd_data -- Path to the disk image used for testing.
|
||||||
|
"""
|
||||||
|
response = u_boot_console.run_command_list([
|
||||||
|
f'host bind 0 {xxd_data}',
|
||||||
|
'xxd host 0 hello'])
|
||||||
|
|
||||||
|
assert '00000000: 68 65 6c 6c 6f 20 77 6f 72 6c 64 0a 00 01 02 03 hello world.....\r\r\n' + \
|
||||||
|
'00000010: 04 05 ..' \
|
||||||
|
in response
|
|
@ -17,8 +17,6 @@
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
#include <openssl/evp.h>
|
#include <openssl/evp.h>
|
||||||
|
|
||||||
#define IMAGE_PRE_LOAD_PATH "/image/pre-load/sig"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fit_set_hash_value - set hash value in requested has node
|
* fit_set_hash_value - set hash value in requested has node
|
||||||
* @fit: pointer to the FIT format image header
|
* @fit: pointer to the FIT format image header
|
||||||
|
|
Loading…
Reference in a new issue