Merge git://git.denx.de/u-boot-dm
This commit is contained in:
commit
da54e7e5a9
15
.travis.yml
15
.travis.yml
@ -118,6 +118,20 @@ script:
|
||||
./test/py/test.py --bd ${TEST_PY_BD} ${TEST_PY_ID}
|
||||
-k "${TEST_PY_TEST_SPEC:-not a_test_which_does_not_exist}"
|
||||
--build-dir "$UBOOT_TRAVIS_BUILD_DIR";
|
||||
ret=$?;
|
||||
if [[ $ret -ne 0 ]]; then
|
||||
exit $ret;
|
||||
fi;
|
||||
fi;
|
||||
if [[ -n "${TEST_PY_TOOLS}" ]]; then
|
||||
PYTHONPATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc/pylibfdt"
|
||||
PATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc:${PATH}"
|
||||
./tools/binman/binman -t &&
|
||||
./tools/patman/patman --test &&
|
||||
./tools/buildman/buildman -t &&
|
||||
PYTHONPATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc/pylibfdt"
|
||||
PATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc:${PATH}"
|
||||
./tools/dtoc/dtoc -t;
|
||||
fi
|
||||
|
||||
matrix:
|
||||
@ -295,6 +309,7 @@ matrix:
|
||||
TEST_PY_TEST_SPEC="test_ofplatdata"
|
||||
BUILDMAN="^sandbox$"
|
||||
TOOLCHAIN="x86_64"
|
||||
TEST_PY_TOOLS="yes"
|
||||
- env:
|
||||
- TEST_PY_BD="sandbox_flattree"
|
||||
BUILDMAN="^sandbox_flattree$"
|
||||
|
@ -86,7 +86,7 @@ Example:
|
||||
#address-cells = <1>;
|
||||
|
||||
images {
|
||||
kernel@1 {
|
||||
kernel {
|
||||
description = "ARM64 Linux kernel";
|
||||
data = /incbin/("./arch/arm64/boot/Image.gz");
|
||||
type = "kernel";
|
||||
@ -96,7 +96,7 @@ Example:
|
||||
load = <0x80080000>;
|
||||
entry = <0x80080000>;
|
||||
};
|
||||
fdt@1 {
|
||||
fdt-1 {
|
||||
description = "Flattened Device Tree blob";
|
||||
data = /incbin/("./fsl-ls1043ardb-static.dtb");
|
||||
type = "flat_dt";
|
||||
@ -104,7 +104,7 @@ Example:
|
||||
compression = "none";
|
||||
load = <0x90000000>;
|
||||
};
|
||||
ramdisk@1 {
|
||||
ramdisk {
|
||||
description = "LS1043 Ramdisk";
|
||||
data = /incbin/("./rootfs.cpio.gz");
|
||||
type = "ramdisk";
|
||||
@ -116,12 +116,12 @@ Example:
|
||||
};
|
||||
|
||||
configurations {
|
||||
default = "config@1";
|
||||
config@1 {
|
||||
default = "config-1";
|
||||
config-1 {
|
||||
description = "Boot Linux kernel";
|
||||
kernel = "kernel@1";
|
||||
fdt = "fdt@1";
|
||||
ramdisk = "ramdisk@1";
|
||||
kernel = "kernel";
|
||||
fdt = "fdt-1";
|
||||
ramdisk = "ramdisk";
|
||||
loadables = "fdt", "ramdisk";
|
||||
};
|
||||
};
|
||||
|
@ -30,7 +30,7 @@ phys_addr_t sec_firmware_addr;
|
||||
#define SEC_FIRMWARE_FIT_IMAGE "firmware"
|
||||
#endif
|
||||
#ifndef SEC_FIRMEWARE_FIT_CNF_NAME
|
||||
#define SEC_FIRMEWARE_FIT_CNF_NAME "config@1"
|
||||
#define SEC_FIRMEWARE_FIT_CNF_NAME "config-1"
|
||||
#endif
|
||||
#ifndef SEC_FIRMWARE_TARGET_EL
|
||||
#define SEC_FIRMWARE_TARGET_EL 2
|
||||
|
@ -21,7 +21,7 @@ cat << __HEADER_EOF
|
||||
#address-cells = <1>;
|
||||
|
||||
images {
|
||||
uboot@1 {
|
||||
uboot {
|
||||
description = "U-Boot (64-bit)";
|
||||
data = /incbin/("u-boot-nodtb.bin");
|
||||
type = "standalone";
|
||||
@ -29,7 +29,7 @@ cat << __HEADER_EOF
|
||||
compression = "none";
|
||||
load = <0x4a000000>;
|
||||
};
|
||||
atf@1 {
|
||||
atf {
|
||||
description = "ARM Trusted Firmware";
|
||||
data = /incbin/("$BL31");
|
||||
type = "firmware";
|
||||
@ -44,7 +44,7 @@ cnt=1
|
||||
for dtname in $*
|
||||
do
|
||||
cat << __FDT_IMAGE_EOF
|
||||
fdt@$cnt {
|
||||
fdt_$cnt {
|
||||
description = "$(basename $dtname .dtb)";
|
||||
data = /incbin/("$dtname");
|
||||
type = "flat_dt";
|
||||
@ -57,7 +57,7 @@ done
|
||||
cat << __CONF_HEADER_EOF
|
||||
};
|
||||
configurations {
|
||||
default = "config@1";
|
||||
default = "config_1";
|
||||
|
||||
__CONF_HEADER_EOF
|
||||
|
||||
@ -65,11 +65,11 @@ cnt=1
|
||||
for dtname in $*
|
||||
do
|
||||
cat << __CONF_SECTION_EOF
|
||||
config@$cnt {
|
||||
config_$cnt {
|
||||
description = "$(basename $dtname .dtb)";
|
||||
firmware = "uboot@1";
|
||||
loadables = "atf@1";
|
||||
fdt = "fdt@$cnt";
|
||||
firmware = "uboot";
|
||||
loadables = "atf";
|
||||
fdt = "fdt_$cnt";
|
||||
};
|
||||
__CONF_SECTION_EOF
|
||||
cnt=$((cnt+1))
|
||||
|
@ -330,7 +330,7 @@ static void fit_image_print_verification_data(const void *fit, int noffset,
|
||||
/*
|
||||
* Check subnode name, must be equal to "hash" or "signature".
|
||||
* Multiple hash/signature nodes require unique unit node
|
||||
* names, e.g. hash@1, hash@2, signature@1, signature@2, etc.
|
||||
* names, e.g. hash-1, hash-2, signature-1, signature-2, etc.
|
||||
*/
|
||||
name = fit_get_name(fit, noffset, NULL);
|
||||
if (!strncmp(name, FIT_HASH_NODENAME, strlen(FIT_HASH_NODENAME))) {
|
||||
@ -1111,7 +1111,7 @@ int fit_image_verify(const void *fit, int image_noffset)
|
||||
/*
|
||||
* Check subnode name, must be equal to "hash".
|
||||
* Multiple hash nodes require unique unit node
|
||||
* names, e.g. hash@1, hash@2, etc.
|
||||
* names, e.g. hash-1, hash-2, etc.
|
||||
*/
|
||||
if (!strncmp(name, FIT_HASH_NODENAME,
|
||||
strlen(FIT_HASH_NODENAME))) {
|
||||
@ -1348,15 +1348,15 @@ int fit_check_format(const void *fit)
|
||||
*
|
||||
* / o image-tree
|
||||
* |-o images
|
||||
* | |-o fdt@1
|
||||
* | |-o fdt@2
|
||||
* | |-o fdt-1
|
||||
* | |-o fdt-2
|
||||
* |
|
||||
* |-o configurations
|
||||
* |-o config@1
|
||||
* | |-fdt = fdt@1
|
||||
* |-o config-1
|
||||
* | |-fdt = fdt-1
|
||||
* |
|
||||
* |-o config@2
|
||||
* |-fdt = fdt@2
|
||||
* |-o config-2
|
||||
* |-fdt = fdt-2
|
||||
*
|
||||
* / o U-Boot fdt
|
||||
* |-compatible = "foo,bar", "bim,bam"
|
||||
|
@ -347,7 +347,7 @@ int fit_config_check_sig(const void *fit, int noffset, int required_keynode,
|
||||
|
||||
/*
|
||||
* Each node can generate one region for each sub-node. Allow for
|
||||
* 7 sub-nodes (hash@1, signature@1, etc.) and some extra.
|
||||
* 7 sub-nodes (hash-1, signature-1, etc.) and some extra.
|
||||
*/
|
||||
max_regions = 20 + count * 7;
|
||||
struct fdt_region fdt_regions[max_regions];
|
||||
|
@ -142,7 +142,7 @@ The following is an example for a simple usecase:
|
||||
#address-cells = <1>;
|
||||
|
||||
images {
|
||||
kernel@0 {
|
||||
kernel {
|
||||
description = "linux";
|
||||
data = /incbin/("PATH/TO/YOUR/LINUX/DIR/arch/arm64/boot/Image.gz");
|
||||
type = "kernel";
|
||||
@ -151,44 +151,44 @@ The following is an example for a simple usecase:
|
||||
compression = "gzip";
|
||||
load = <0x82080000>;
|
||||
entry = <0x82080000>;
|
||||
hash@0 {
|
||||
hash-1 {
|
||||
algo = "sha256";
|
||||
};
|
||||
};
|
||||
|
||||
fdt@0 {
|
||||
fdt-1 {
|
||||
description = "fdt";
|
||||
data = /incbin/("PATH/TO/YOUR/LINUX/DIR/arch/arm64/boot/dts/socionext/uniphier-ld20-ref.dtb");
|
||||
type = "flat_dt";
|
||||
arch = "arm64";
|
||||
compression = "none";
|
||||
hash@0 {
|
||||
hash-1 {
|
||||
algo = "sha256";
|
||||
};
|
||||
};
|
||||
|
||||
ramdisk@0 {
|
||||
ramdisk {
|
||||
description = "ramdisk";
|
||||
data = /incbin/("PATH/TO/YOUR/ROOTFS/DIR/rootfs.cpio");
|
||||
type = "ramdisk";
|
||||
arch = "arm64";
|
||||
os = "linux";
|
||||
compression = "none";
|
||||
hash@0 {
|
||||
hash-1 {
|
||||
algo = "sha256";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
configurations {
|
||||
default = "config@0";
|
||||
default = "config-1";
|
||||
|
||||
config@0 {
|
||||
config-1 {
|
||||
description = "Configuration0";
|
||||
kernel = "kernel@0";
|
||||
fdt = "fdt@0";
|
||||
ramdisk = "ramdisk@0";
|
||||
signature@0 {
|
||||
kernel = "kernel";
|
||||
fdt = "fdt-1";
|
||||
ramdisk = "ramdisk";
|
||||
signature-1 {
|
||||
algo = "sha256,rsa2048";
|
||||
key-name-hint = "dev";
|
||||
sign-images = "kernel", "fdt", "ramdisk";
|
||||
@ -268,9 +268,9 @@ If it is successful, you will see messages like follows:
|
||||
|
||||
---------------------------------------->8----------------------------------------
|
||||
## Loading kernel from FIT Image at 84100000 ...
|
||||
Using 'config@0' configuration
|
||||
Using 'config-1' configuration
|
||||
Verifying Hash Integrity ... sha256,rsa2048:dev+ OK
|
||||
Trying 'kernel@0' kernel subimage
|
||||
Trying 'kernel' kernel subimage
|
||||
Description: linux
|
||||
Created: 2017-10-20 14:32:29 UTC
|
||||
Type: Kernel Image
|
||||
@ -285,8 +285,8 @@ If it is successful, you will see messages like follows:
|
||||
Hash value: 82a37b7f11ae55f4e07aa25bf77e4067cb9dc1014d52d6cd4d588f92eee3aaad
|
||||
Verifying Hash Integrity ... sha256+ OK
|
||||
## Loading ramdisk from FIT Image at 84100000 ...
|
||||
Using 'config@0' configuration
|
||||
Trying 'ramdisk@0' ramdisk subimage
|
||||
Using 'config-1' configuration
|
||||
Trying 'ramdisk' ramdisk subimage
|
||||
Description: ramdisk
|
||||
Created: 2017-10-20 14:32:29 UTC
|
||||
Type: RAMDisk Image
|
||||
@ -301,8 +301,8 @@ If it is successful, you will see messages like follows:
|
||||
Hash value: 44980a2874154a2e31ed59222c9f8ea968867637f35c81e4107a984de7014deb
|
||||
Verifying Hash Integrity ... sha256+ OK
|
||||
## Loading fdt from FIT Image at 84100000 ...
|
||||
Using 'config@0' configuration
|
||||
Trying 'fdt@0' fdt subimage
|
||||
Using 'config-1' configuration
|
||||
Trying 'fdt-1' fdt subimage
|
||||
Description: fdt
|
||||
Created: 2017-10-20 14:32:29 UTC
|
||||
Type: Flat Device Tree
|
||||
|
@ -5,7 +5,7 @@
|
||||
#address-cells = <1>;
|
||||
|
||||
images {
|
||||
kernel@1 {
|
||||
kernel {
|
||||
description = "U-Boot mainline";
|
||||
type = "kernel_noload";
|
||||
arch = "arm";
|
||||
@ -14,29 +14,29 @@
|
||||
compression = "none";
|
||||
load = <0>;
|
||||
entry = <0>;
|
||||
hash@2 {
|
||||
hash-2 {
|
||||
algo = "sha1";
|
||||
};
|
||||
};
|
||||
|
||||
fdt@1{
|
||||
fdt-1{
|
||||
description = "rk3288-veryron-jerry.dtb";
|
||||
data = /incbin/("../../b/chromebook_jerry/u-boot.dtb");
|
||||
type = "flat_dt";
|
||||
arch = "arm";
|
||||
compression = "none";
|
||||
hash@1{
|
||||
hash-1{
|
||||
algo = "sha1";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
configurations {
|
||||
default = "config@1";
|
||||
config@1 {
|
||||
default = "config-1";
|
||||
config-1 {
|
||||
description = "Boot U-Boot";
|
||||
kernel = "kernel@1";
|
||||
fdt = "fdt@1";
|
||||
kernel = "kernel";
|
||||
fdt = "fdt-1";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -5,7 +5,7 @@
|
||||
#address-cells = <1>;
|
||||
|
||||
images {
|
||||
kernel@1 {
|
||||
kernel {
|
||||
description = "U-Boot mainline";
|
||||
type = "kernel_noload";
|
||||
arch = "arm";
|
||||
@ -14,29 +14,29 @@
|
||||
compression = "none";
|
||||
load = <0>;
|
||||
entry = <0>;
|
||||
hash@2 {
|
||||
hash-2 {
|
||||
algo = "sha1";
|
||||
};
|
||||
};
|
||||
|
||||
fdt@1{
|
||||
fdt-1{
|
||||
description = "tegra124-nyan-big.dtb";
|
||||
data = /incbin/("../.././b/nyan-big/u-boot.dtb");
|
||||
type = "flat_dt";
|
||||
arch = "arm";
|
||||
compression = "none";
|
||||
hash@1{
|
||||
hash-1{
|
||||
algo = "sha1";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
configurations {
|
||||
default = "config@1";
|
||||
config@1 {
|
||||
default = "config-1";
|
||||
config-1 {
|
||||
description = "Boot U-Boot";
|
||||
kernel = "kernel@1";
|
||||
fdt = "fdt@1";
|
||||
kernel = "kernel";
|
||||
fdt = "fdt-1";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -130,7 +130,7 @@ Put this into a file in that directory called sign.its:
|
||||
#address-cells = <1>;
|
||||
|
||||
images {
|
||||
kernel@1 {
|
||||
kernel {
|
||||
data = /incbin/("Image.lzo");
|
||||
type = "kernel";
|
||||
arch = "arm";
|
||||
@ -138,27 +138,27 @@ Put this into a file in that directory called sign.its:
|
||||
compression = "lzo";
|
||||
load = <0x80008000>;
|
||||
entry = <0x80008000>;
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "sha1";
|
||||
};
|
||||
};
|
||||
fdt@1 {
|
||||
fdt-1 {
|
||||
description = "beaglebone-black";
|
||||
data = /incbin/("am335x-boneblack.dtb");
|
||||
type = "flat_dt";
|
||||
arch = "arm";
|
||||
compression = "none";
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "sha1";
|
||||
};
|
||||
};
|
||||
};
|
||||
configurations {
|
||||
default = "conf@1";
|
||||
conf@1 {
|
||||
kernel = "kernel@1";
|
||||
fdt = "fdt@1";
|
||||
signature@1 {
|
||||
default = "conf-1";
|
||||
conf-1 {
|
||||
kernel = "kernel";
|
||||
fdt = "fdt-1";
|
||||
signature-1 {
|
||||
algo = "sha1,rsa2048";
|
||||
key-name-hint = "dev";
|
||||
sign-images = "fdt", "kernel";
|
||||
@ -211,7 +211,7 @@ You should see something like this:
|
||||
|
||||
FIT description: Beaglebone black
|
||||
Created: Sun Jun 1 12:50:30 2014
|
||||
Image 0 (kernel@1)
|
||||
Image 0 (kernel)
|
||||
Description: unavailable
|
||||
Created: Sun Jun 1 12:50:30 2014
|
||||
Type: Kernel Image
|
||||
@ -223,7 +223,7 @@ Created: Sun Jun 1 12:50:30 2014
|
||||
Entry Point: 0x80008000
|
||||
Hash algo: sha1
|
||||
Hash value: c94364646427e10f423837e559898ef02c97b988
|
||||
Image 1 (fdt@1)
|
||||
Image 1 (fdt-1)
|
||||
Description: beaglebone-black
|
||||
Created: Sun Jun 1 12:50:30 2014
|
||||
Type: Flat Device Tree
|
||||
@ -232,11 +232,11 @@ Created: Sun Jun 1 12:50:30 2014
|
||||
Architecture: ARM
|
||||
Hash algo: sha1
|
||||
Hash value: cb09202f889d824f23b8e4404b781be5ad38a68d
|
||||
Default Configuration: 'conf@1'
|
||||
Configuration 0 (conf@1)
|
||||
Default Configuration: 'conf-1'
|
||||
Configuration 0 (conf-1)
|
||||
Description: unavailable
|
||||
Kernel: kernel@1
|
||||
FDT: fdt@1
|
||||
Kernel: kernel
|
||||
FDT: fdt-1
|
||||
|
||||
|
||||
Now am335x-boneblack-pubkey.dtb contains the public key and image.fit contains
|
||||
@ -251,12 +251,12 @@ which results in:
|
||||
|
||||
Verifying Hash Integrity ... sha1,rsa2048:dev+
|
||||
## Loading kernel from FIT Image at 7fc6ee469000 ...
|
||||
Using 'conf@1' configuration
|
||||
Using 'conf-1' configuration
|
||||
Verifying Hash Integrity ...
|
||||
sha1,rsa2048:dev+
|
||||
OK
|
||||
|
||||
Trying 'kernel@1' kernel subimage
|
||||
Trying 'kernel' kernel subimage
|
||||
Description: unavailable
|
||||
Created: Sun Jun 1 12:50:30 2014
|
||||
Type: Kernel Image
|
||||
@ -274,8 +274,8 @@ OK
|
||||
|
||||
Unimplemented compression type 4
|
||||
## Loading fdt from FIT Image at 7fc6ee469000 ...
|
||||
Using 'conf@1' configuration
|
||||
Trying 'fdt@1' fdt subimage
|
||||
Using 'conf-1' configuration
|
||||
Trying 'fdt-1' fdt subimage
|
||||
Description: beaglebone-black
|
||||
Created: Sun Jun 1 12:50:30 2014
|
||||
Type: Flat Device Tree
|
||||
@ -291,7 +291,7 @@ OK
|
||||
Loading Flat Device Tree ... OK
|
||||
|
||||
## Loading ramdisk from FIT Image at 7fc6ee469000 ...
|
||||
Using 'conf@1' configuration
|
||||
Using 'conf-1' configuration
|
||||
Could not find subimage node
|
||||
|
||||
Signature check OK
|
||||
@ -313,8 +313,8 @@ the above flow works.
|
||||
But it is fun to do this by hand, so you can load image.fit into a hex editor
|
||||
like ghex, and change a byte in the kernel:
|
||||
|
||||
$UOUT/tools/fit_info -f image.fit -n /images/kernel@1 -p data
|
||||
NAME: kernel@1
|
||||
$UOUT/tools/fit_info -f image.fit -n /images/kernel -p data
|
||||
NAME: kernel
|
||||
LEN: 7790938
|
||||
OFF: 168
|
||||
|
||||
@ -324,12 +324,12 @@ fit_check_sign again. You should see something like:
|
||||
|
||||
Verifying Hash Integrity ... sha1,rsa2048:dev+
|
||||
## Loading kernel from FIT Image at 7f5a39571000 ...
|
||||
Using 'conf@1' configuration
|
||||
Using 'conf-1' configuration
|
||||
Verifying Hash Integrity ...
|
||||
sha1,rsa2048:dev+
|
||||
OK
|
||||
|
||||
Trying 'kernel@1' kernel subimage
|
||||
Trying 'kernel' kernel subimage
|
||||
Description: unavailable
|
||||
Created: Sun Jun 1 13:09:21 2014
|
||||
Type: Kernel Image
|
||||
@ -343,12 +343,12 @@ OK
|
||||
Hash value: c94364646427e10f423837e559898ef02c97b988
|
||||
Verifying Hash Integrity ...
|
||||
sha1 error
|
||||
Bad hash value for 'hash@1' hash node in 'kernel@1' image node
|
||||
Bad hash value for 'hash-1' hash node in 'kernel' image node
|
||||
Bad Data Hash
|
||||
|
||||
## Loading fdt from FIT Image at 7f5a39571000 ...
|
||||
Using 'conf@1' configuration
|
||||
Trying 'fdt@1' fdt subimage
|
||||
Using 'conf-1' configuration
|
||||
Trying 'fdt-1' fdt subimage
|
||||
Description: beaglebone-black
|
||||
Created: Sun Jun 1 13:09:21 2014
|
||||
Type: Flat Device Tree
|
||||
@ -364,7 +364,7 @@ OK
|
||||
Loading Flat Device Tree ... OK
|
||||
|
||||
## Loading ramdisk from FIT Image at 7f5a39571000 ...
|
||||
Using 'conf@1' configuration
|
||||
Using 'conf-1' configuration
|
||||
Could not find subimage node
|
||||
|
||||
Signature check Bad (error 1)
|
||||
@ -386,11 +386,11 @@ images
|
||||
configurations
|
||||
|
||||
fdtget -l image.fit /configurations
|
||||
conf@1
|
||||
fdtget -l image.fit /configurations/conf@1
|
||||
signature@1
|
||||
conf-1
|
||||
fdtget -l image.fit /configurations/conf-1
|
||||
signature-1
|
||||
|
||||
fdtget -p image.fit /configurations/conf@1/signature@1
|
||||
fdtget -p image.fit /configurations/conf-1/signature-1
|
||||
hashed-strings
|
||||
hashed-nodes
|
||||
timestamp
|
||||
@ -401,20 +401,20 @@ algo
|
||||
key-name-hint
|
||||
sign-images
|
||||
|
||||
fdtget image.fit /configurations/conf@1/signature@1 hashed-nodes
|
||||
/ /configurations/conf@1 /images/fdt@1 /images/fdt@1/hash@1 /images/kernel@1 /images/kernel@1/hash@1
|
||||
fdtget image.fit /configurations/conf-1/signature-1 hashed-nodes
|
||||
/ /configurations/conf-1 /images/fdt-1 /images/fdt-1/hash /images/kernel /images/kernel/hash-1
|
||||
|
||||
This gives us a bit of a look into the signature that mkimage added. Note you
|
||||
can also use fdtdump to list the entire device tree.
|
||||
|
||||
Say we want to change the kernel that this configuration uses
|
||||
(/images/kernel@1). We could just put a new kernel in the image, but we will
|
||||
(/images/kernel). We could just put a new kernel in the image, but we will
|
||||
need to change the hash to match. Let's simulate that by changing a byte of
|
||||
the hash:
|
||||
|
||||
fdtget -tx image.fit /images/kernel@1/hash@1 value
|
||||
fdtget -tx image.fit /images/kernel/hash-1 value
|
||||
c9436464 6427e10f 423837e5 59898ef0 2c97b988
|
||||
fdtput -tx image.fit /images/kernel@1/hash@1 value c9436464 6427e10f 423837e5 59898ef0 2c97b981
|
||||
fdtput -tx image.fit /images/kernel/hash-1 value c9436464 6427e10f 423837e5 59898ef0 2c97b981
|
||||
|
||||
Now check it again:
|
||||
|
||||
@ -437,7 +437,7 @@ configuration. But that won't work since you are not allowed to change the
|
||||
configuration in any way. Try it with a fresh (valid) image if you like by
|
||||
running the mkimage link again. Then:
|
||||
|
||||
fdtput -p image.fit /configurations/conf@1/signature@2 value fred
|
||||
fdtput -p image.fit /configurations/conf-1/signature-1 value fred
|
||||
$UOUT/tools/fit_check_sign -f image.fit -k am335x-boneblack-pubkey.dtb
|
||||
Verifying Hash Integrity ... -
|
||||
sha1,rsa2048:devrsa_verify_with_keynode: RSA failed to verify: -13
|
||||
@ -521,9 +521,9 @@ U-Boot# ext2load mmc 0:2 82000000 /boot/image.fit
|
||||
7824930 bytes read in 589 ms (12.7 MiB/s)
|
||||
U-Boot# bootm 82000000
|
||||
## Loading kernel from FIT Image at 82000000 ...
|
||||
Using 'conf@1' configuration
|
||||
Using 'conf-1' configuration
|
||||
Verifying Hash Integrity ... sha1,rsa2048:dev+ OK
|
||||
Trying 'kernel@1' kernel subimage
|
||||
Trying 'kernel' kernel subimage
|
||||
Description: unavailable
|
||||
Created: 2014-06-01 19:32:54 UTC
|
||||
Type: Kernel Image
|
||||
@ -538,8 +538,8 @@ U-Boot# bootm 82000000
|
||||
Hash value: c94364646427e10f423837e559898ef02c97b988
|
||||
Verifying Hash Integrity ... sha1+ OK
|
||||
## Loading fdt from FIT Image at 82000000 ...
|
||||
Using 'conf@1' configuration
|
||||
Trying 'fdt@1' fdt subimage
|
||||
Using 'conf-1' configuration
|
||||
Trying 'fdt-1' fdt subimage
|
||||
Description: beaglebone-black
|
||||
Created: 2014-06-01 19:32:54 UTC
|
||||
Type: Flat Device Tree
|
||||
|
@ -138,31 +138,31 @@ unit.
|
||||
|
||||
Examples:
|
||||
|
||||
- boot kernel "kernel@1" stored in a new uImage located at 200000:
|
||||
bootm 200000:kernel@1
|
||||
- boot kernel "kernel-1" stored in a new uImage located at 200000:
|
||||
bootm 200000:kernel-1
|
||||
|
||||
- boot configuration "cfg@1" from a new uImage located at 200000:
|
||||
bootm 200000#cfg@1
|
||||
- boot configuration "cfg-1" from a new uImage located at 200000:
|
||||
bootm 200000#cfg-1
|
||||
|
||||
- boot configuration "cfg@1" with extra "cfg@2" from a new uImage located
|
||||
- boot configuration "cfg-1" with extra "cfg-2" from a new uImage located
|
||||
at 200000:
|
||||
bootm 200000#cfg@1#cfg@2
|
||||
bootm 200000#cfg-1#cfg-2
|
||||
|
||||
- boot "kernel@1" from a new uImage at 200000 with initrd "ramdisk@2" found in
|
||||
- boot "kernel-1" from a new uImage at 200000 with initrd "ramdisk-2" found in
|
||||
some other new uImage stored at address 800000:
|
||||
bootm 200000:kernel@1 800000:ramdisk@2
|
||||
bootm 200000:kernel-1 800000:ramdisk-2
|
||||
|
||||
- boot "kernel@2" from a new uImage at 200000, with initrd "ramdisk@1" and FDT
|
||||
"fdt@1", both stored in some other new uImage located at 800000:
|
||||
bootm 200000:kernel@1 800000:ramdisk@1 800000:fdt@1
|
||||
- boot "kernel-2" from a new uImage at 200000, with initrd "ramdisk-1" and FDT
|
||||
"fdt-1", both stored in some other new uImage located at 800000:
|
||||
bootm 200000:kernel-1 800000:ramdisk-1 800000:fdt-1
|
||||
|
||||
- boot kernel "kernel@2" with initrd "ramdisk@2", both stored in a new uImage
|
||||
- boot kernel "kernel-2" with initrd "ramdisk-2", both stored in a new uImage
|
||||
at address 200000, with a raw FDT blob stored at address 600000:
|
||||
bootm 200000:kernel@2 200000:ramdisk@2 600000
|
||||
bootm 200000:kernel-2 200000:ramdisk-2 600000
|
||||
|
||||
- boot kernel "kernel@2" from new uImage at 200000 with FDT "fdt@1" from the
|
||||
- boot kernel "kernel-2" from new uImage at 200000 with FDT "fdt-1" from the
|
||||
same new uImage:
|
||||
bootm 200000:kernel@2 - 200000:fdt@1
|
||||
bootm 200000:kernel-2 - 200000:fdt-1
|
||||
|
||||
|
||||
Note on current image address
|
||||
@ -186,16 +186,16 @@ current image address is to be used. For example, consider the following
|
||||
commands:
|
||||
|
||||
tftp 200000 /tftpboot/uImage
|
||||
bootm :kernel@1
|
||||
bootm :kernel-1
|
||||
Last command is equivalent to:
|
||||
bootm 200000:kernel@1
|
||||
bootm 200000:kernel-1
|
||||
|
||||
tftp 200000 /tftpboot/uImage
|
||||
bootm 400000:kernel@1 :ramdisk@1
|
||||
bootm 400000:kernel-1 :ramdisk-1
|
||||
Last command is equivalent to:
|
||||
bootm 400000:kernel@1 400000:ramdisk@1
|
||||
bootm 400000:kernel-1 400000:ramdisk-1
|
||||
|
||||
tftp 200000 /tftpboot/uImage
|
||||
bootm :kernel@1 400000:ramdisk@1 :fdt@1
|
||||
bootm :kernel-1 400000:ramdisk-1 :fdt-1
|
||||
Last command is equivalent to:
|
||||
bootm 200000:kernel@1 400000:ramdisk@1 400000:fdt@1
|
||||
bootm 200000:kernel-1 400000:ramdisk-1 400000:fdt-1
|
||||
|
@ -86,7 +86,7 @@ $
|
||||
$ mkimage -l kernel.itb
|
||||
FIT description: Simple image with single Linux kernel
|
||||
Created: Tue Mar 11 17:26:15 2008
|
||||
Image 0 (kernel@1)
|
||||
Image 0 (kernel)
|
||||
Description: Vanilla Linux kernel
|
||||
Type: Kernel Image
|
||||
Compression: gzip compressed
|
||||
@ -99,10 +99,10 @@ Created: Tue Mar 11 17:26:15 2008
|
||||
Hash value: 2ae2bb40
|
||||
Hash algo: sha1
|
||||
Hash value: 3c200f34e2c226ddc789240cca0c59fc54a67cf4
|
||||
Default Configuration: 'config@1'
|
||||
Configuration 0 (config@1)
|
||||
Default Configuration: 'config-1'
|
||||
Configuration 0 (config-1)
|
||||
Description: Boot Linux kernel
|
||||
Kernel: kernel@1
|
||||
Kernel: kernel
|
||||
|
||||
|
||||
The resulting image file kernel.itb can be now transferred to the target,
|
||||
@ -130,7 +130,7 @@ Bytes transferred = 944464 (e6950 hex)
|
||||
FIT image found
|
||||
FIT description: Simple image with single Linux kernel
|
||||
Created: 2008-03-11 16:26:15 UTC
|
||||
Image 0 (kernel@1)
|
||||
Image 0 (kernel)
|
||||
Description: Vanilla Linux kernel
|
||||
Type: Kernel Image
|
||||
Compression: gzip compressed
|
||||
@ -144,15 +144,15 @@ Bytes transferred = 944464 (e6950 hex)
|
||||
Hash value: 2ae2bb40
|
||||
Hash algo: sha1
|
||||
Hash value: 3c200f34e2c226ddc789240cca0c59fc54a67cf4
|
||||
Default Configuration: 'config@1'
|
||||
Configuration 0 (config@1)
|
||||
Default Configuration: 'config-1'
|
||||
Configuration 0 (config-1)
|
||||
Description: Boot Linux kernel
|
||||
Kernel: kernel@1
|
||||
Kernel: kernel
|
||||
|
||||
=> bootm
|
||||
## Booting kernel from FIT Image at 00900000 ...
|
||||
Using 'config@1' configuration
|
||||
Trying 'kernel@1' kernel subimage
|
||||
Using 'config-1' configuration
|
||||
Trying 'kernel' kernel subimage
|
||||
Description: Vanilla Linux kernel
|
||||
Type: Kernel Image
|
||||
Compression: gzip compressed
|
||||
@ -196,7 +196,7 @@ $
|
||||
$ mkimage -l kernel_fdt.itb
|
||||
FIT description: Simple image with single Linux kernel and FDT blob
|
||||
Created: Tue Mar 11 16:29:22 2008
|
||||
Image 0 (kernel@1)
|
||||
Image 0 (kernel)
|
||||
Description: Vanilla Linux kernel
|
||||
Type: Kernel Image
|
||||
Compression: gzip compressed
|
||||
@ -209,7 +209,7 @@ Created: Tue Mar 11 16:29:22 2008
|
||||
Hash value: 2c0cc807
|
||||
Hash algo: sha1
|
||||
Hash value: 264b59935470e42c418744f83935d44cdf59a3bb
|
||||
Image 1 (fdt@1)
|
||||
Image 1 (fdt-1)
|
||||
Description: Flattened Device Tree blob
|
||||
Type: Flat Device Tree
|
||||
Compression: uncompressed
|
||||
@ -219,11 +219,11 @@ Created: Tue Mar 11 16:29:22 2008
|
||||
Hash value: 0d655d71
|
||||
Hash algo: sha1
|
||||
Hash value: 25ab4e15cd4b8a5144610394560d9c318ce52def
|
||||
Default Configuration: 'conf@1'
|
||||
Configuration 0 (conf@1)
|
||||
Default Configuration: 'conf-1'
|
||||
Configuration 0 (conf-1)
|
||||
Description: Boot Linux kernel with FDT blob
|
||||
Kernel: kernel@1
|
||||
FDT: fdt@1
|
||||
Kernel: kernel
|
||||
FDT: fdt-1
|
||||
|
||||
|
||||
The resulting image file kernel_fdt.itb can be now transferred to the target,
|
||||
@ -245,7 +245,7 @@ Bytes transferred = 1109776 (10ef10 hex)
|
||||
FIT image found
|
||||
FIT description: Simple image with single Linux kernel and FDT blob
|
||||
Created: 2008-03-11 15:29:22 UTC
|
||||
Image 0 (kernel@1)
|
||||
Image 0 (kernel)
|
||||
Description: Vanilla Linux kernel
|
||||
Type: Kernel Image
|
||||
Compression: gzip compressed
|
||||
@ -259,7 +259,7 @@ Bytes transferred = 1109776 (10ef10 hex)
|
||||
Hash value: 2c0cc807
|
||||
Hash algo: sha1
|
||||
Hash value: 264b59935470e42c418744f83935d44cdf59a3bb
|
||||
Image 1 (fdt@1)
|
||||
Image 1 (fdt-1)
|
||||
Description: Flattened Device Tree blob
|
||||
Type: Flat Device Tree
|
||||
Compression: uncompressed
|
||||
@ -270,15 +270,15 @@ Bytes transferred = 1109776 (10ef10 hex)
|
||||
Hash value: 0d655d71
|
||||
Hash algo: sha1
|
||||
Hash value: 25ab4e15cd4b8a5144610394560d9c318ce52def
|
||||
Default Configuration: 'conf@1'
|
||||
Configuration 0 (conf@1)
|
||||
Default Configuration: 'conf-1'
|
||||
Configuration 0 (conf-1)
|
||||
Description: Boot Linux kernel with FDT blob
|
||||
Kernel: kernel@1
|
||||
FDT: fdt@1
|
||||
Kernel: kernel
|
||||
FDT: fdt-1
|
||||
=> bootm
|
||||
## Booting kernel from FIT Image at 00900000 ...
|
||||
Using 'conf@1' configuration
|
||||
Trying 'kernel@1' kernel subimage
|
||||
Using 'conf-1' configuration
|
||||
Trying 'kernel' kernel subimage
|
||||
Description: Vanilla Linux kernel
|
||||
Type: Kernel Image
|
||||
Compression: gzip compressed
|
||||
@ -295,8 +295,8 @@ Bytes transferred = 1109776 (10ef10 hex)
|
||||
Verifying Hash Integrity ... crc32+ sha1+ OK
|
||||
Uncompressing Kernel Image ... OK
|
||||
## Flattened Device Tree from FIT Image at 00900000
|
||||
Using 'conf@1' configuration
|
||||
Trying 'fdt@1' FDT blob subimage
|
||||
Using 'conf-1' configuration
|
||||
Trying 'fdt-1' FDT blob subimage
|
||||
Description: Flattened Device Tree blob
|
||||
Type: Flat Device Tree
|
||||
Compression: uncompressed
|
||||
|
@ -9,7 +9,7 @@
|
||||
#address-cells = <1>;
|
||||
|
||||
images {
|
||||
kernel@1 {
|
||||
kernel {
|
||||
description = "Vanilla Linux kernel";
|
||||
data = /incbin/("./vmlinux.bin.gz");
|
||||
type = "kernel";
|
||||
@ -18,20 +18,20 @@
|
||||
compression = "gzip";
|
||||
load = <00000000>;
|
||||
entry = <00000000>;
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "crc32";
|
||||
};
|
||||
hash@2 {
|
||||
hash-2 {
|
||||
algo = "sha1";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
configurations {
|
||||
default = "config@1";
|
||||
config@1 {
|
||||
default = "config-1";
|
||||
config-1 {
|
||||
description = "Boot Linux kernel";
|
||||
kernel = "kernel@1";
|
||||
kernel = "kernel";
|
||||
};
|
||||
};
|
||||
};
|
||||
@ -47,7 +47,7 @@ For x86 a setup node is also required: see x86-fit-boot.txt.
|
||||
#address-cells = <1>;
|
||||
|
||||
images {
|
||||
kernel@1 {
|
||||
kernel {
|
||||
description = "Vanilla Linux kernel";
|
||||
data = /incbin/("./image.bin.lzo");
|
||||
type = "kernel";
|
||||
@ -56,12 +56,12 @@ For x86 a setup node is also required: see x86-fit-boot.txt.
|
||||
compression = "lzo";
|
||||
load = <0x01000000>;
|
||||
entry = <0x00000000>;
|
||||
hash@2 {
|
||||
hash-2 {
|
||||
algo = "sha1";
|
||||
};
|
||||
};
|
||||
|
||||
setup@1 {
|
||||
setup {
|
||||
description = "Linux setup.bin";
|
||||
data = /incbin/("./setup.bin");
|
||||
type = "x86_setup";
|
||||
@ -70,18 +70,18 @@ For x86 a setup node is also required: see x86-fit-boot.txt.
|
||||
compression = "none";
|
||||
load = <0x00090000>;
|
||||
entry = <0x00090000>;
|
||||
hash@2 {
|
||||
hash-2 {
|
||||
algo = "sha1";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
configurations {
|
||||
default = "config@1";
|
||||
config@1 {
|
||||
default = "config-1";
|
||||
config-1 {
|
||||
description = "Boot Linux kernel";
|
||||
kernel = "kernel@1";
|
||||
setup = "setup@1";
|
||||
kernel = "kernel";
|
||||
setup = "setup";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -9,7 +9,7 @@
|
||||
#address-cells = <1>;
|
||||
|
||||
images {
|
||||
kernel@1 {
|
||||
kernel {
|
||||
description = "Vanilla Linux kernel";
|
||||
data = /incbin/("./vmlinux.bin.gz");
|
||||
type = "kernel";
|
||||
@ -18,34 +18,34 @@
|
||||
compression = "gzip";
|
||||
load = <00000000>;
|
||||
entry = <00000000>;
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "crc32";
|
||||
};
|
||||
hash@2 {
|
||||
hash-2 {
|
||||
algo = "sha1";
|
||||
};
|
||||
};
|
||||
fdt@1 {
|
||||
fdt-1 {
|
||||
description = "Flattened Device Tree blob";
|
||||
data = /incbin/("./target.dtb");
|
||||
type = "flat_dt";
|
||||
arch = "ppc";
|
||||
compression = "none";
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "crc32";
|
||||
};
|
||||
hash@2 {
|
||||
hash-2 {
|
||||
algo = "sha1";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
configurations {
|
||||
default = "conf@1";
|
||||
conf@1 {
|
||||
default = "conf-1";
|
||||
conf-1 {
|
||||
description = "Boot Linux kernel with FDT blob";
|
||||
kernel = "kernel@1";
|
||||
fdt = "fdt@1";
|
||||
kernel = "kernel";
|
||||
fdt = "fdt-1";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -10,31 +10,31 @@
|
||||
#address-cells = <1>;
|
||||
|
||||
images {
|
||||
fdt@1 {
|
||||
fdt-1 {
|
||||
description = "zc706";
|
||||
data = /incbin/("/tftpboot/devicetree.dtb");
|
||||
type = "flat_dt";
|
||||
arch = "arm";
|
||||
compression = "none";
|
||||
load = <0x10000000>;
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "md5";
|
||||
};
|
||||
};
|
||||
|
||||
fpga@1 {
|
||||
fpga {
|
||||
description = "FPGA";
|
||||
data = /incbin/("/tftpboot/download.bit");
|
||||
type = "fpga";
|
||||
arch = "arm";
|
||||
compression = "none";
|
||||
load = <0x30000000>;
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "md5";
|
||||
};
|
||||
};
|
||||
|
||||
linux_kernel@1 {
|
||||
linux_kernel {
|
||||
description = "Linux";
|
||||
data = /incbin/("/tftpboot/zImage");
|
||||
type = "kernel";
|
||||
@ -43,25 +43,25 @@
|
||||
compression = "none";
|
||||
load = <0x8000>;
|
||||
entry = <0x8000>;
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "md5";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
configurations {
|
||||
default = "config@2";
|
||||
config@1 {
|
||||
default = "config-2";
|
||||
config-1 {
|
||||
description = "Linux";
|
||||
kernel = "linux_kernel@1";
|
||||
fdt = "fdt@1";
|
||||
kernel = "linux_kernel";
|
||||
fdt = "fdt-1";
|
||||
};
|
||||
|
||||
config@2 {
|
||||
config-2 {
|
||||
description = "Linux with fpga";
|
||||
kernel = "linux_kernel@1";
|
||||
fdt = "fdt@1";
|
||||
fpga = "fpga@1";
|
||||
kernel = "linux_kernel";
|
||||
fdt = "fdt-1";
|
||||
fpga = "fpga";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -10,7 +10,7 @@
|
||||
#address-cells = <1>;
|
||||
|
||||
images {
|
||||
xen_kernel@1 {
|
||||
xen_kernel {
|
||||
description = "xen binary";
|
||||
data = /incbin/("./xen");
|
||||
type = "kernel";
|
||||
@ -19,36 +19,36 @@
|
||||
compression = "none";
|
||||
load = <0xa0000000>;
|
||||
entry = <0xa0000000>;
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "md5";
|
||||
};
|
||||
};
|
||||
|
||||
fdt@1 {
|
||||
fdt-1 {
|
||||
description = "xexpress-ca15 tree blob";
|
||||
data = /incbin/("./vexpress-v2p-ca15-tc1.dtb");
|
||||
type = "flat_dt";
|
||||
arch = "arm";
|
||||
compression = "none";
|
||||
load = <0xb0000000>;
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "md5";
|
||||
};
|
||||
};
|
||||
|
||||
fdt@2 {
|
||||
fdt-2 {
|
||||
description = "xexpress-ca15 tree blob";
|
||||
data = /incbin/("./vexpress-v2p-ca15-tc1.dtb");
|
||||
type = "flat_dt";
|
||||
arch = "arm";
|
||||
compression = "none";
|
||||
load = <0xb0400000>;
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "md5";
|
||||
};
|
||||
};
|
||||
|
||||
linux_kernel@1 {
|
||||
linux_kernel {
|
||||
description = "Linux Image";
|
||||
data = /incbin/("./Image");
|
||||
type = "kernel";
|
||||
@ -57,33 +57,33 @@
|
||||
compression = "none";
|
||||
load = <0xa0000000>;
|
||||
entry = <0xa0000000>;
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "md5";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
configurations {
|
||||
default = "config@2";
|
||||
default = "config-2";
|
||||
|
||||
config@1 {
|
||||
config-1 {
|
||||
description = "Just plain Linux";
|
||||
kernel = "linux_kernel@1";
|
||||
fdt = "fdt@1";
|
||||
kernel = "linux_kernel";
|
||||
fdt = "fdt-1";
|
||||
};
|
||||
|
||||
config@2 {
|
||||
config-2 {
|
||||
description = "Xen one loadable";
|
||||
kernel = "xen_kernel@1";
|
||||
fdt = "fdt@1";
|
||||
loadables = "linux_kernel@1";
|
||||
kernel = "xen_kernel";
|
||||
fdt = "fdt-1";
|
||||
loadables = "linux_kernel";
|
||||
};
|
||||
|
||||
config@3 {
|
||||
config-3 {
|
||||
description = "Xen two loadables";
|
||||
kernel = "xen_kernel@1";
|
||||
fdt = "fdt@1";
|
||||
loadables = "linux_kernel@1", "fdt@2";
|
||||
kernel = "xen_kernel";
|
||||
fdt = "fdt-1";
|
||||
loadables = "linux_kernel", "fdt-2";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -9,7 +9,7 @@
|
||||
#address-cells = <1>;
|
||||
|
||||
images {
|
||||
kernel@1 {
|
||||
kernel-1 {
|
||||
description = "vanilla-2.6.23";
|
||||
data = /incbin/("./vmlinux.bin.gz");
|
||||
type = "kernel";
|
||||
@ -18,15 +18,15 @@
|
||||
compression = "gzip";
|
||||
load = <00000000>;
|
||||
entry = <00000000>;
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "md5";
|
||||
};
|
||||
hash@2 {
|
||||
hash-2 {
|
||||
algo = "sha1";
|
||||
};
|
||||
};
|
||||
|
||||
kernel@2 {
|
||||
kernel-2 {
|
||||
description = "2.6.23-denx";
|
||||
data = /incbin/("./2.6.23-denx.bin.gz");
|
||||
type = "kernel";
|
||||
@ -35,12 +35,12 @@
|
||||
compression = "gzip";
|
||||
load = <00000000>;
|
||||
entry = <00000000>;
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "sha1";
|
||||
};
|
||||
};
|
||||
|
||||
kernel@3 {
|
||||
kernel-3 {
|
||||
description = "2.4.25-denx";
|
||||
data = /incbin/("./2.4.25-denx.bin.gz");
|
||||
type = "kernel";
|
||||
@ -49,12 +49,12 @@
|
||||
compression = "gzip";
|
||||
load = <00000000>;
|
||||
entry = <00000000>;
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "md5";
|
||||
};
|
||||
};
|
||||
|
||||
ramdisk@1 {
|
||||
ramdisk-1 {
|
||||
description = "eldk-4.2-ramdisk";
|
||||
data = /incbin/("./eldk-4.2-ramdisk");
|
||||
type = "ramdisk";
|
||||
@ -63,12 +63,12 @@
|
||||
compression = "gzip";
|
||||
load = <00000000>;
|
||||
entry = <00000000>;
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "sha1";
|
||||
};
|
||||
};
|
||||
|
||||
ramdisk@2 {
|
||||
ramdisk-2 {
|
||||
description = "eldk-3.1-ramdisk";
|
||||
data = /incbin/("./eldk-3.1-ramdisk");
|
||||
type = "ramdisk";
|
||||
@ -77,30 +77,30 @@
|
||||
compression = "gzip";
|
||||
load = <00000000>;
|
||||
entry = <00000000>;
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "crc32";
|
||||
};
|
||||
};
|
||||
|
||||
fdt@1 {
|
||||
fdt-1 {
|
||||
description = "tqm5200-fdt";
|
||||
data = /incbin/("./tqm5200.dtb");
|
||||
type = "flat_dt";
|
||||
arch = "ppc";
|
||||
compression = "none";
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "crc32";
|
||||
};
|
||||
};
|
||||
|
||||
fdt@2 {
|
||||
fdt-2 {
|
||||
description = "tqm5200s-fdt";
|
||||
data = /incbin/("./tqm5200s.dtb");
|
||||
type = "flat_dt";
|
||||
arch = "ppc";
|
||||
compression = "none";
|
||||
load = <00700000>;
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "sha1";
|
||||
};
|
||||
};
|
||||
@ -108,26 +108,26 @@
|
||||
};
|
||||
|
||||
configurations {
|
||||
default = "config@1";
|
||||
default = "config-1";
|
||||
|
||||
config@1 {
|
||||
config-1 {
|
||||
description = "tqm5200 vanilla-2.6.23 configuration";
|
||||
kernel = "kernel@1";
|
||||
ramdisk = "ramdisk@1";
|
||||
fdt = "fdt@1";
|
||||
kernel = "kernel-1";
|
||||
ramdisk = "ramdisk-1";
|
||||
fdt = "fdt-1";
|
||||
};
|
||||
|
||||
config@2 {
|
||||
config-2 {
|
||||
description = "tqm5200s denx-2.6.23 configuration";
|
||||
kernel = "kernel@2";
|
||||
ramdisk = "ramdisk@1";
|
||||
fdt = "fdt@2";
|
||||
kernel = "kernel-2";
|
||||
ramdisk = "ramdisk-1";
|
||||
fdt = "fdt-2";
|
||||
};
|
||||
|
||||
config@3 {
|
||||
config-3 {
|
||||
description = "tqm5200s denx-2.4.25 configuration";
|
||||
kernel = "kernel@3";
|
||||
ramdisk = "ramdisk@2";
|
||||
kernel = "kernel-3";
|
||||
ramdisk = "ramdisk-2";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -45,7 +45,7 @@
|
||||
load = <0x40000>;
|
||||
};
|
||||
|
||||
fdt@1 {
|
||||
fdt-1 {
|
||||
description = "Pine64+ DT";
|
||||
type = "flat_dt";
|
||||
compression = "none";
|
||||
@ -53,7 +53,7 @@
|
||||
arch = "arm64";
|
||||
};
|
||||
|
||||
fdt@2 {
|
||||
fdt-2 {
|
||||
description = "Pine64 DT";
|
||||
type = "flat_dt";
|
||||
compression = "none";
|
||||
@ -79,18 +79,18 @@
|
||||
};
|
||||
|
||||
configurations {
|
||||
default = "config@1";
|
||||
default = "config-1";
|
||||
|
||||
config@1 {
|
||||
config-1 {
|
||||
description = "sun50i-a64-pine64-plus";
|
||||
loadables = "uboot", "atf", "kernel", "initrd";
|
||||
fdt = "fdt@1";
|
||||
fdt = "fdt-1";
|
||||
};
|
||||
|
||||
config@2 {
|
||||
config-2 {
|
||||
description = "sun50i-a64-pine64";
|
||||
loadables = "uboot", "atf", "mgmt-firmware";
|
||||
fdt = "fdt@2";
|
||||
fdt = "fdt-2";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -24,7 +24,7 @@ Without using overlays the configuration would be as follows for every case.
|
||||
/dts-v1/;
|
||||
/ {
|
||||
images {
|
||||
kernel@1 {
|
||||
kernel {
|
||||
data = /incbin/("./zImage");
|
||||
type = "kernel";
|
||||
arch = "arm";
|
||||
@ -32,32 +32,32 @@ Without using overlays the configuration would be as follows for every case.
|
||||
load = <0x82000000>;
|
||||
entry = <0x82000000>;
|
||||
};
|
||||
fdt@1 {
|
||||
fdt-1 {
|
||||
data = /incbin/("./foo-reva.dtb");
|
||||
type = "flat_dt";
|
||||
arch = "arm";
|
||||
};
|
||||
fdt@2 {
|
||||
fdt-2 {
|
||||
data = /incbin/("./foo-revb.dtb");
|
||||
type = "flat_dt";
|
||||
arch = "arm";
|
||||
};
|
||||
fdt@3 {
|
||||
fdt-3 {
|
||||
data = /incbin/("./foo-reva-bar.dtb");
|
||||
type = "flat_dt";
|
||||
arch = "arm";
|
||||
};
|
||||
fdt@4 {
|
||||
fdt-4 {
|
||||
data = /incbin/("./foo-revb-bar.dtb");
|
||||
type = "flat_dt";
|
||||
arch = "arm";
|
||||
};
|
||||
fdt@5 {
|
||||
fdt-5 {
|
||||
data = /incbin/("./foo-revb-baz.dtb");
|
||||
type = "flat_dt";
|
||||
arch = "arm";
|
||||
};
|
||||
fdt@6 {
|
||||
fdt-6 {
|
||||
data = /incbin/("./foo-revb-bar-baz.dtb");
|
||||
type = "flat_dt";
|
||||
arch = "arm";
|
||||
@ -67,28 +67,28 @@ Without using overlays the configuration would be as follows for every case.
|
||||
configurations {
|
||||
default = "foo-reva.dtb;
|
||||
foo-reva.dtb {
|
||||
kernel = "kernel@1";
|
||||
fdt = "fdt@1";
|
||||
kernel = "kernel";
|
||||
fdt = "fdt-1";
|
||||
};
|
||||
foo-revb.dtb {
|
||||
kernel = "kernel@1";
|
||||
fdt = "fdt@2";
|
||||
kernel = "kernel";
|
||||
fdt = "fdt-2";
|
||||
};
|
||||
foo-reva-bar.dtb {
|
||||
kernel = "kernel@1";
|
||||
fdt = "fdt@3";
|
||||
kernel = "kernel";
|
||||
fdt = "fdt-3";
|
||||
};
|
||||
foo-revb-bar.dtb {
|
||||
kernel = "kernel@1";
|
||||
fdt = "fdt@4";
|
||||
kernel = "kernel";
|
||||
fdt = "fdt-4";
|
||||
};
|
||||
foo-revb-baz.dtb {
|
||||
kernel = "kernel@1";
|
||||
fdt = "fdt@5";
|
||||
kernel = "kernel";
|
||||
fdt = "fdt-5";
|
||||
};
|
||||
foo-revb-bar-baz.dtb {
|
||||
kernel = "kernel@1";
|
||||
fdt = "fdt@6";
|
||||
kernel = "kernel";
|
||||
fdt = "fdt-6";
|
||||
};
|
||||
};
|
||||
};
|
||||
@ -117,7 +117,7 @@ explosion problem.
|
||||
/dts-v1/;
|
||||
/ {
|
||||
images {
|
||||
kernel@1 {
|
||||
kernel {
|
||||
data = /incbin/("./zImage");
|
||||
type = "kernel";
|
||||
arch = "arm";
|
||||
@ -125,31 +125,31 @@ explosion problem.
|
||||
load = <0x82000000>;
|
||||
entry = <0x82000000>;
|
||||
};
|
||||
fdt@1 {
|
||||
fdt-1 {
|
||||
data = /incbin/("./foo.dtb");
|
||||
type = "flat_dt";
|
||||
arch = "arm";
|
||||
load = <0x87f00000>;
|
||||
};
|
||||
fdt@2 {
|
||||
fdt-2 {
|
||||
data = /incbin/("./reva.dtbo");
|
||||
type = "flat_dt";
|
||||
arch = "arm";
|
||||
load = <0x87fc0000>;
|
||||
};
|
||||
fdt@3 {
|
||||
fdt-3 {
|
||||
data = /incbin/("./revb.dtbo");
|
||||
type = "flat_dt";
|
||||
arch = "arm";
|
||||
load = <0x87fc0000>;
|
||||
};
|
||||
fdt@4 {
|
||||
fdt-4 {
|
||||
data = /incbin/("./bar.dtbo");
|
||||
type = "flat_dt";
|
||||
arch = "arm";
|
||||
load = <0x87fc0000>;
|
||||
};
|
||||
fdt@5 {
|
||||
fdt-5 {
|
||||
data = /incbin/("./baz.dtbo");
|
||||
type = "flat_dt";
|
||||
arch = "arm";
|
||||
@ -160,34 +160,34 @@ explosion problem.
|
||||
configurations {
|
||||
default = "foo-reva.dtb;
|
||||
foo-reva.dtb {
|
||||
kernel = "kernel@1";
|
||||
fdt = "fdt@1", "fdt@2";
|
||||
kernel = "kernel";
|
||||
fdt = "fdt-1", "fdt-2";
|
||||
};
|
||||
foo-revb.dtb {
|
||||
kernel = "kernel@1";
|
||||
fdt = "fdt@1", "fdt@3";
|
||||
kernel = "kernel";
|
||||
fdt = "fdt-1", "fdt-3";
|
||||
};
|
||||
foo-reva-bar.dtb {
|
||||
kernel = "kernel@1";
|
||||
fdt = "fdt@1", "fdt@2", "fdt@4";
|
||||
kernel = "kernel";
|
||||
fdt = "fdt-1", "fdt-2", "fdt-4";
|
||||
};
|
||||
foo-revb-bar.dtb {
|
||||
kernel = "kernel@1";
|
||||
fdt = "fdt@1", "fdt@3", "fdt@4";
|
||||
kernel = "kernel";
|
||||
fdt = "fdt-1", "fdt-3", "fdt-4";
|
||||
};
|
||||
foo-revb-baz.dtb {
|
||||
kernel = "kernel@1";
|
||||
fdt = "fdt@1", "fdt@3", "fdt@5";
|
||||
kernel = "kernel";
|
||||
fdt = "fdt-1", "fdt-3", "fdt-5";
|
||||
};
|
||||
foo-revb-bar-baz.dtb {
|
||||
kernel = "kernel@1";
|
||||
fdt = "fdt@1", "fdt@3", "fdt@4", "fdt@5";
|
||||
kernel = "kernel";
|
||||
fdt = "fdt-1", "fdt-3", "fdt-4", "fdt-5";
|
||||
};
|
||||
bar {
|
||||
fdt = "fdt@4";
|
||||
fdt = "fdt-4";
|
||||
};
|
||||
baz {
|
||||
fdt = "fdt@5";
|
||||
fdt = "fdt-5";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -5,7 +5,7 @@
|
||||
#address-cells = <1>;
|
||||
|
||||
images {
|
||||
kernel@1 {
|
||||
kernel {
|
||||
data = /incbin/("test-kernel.bin");
|
||||
type = "kernel_noload";
|
||||
arch = "sandbox";
|
||||
@ -14,28 +14,28 @@
|
||||
load = <0x4>;
|
||||
entry = <0x8>;
|
||||
kernel-version = <1>;
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "sha1";
|
||||
};
|
||||
};
|
||||
fdt@1 {
|
||||
fdt-1 {
|
||||
description = "snow";
|
||||
data = /incbin/("sandbox-kernel.dtb");
|
||||
type = "flat_dt";
|
||||
arch = "sandbox";
|
||||
compression = "none";
|
||||
fdt-version = <1>;
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "sha1";
|
||||
};
|
||||
};
|
||||
};
|
||||
configurations {
|
||||
default = "conf@1";
|
||||
conf@1 {
|
||||
kernel = "kernel@1";
|
||||
fdt = "fdt@1";
|
||||
signature@1 {
|
||||
default = "conf-1";
|
||||
conf-1 {
|
||||
kernel = "kernel";
|
||||
fdt = "fdt-1";
|
||||
signature {
|
||||
algo = "sha1,rsa2048";
|
||||
key-name-hint = "dev";
|
||||
sign-images = "fdt", "kernel";
|
||||
|
@ -5,7 +5,7 @@
|
||||
#address-cells = <1>;
|
||||
|
||||
images {
|
||||
kernel@1 {
|
||||
kernel {
|
||||
data = /incbin/("test-kernel.bin");
|
||||
type = "kernel_noload";
|
||||
arch = "sandbox";
|
||||
@ -14,29 +14,29 @@
|
||||
load = <0x4>;
|
||||
entry = <0x8>;
|
||||
kernel-version = <1>;
|
||||
signature@1 {
|
||||
signature {
|
||||
algo = "sha1,rsa2048";
|
||||
key-name-hint = "dev";
|
||||
};
|
||||
};
|
||||
fdt@1 {
|
||||
fdt-1 {
|
||||
description = "snow";
|
||||
data = /incbin/("sandbox-kernel.dtb");
|
||||
type = "flat_dt";
|
||||
arch = "sandbox";
|
||||
compression = "none";
|
||||
fdt-version = <1>;
|
||||
signature@1 {
|
||||
signature {
|
||||
algo = "sha1,rsa2048";
|
||||
key-name-hint = "dev";
|
||||
};
|
||||
};
|
||||
};
|
||||
configurations {
|
||||
default = "conf@1";
|
||||
conf@1 {
|
||||
kernel = "kernel@1";
|
||||
fdt = "fdt@1";
|
||||
default = "conf-1";
|
||||
conf-1 {
|
||||
kernel = "kernel";
|
||||
fdt = "fdt-1";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -83,7 +83,7 @@ Device Tree Bindings
|
||||
The following properties are required in the FIT's signature node(s) to
|
||||
allow the signer to operate. These should be added to the .its file.
|
||||
Signature nodes sit at the same level as hash nodes and are called
|
||||
signature@1, signature@2, etc.
|
||||
signature-1, signature-2, etc.
|
||||
|
||||
- algo: Algorithm name (e.g. "sha1,rsa2048")
|
||||
|
||||
@ -118,9 +118,9 @@ For config bindings, these properties are added by the signer:
|
||||
- hashed-nodes: A list of nodes which were hashed by the signer. Each is
|
||||
a string - the full path to node. A typical value might be:
|
||||
|
||||
hashed-nodes = "/", "/configurations/conf@1", "/images/kernel@1",
|
||||
"/images/kernel@1/hash@1", "/images/fdt@1",
|
||||
"/images/fdt@1/hash@1";
|
||||
hashed-nodes = "/", "/configurations/conf-1", "/images/kernel",
|
||||
"/images/kernel/hash-1", "/images/fdt-1",
|
||||
"/images/fdt-1/hash-1";
|
||||
|
||||
- hashed-strings: The start and size of the string region of the FIT that
|
||||
was hashed
|
||||
@ -178,44 +178,44 @@ As an example, consider this FIT:
|
||||
|
||||
/ {
|
||||
images {
|
||||
kernel@1 {
|
||||
kernel-1 {
|
||||
data = <data for kernel1>
|
||||
signature@1 {
|
||||
signature-1 {
|
||||
algo = "sha1,rsa2048";
|
||||
value = <...kernel signature 1...>
|
||||
};
|
||||
};
|
||||
kernel@2 {
|
||||
kernel-2 {
|
||||
data = <data for kernel2>
|
||||
signature@1 {
|
||||
signature-1 {
|
||||
algo = "sha1,rsa2048";
|
||||
value = <...kernel signature 2...>
|
||||
};
|
||||
};
|
||||
fdt@1 {
|
||||
fdt-1 {
|
||||
data = <data for fdt1>;
|
||||
signature@1 {
|
||||
signature-1 {
|
||||
algo = "sha1,rsa2048";
|
||||
vaue = <...fdt signature 1...>
|
||||
};
|
||||
};
|
||||
fdt@2 {
|
||||
fdt-2 {
|
||||
data = <data for fdt2>;
|
||||
signature@1 {
|
||||
signature-1 {
|
||||
algo = "sha1,rsa2048";
|
||||
vaue = <...fdt signature 2...>
|
||||
};
|
||||
};
|
||||
};
|
||||
configurations {
|
||||
default = "conf@1";
|
||||
conf@1 {
|
||||
kernel = "kernel@1";
|
||||
fdt = "fdt@1";
|
||||
default = "conf-1";
|
||||
conf-1 {
|
||||
kernel = "kernel-1";
|
||||
fdt = "fdt-1";
|
||||
};
|
||||
conf@1 {
|
||||
kernel = "kernel@2";
|
||||
fdt = "fdt@2";
|
||||
conf-1 {
|
||||
kernel = "kernel-2";
|
||||
fdt = "fdt-2";
|
||||
};
|
||||
};
|
||||
};
|
||||
@ -224,18 +224,18 @@ Since both kernels are signed it is easy for an attacker to add a new
|
||||
configuration 3 with kernel 1 and fdt 2:
|
||||
|
||||
configurations {
|
||||
default = "conf@1";
|
||||
conf@1 {
|
||||
kernel = "kernel@1";
|
||||
fdt = "fdt@1";
|
||||
default = "conf-1";
|
||||
conf-1 {
|
||||
kernel = "kernel-1";
|
||||
fdt = "fdt-1";
|
||||
};
|
||||
conf@1 {
|
||||
kernel = "kernel@2";
|
||||
fdt = "fdt@2";
|
||||
conf-1 {
|
||||
kernel = "kernel-2";
|
||||
fdt = "fdt-2";
|
||||
};
|
||||
conf@3 {
|
||||
kernel = "kernel@1";
|
||||
fdt = "fdt@2";
|
||||
conf-3 {
|
||||
kernel = "kernel-1";
|
||||
fdt = "fdt-2";
|
||||
};
|
||||
};
|
||||
|
||||
@ -250,49 +250,49 @@ So the above example is adjusted to look like this:
|
||||
|
||||
/ {
|
||||
images {
|
||||
kernel@1 {
|
||||
kernel-1 {
|
||||
data = <data for kernel1>
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "sha1";
|
||||
value = <...kernel hash 1...>
|
||||
};
|
||||
};
|
||||
kernel@2 {
|
||||
kernel-2 {
|
||||
data = <data for kernel2>
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "sha1";
|
||||
value = <...kernel hash 2...>
|
||||
};
|
||||
};
|
||||
fdt@1 {
|
||||
fdt-1 {
|
||||
data = <data for fdt1>;
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "sha1";
|
||||
value = <...fdt hash 1...>
|
||||
};
|
||||
};
|
||||
fdt@2 {
|
||||
fdt-2 {
|
||||
data = <data for fdt2>;
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "sha1";
|
||||
value = <...fdt hash 2...>
|
||||
};
|
||||
};
|
||||
};
|
||||
configurations {
|
||||
default = "conf@1";
|
||||
conf@1 {
|
||||
kernel = "kernel@1";
|
||||
fdt = "fdt@1";
|
||||
signature@1 {
|
||||
default = "conf-1";
|
||||
conf-1 {
|
||||
kernel = "kernel-1";
|
||||
fdt = "fdt-1";
|
||||
signature-1 {
|
||||
algo = "sha1,rsa2048";
|
||||
value = <...conf 1 signature...>;
|
||||
};
|
||||
};
|
||||
conf@2 {
|
||||
kernel = "kernel@2";
|
||||
fdt = "fdt@2";
|
||||
signature@1 {
|
||||
conf-2 {
|
||||
kernel = "kernel-2";
|
||||
fdt = "fdt-2";
|
||||
signature-1 {
|
||||
algo = "sha1,rsa2048";
|
||||
value = <...conf 1 signature...>;
|
||||
};
|
||||
@ -303,11 +303,11 @@ So the above example is adjusted to look like this:
|
||||
|
||||
You can see that we have added hashes for all images (since they are no
|
||||
longer signed), and a signature to each configuration. In the above example,
|
||||
mkimage will sign configurations/conf@1, the kernel and fdt that are
|
||||
pointed to by the configuration (/images/kernel@1, /images/kernel@1/hash@1,
|
||||
/images/fdt@1, /images/fdt@1/hash@1) and the root structure of the image
|
||||
mkimage will sign configurations/conf-1, the kernel and fdt that are
|
||||
pointed to by the configuration (/images/kernel-1, /images/kernel-1/hash-1,
|
||||
/images/fdt-1, /images/fdt-1/hash-1) and the root structure of the image
|
||||
(so that it isn't possible to add or remove root nodes). The signature is
|
||||
written into /configurations/conf@1/signature@1/value. It can easily be
|
||||
written into /configurations/conf-1/signature-1/value. It can easily be
|
||||
verified later even if the FIT has been signed with other keys in the
|
||||
meantime.
|
||||
|
||||
|
@ -102,15 +102,15 @@ Root node of the uImage Tree should have the following layout:
|
||||
|
|
||||
o images
|
||||
| |
|
||||
| o image@1 {...}
|
||||
| o image@2 {...}
|
||||
| o image-1 {...}
|
||||
| o image-2 {...}
|
||||
| ...
|
||||
|
|
||||
o configurations
|
||||
|- default = "conf@1"
|
||||
|- default = "conf-1"
|
||||
|
|
||||
o conf@1 {...}
|
||||
o conf@2 {...}
|
||||
o conf-1 {...}
|
||||
o conf-2 {...}
|
||||
...
|
||||
|
||||
|
||||
@ -142,7 +142,7 @@ Root node of the uImage Tree should have the following layout:
|
||||
This node is a container node for component sub-image nodes. Each sub-node of
|
||||
the '/images' node should have the following layout:
|
||||
|
||||
o image@1
|
||||
o image-1
|
||||
|- description = "component sub-image description"
|
||||
|- data = /incbin/("path/to/data/file.bin")
|
||||
|- type = "sub-image type name"
|
||||
@ -152,8 +152,8 @@ the '/images' node should have the following layout:
|
||||
|- load = <00000000>
|
||||
|- entry = <00000000>
|
||||
|
|
||||
o hash@1 {...}
|
||||
o hash@2 {...}
|
||||
o hash-1 {...}
|
||||
o hash-2 {...}
|
||||
...
|
||||
|
||||
Mandatory properties:
|
||||
@ -183,14 +183,14 @@ the '/images' node should have the following layout:
|
||||
property of the root node. Mandatory for types: "standalone" and "kernel".
|
||||
|
||||
Optional nodes:
|
||||
- hash@1 : Each hash sub-node represents separate hash or checksum
|
||||
- hash-1 : Each hash sub-node represents separate hash or checksum
|
||||
calculated for node's data according to specified algorithm.
|
||||
|
||||
|
||||
5) Hash nodes
|
||||
-------------
|
||||
|
||||
o hash@1
|
||||
o hash-1
|
||||
|- algo = "hash or checksum algorithm name"
|
||||
|- value = [hash or checksum value]
|
||||
|
||||
@ -212,8 +212,8 @@ The 'configurations' node has has the following structure:
|
||||
o configurations
|
||||
|- default = "default configuration sub-node unit name"
|
||||
|
|
||||
o config@1 {...}
|
||||
o config@2 {...}
|
||||
o config-1 {...}
|
||||
o config-2 {...}
|
||||
...
|
||||
|
||||
|
||||
@ -231,7 +231,7 @@ o configurations
|
||||
|
||||
Each configuration has the following structure:
|
||||
|
||||
o config@1
|
||||
o config-1
|
||||
|- description = "configuration description"
|
||||
|- kernel = "kernel sub-node unit name"
|
||||
|- ramdisk = "ramdisk sub-node unit name"
|
||||
|
@ -9,34 +9,34 @@
|
||||
#address-cells = <1>;
|
||||
|
||||
images {
|
||||
update@1 {
|
||||
update-1 {
|
||||
description = "Linux kernel binary";
|
||||
data = /incbin/("./vmlinux.bin.gz");
|
||||
compression = "none";
|
||||
type = "firmware";
|
||||
load = <FF700000>;
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "sha1";
|
||||
};
|
||||
};
|
||||
update@2 {
|
||||
update-2 {
|
||||
description = "Ramdisk image";
|
||||
data = /incbin/("./ramdisk_image.gz");
|
||||
compression = "none";
|
||||
type = "firmware";
|
||||
load = <FF8E0000>;
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "sha1";
|
||||
};
|
||||
};
|
||||
|
||||
update@3 {
|
||||
update-3 {
|
||||
description = "FDT blob";
|
||||
data = /incbin/("./blob.fdt");
|
||||
compression = "none";
|
||||
type = "firmware";
|
||||
load = <FFAC0000>;
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "sha1";
|
||||
};
|
||||
};
|
||||
|
@ -10,13 +10,13 @@
|
||||
#address-cells = <1>;
|
||||
|
||||
images {
|
||||
update@1 {
|
||||
update-1 {
|
||||
description = "U-Boot binary";
|
||||
data = /incbin/("./u-boot.bin");
|
||||
compression = "none";
|
||||
type = "firmware";
|
||||
load = <FFFC0000>;
|
||||
hash@1 {
|
||||
hash-1 {
|
||||
algo = "sha1";
|
||||
};
|
||||
};
|
||||
|
@ -197,7 +197,7 @@ You can take a look at the resulting fit file if you like:
|
||||
$ dumpimage -l image.fit
|
||||
FIT description: Simple image with single Linux kernel on x86
|
||||
Created: Tue Oct 7 10:57:24 2014
|
||||
Image 0 (kernel@1)
|
||||
Image 0 (kernel)
|
||||
Description: Vanilla Linux kernel
|
||||
Created: Tue Oct 7 10:57:24 2014
|
||||
Type: Kernel Image
|
||||
@ -209,7 +209,7 @@ Created: Tue Oct 7 10:57:24 2014
|
||||
Entry Point: 0x00000000
|
||||
Hash algo: sha1
|
||||
Hash value: 446b5163ebfe0fb6ee20cbb7a8501b263cd92392
|
||||
Image 1 (setup@1)
|
||||
Image 1 (setup)
|
||||
Description: Linux setup.bin
|
||||
Created: Tue Oct 7 10:57:24 2014
|
||||
Type: x86 setup.bin
|
||||
@ -217,10 +217,10 @@ Created: Tue Oct 7 10:57:24 2014
|
||||
Data Size: 12912 Bytes = 12.61 kB = 0.01 MB
|
||||
Hash algo: sha1
|
||||
Hash value: a1f2099cf47ff9816236cd534c77af86e713faad
|
||||
Default Configuration: 'config@1'
|
||||
Configuration 0 (config@1)
|
||||
Default Configuration: 'config-1'
|
||||
Configuration 0 (config-1)
|
||||
Description: Boot Linux kernel
|
||||
Kernel: kernel@1
|
||||
Kernel: kernel
|
||||
|
||||
|
||||
Booting the FIT
|
||||
|
@ -578,7 +578,7 @@ int boot_get_ramdisk(int argc, char * const argv[], bootm_headers_t *images,
|
||||
* boot_get_loadable() will take the given FIT configuration, and look
|
||||
* for a field named "loadables". Loadables, is a list of elements in
|
||||
* the FIT given as strings. exe:
|
||||
* loadables = "linux_kernel@1", "fdt@2";
|
||||
* loadables = "linux_kernel", "fdt-2";
|
||||
* this function will attempt to parse each string, and load the
|
||||
* corresponding element from the FIT into memory. Once placed,
|
||||
* no aditional actions are taken.
|
||||
@ -604,10 +604,10 @@ int boot_get_setup_fit(bootm_headers_t *images, uint8_t arch,
|
||||
* @param images Boot images structure
|
||||
* @param addr Address of FIT in memory
|
||||
* @param fit_unamep On entry this is the requested image name
|
||||
* (e.g. "kernel@1") or NULL to use the default. On exit
|
||||
* (e.g. "kernel") or NULL to use the default. On exit
|
||||
* points to the selected image name
|
||||
* @param fit_uname_configp On entry this is the requested configuration
|
||||
* name (e.g. "conf@1") or NULL to use the default. On
|
||||
* name (e.g. "conf-1") or NULL to use the default. On
|
||||
* exit points to the selected configuration name.
|
||||
* @param arch Expected architecture (IH_ARCH_...)
|
||||
* @param datap Returns address of loaded image
|
||||
@ -632,10 +632,10 @@ int boot_get_fdt_fit(bootm_headers_t *images, ulong addr,
|
||||
* @param images Boot images structure
|
||||
* @param addr Address of FIT in memory
|
||||
* @param fit_unamep On entry this is the requested image name
|
||||
* (e.g. "kernel@1") or NULL to use the default. On exit
|
||||
* (e.g. "kernel") or NULL to use the default. On exit
|
||||
* points to the selected image name
|
||||
* @param fit_uname_configp On entry this is the requested configuration
|
||||
* name (e.g. "conf@1") or NULL to use the default. On
|
||||
* name (e.g. "conf-1") or NULL to use the default. On
|
||||
* exit points to the selected configuration name.
|
||||
* @param arch Expected architecture (IH_ARCH_...)
|
||||
* @param image_type Required image type (IH_TYPE_...). If this is
|
||||
@ -658,25 +658,25 @@ int fit_image_load(bootm_headers_t *images, ulong addr,
|
||||
/**
|
||||
* fit_get_node_from_config() - Look up an image a FIT by type
|
||||
*
|
||||
* This looks in the selected conf@ node (images->fit_uname_cfg) for a
|
||||
* This looks in the selected conf- node (images->fit_uname_cfg) for a
|
||||
* particular image type (e.g. "kernel") and then finds the image that is
|
||||
* referred to.
|
||||
*
|
||||
* For example, for something like:
|
||||
*
|
||||
* images {
|
||||
* kernel@1 {
|
||||
* kernel {
|
||||
* ...
|
||||
* };
|
||||
* };
|
||||
* configurations {
|
||||
* conf@1 {
|
||||
* kernel = "kernel@1";
|
||||
* conf-1 {
|
||||
* kernel = "kernel";
|
||||
* };
|
||||
* };
|
||||
*
|
||||
* the function will return the node offset of the kernel@1 node, assuming
|
||||
* that conf@1 is the chosen configuration.
|
||||
* that conf-1 is the chosen configuration.
|
||||
*
|
||||
* @param images Boot images structure
|
||||
* @param prop_name Property name to look up (FIT_..._PROP)
|
||||
@ -1022,10 +1022,10 @@ int fit_conf_get_node(const void *fit, const char *conf_uname);
|
||||
* @noffset: Offset of conf@xxx node to check
|
||||
* @prop_name: Property to read from the conf node
|
||||
*
|
||||
* The conf@ nodes contain references to other nodes, using properties
|
||||
* like 'kernel = "kernel@1"'. Given such a property name (e.g. "kernel"),
|
||||
* The conf- nodes contain references to other nodes, using properties
|
||||
* like 'kernel = "kernel"'. Given such a property name (e.g. "kernel"),
|
||||
* return the offset of the node referred to (e.g. offset of node
|
||||
* "/images/kernel@1".
|
||||
* "/images/kernel".
|
||||
*/
|
||||
int fit_conf_get_prop_node(const void *fit, int noffset,
|
||||
const char *prop_name);
|
||||
|
15
test/run
15
test/run
@ -17,6 +17,21 @@ run_test ./test/py/test.py --bd sandbox_spl --build -k \
|
||||
# Run tests for the flat DT version of sandbox
|
||||
./test/py/test.py --bd sandbox_flattree --build
|
||||
|
||||
DTC_DIR=build-sandbox_spl/scripts/dtc
|
||||
|
||||
PYTHONPATH=${DTC_DIR}/pylibfdt DTC=${DTC_DIR}/dtc run_test \
|
||||
./tools/binman/binman -t
|
||||
run_test ./tools/patman/patman --test
|
||||
run_test ./tools/buildman/buildman -t
|
||||
PYTHONPATH=${DTC_DIR}/pylibfdt DTC=${DTC_DIR}/dtc run_test ./tools/dtoc/dtoc -t
|
||||
|
||||
# This needs you to set up Python test coverage tools.
|
||||
# To enable Python test coverage on Debian-type distributions (e.g. Ubuntu):
|
||||
# $ sudo apt-get install python-pip python-pytest
|
||||
# $ sudo pip install coverage
|
||||
PYTHONPATH=${DTC_DIR}/pylibfdt DTC=${DTC_DIR}/dtc run_test \
|
||||
./tools/binman/binman -T
|
||||
|
||||
if [ $result == 0 ]; then
|
||||
echo "Tests passed!"
|
||||
else
|
||||
|
@ -536,6 +536,10 @@ entry contents.
|
||||
Most of the time such essoteric behaviour is not needed, but it can be
|
||||
essential for complex images.
|
||||
|
||||
If you need to specify a particular device-tree compiler to use, you can define
|
||||
the DTC environment variable. This can be useful when the system dtc is too
|
||||
old.
|
||||
|
||||
|
||||
History / Credits
|
||||
-----------------
|
||||
|
@ -79,7 +79,8 @@ def EnsureCompiled(fname):
|
||||
'-W', 'no-unit_address_vs_reg']
|
||||
args.extend(search_list)
|
||||
args.append(dts_input)
|
||||
command.Run('dtc', *args)
|
||||
dtc = os.environ.get('DTC') or 'dtc'
|
||||
command.Run(dtc, *args)
|
||||
return dtb_output
|
||||
|
||||
def GetInt(node, propname, default=None):
|
||||
|
@ -185,7 +185,7 @@ static void get_basename(char *str, int size, const char *fname)
|
||||
* fit_write_images() - Write out a list of images to the FIT
|
||||
*
|
||||
* We always include the main image (params->datafile). If there are device
|
||||
* tree files, we include an fdt@ node for each of those too.
|
||||
* tree files, we include an fdt- node for each of those too.
|
||||
*/
|
||||
static int fit_write_images(struct image_tool_params *params, char *fdt)
|
||||
{
|
||||
@ -199,7 +199,7 @@ static int fit_write_images(struct image_tool_params *params, char *fdt)
|
||||
|
||||
/* First the main image */
|
||||
typename = genimg_get_type_short_name(params->fit_image_type);
|
||||
snprintf(str, sizeof(str), "%s@1", typename);
|
||||
snprintf(str, sizeof(str), "%s-1", typename);
|
||||
fdt_begin_node(fdt, str);
|
||||
fdt_property_string(fdt, "description", params->imagename);
|
||||
fdt_property_string(fdt, "type", typename);
|
||||
@ -225,7 +225,7 @@ static int fit_write_images(struct image_tool_params *params, char *fdt)
|
||||
for (cont = params->content_head; cont; cont = cont->next) {
|
||||
if (cont->type != IH_TYPE_FLATDT)
|
||||
continue;
|
||||
snprintf(str, sizeof(str), "%s@%d", FIT_FDT_PROP, ++upto);
|
||||
snprintf(str, sizeof(str), "%s-%d", FIT_FDT_PROP, ++upto);
|
||||
fdt_begin_node(fdt, str);
|
||||
|
||||
get_basename(str, sizeof(str), cont->fname);
|
||||
@ -243,7 +243,7 @@ static int fit_write_images(struct image_tool_params *params, char *fdt)
|
||||
|
||||
/* And a ramdisk file if available */
|
||||
if (params->fit_ramdisk) {
|
||||
fdt_begin_node(fdt, FIT_RAMDISK_PROP "@1");
|
||||
fdt_begin_node(fdt, FIT_RAMDISK_PROP "-1");
|
||||
|
||||
fdt_property_string(fdt, "type", FIT_RAMDISK_PROP);
|
||||
fdt_property_string(fdt, "os", genimg_get_os_short_name(params->os));
|
||||
@ -277,41 +277,41 @@ static void fit_write_configs(struct image_tool_params *params, char *fdt)
|
||||
int upto;
|
||||
|
||||
fdt_begin_node(fdt, "configurations");
|
||||
fdt_property_string(fdt, "default", "conf@1");
|
||||
fdt_property_string(fdt, "default", "conf-1");
|
||||
|
||||
upto = 0;
|
||||
for (cont = params->content_head; cont; cont = cont->next) {
|
||||
if (cont->type != IH_TYPE_FLATDT)
|
||||
continue;
|
||||
typename = genimg_get_type_short_name(cont->type);
|
||||
snprintf(str, sizeof(str), "conf@%d", ++upto);
|
||||
snprintf(str, sizeof(str), "conf-%d", ++upto);
|
||||
fdt_begin_node(fdt, str);
|
||||
|
||||
get_basename(str, sizeof(str), cont->fname);
|
||||
fdt_property_string(fdt, "description", str);
|
||||
|
||||
typename = genimg_get_type_short_name(params->fit_image_type);
|
||||
snprintf(str, sizeof(str), "%s@1", typename);
|
||||
snprintf(str, sizeof(str), "%s-1", typename);
|
||||
fdt_property_string(fdt, typename, str);
|
||||
|
||||
if (params->fit_ramdisk)
|
||||
fdt_property_string(fdt, FIT_RAMDISK_PROP,
|
||||
FIT_RAMDISK_PROP "@1");
|
||||
FIT_RAMDISK_PROP "-1");
|
||||
|
||||
snprintf(str, sizeof(str), FIT_FDT_PROP "@%d", upto);
|
||||
snprintf(str, sizeof(str), FIT_FDT_PROP "-%d", upto);
|
||||
fdt_property_string(fdt, FIT_FDT_PROP, str);
|
||||
fdt_end_node(fdt);
|
||||
}
|
||||
|
||||
if (!upto) {
|
||||
fdt_begin_node(fdt, "conf@1");
|
||||
fdt_begin_node(fdt, "conf-1");
|
||||
typename = genimg_get_type_short_name(params->fit_image_type);
|
||||
snprintf(str, sizeof(str), "%s@1", typename);
|
||||
snprintf(str, sizeof(str), "%s-1", typename);
|
||||
fdt_property_string(fdt, typename, str);
|
||||
|
||||
if (params->fit_ramdisk)
|
||||
fdt_property_string(fdt, FIT_RAMDISK_PROP,
|
||||
FIT_RAMDISK_PROP "@1");
|
||||
FIT_RAMDISK_PROP "-1");
|
||||
|
||||
fdt_end_node(fdt);
|
||||
}
|
||||
|
@ -270,16 +270,16 @@ static int fit_image_process_sig(const char *keydir, void *keydest,
|
||||
*
|
||||
* Input component image node structure:
|
||||
*
|
||||
* o image@1 (at image_noffset)
|
||||
* o image-1 (at image_noffset)
|
||||
* | - data = [binary data]
|
||||
* o hash@1
|
||||
* o hash-1
|
||||
* |- algo = "sha1"
|
||||
*
|
||||
* Output component image node structure:
|
||||
*
|
||||
* o image@1 (at image_noffset)
|
||||
* o image-1 (at image_noffset)
|
||||
* | - data = [binary data]
|
||||
* o hash@1
|
||||
* o hash-1
|
||||
* |- algo = "sha1"
|
||||
* |- value = sha1(data)
|
||||
*
|
||||
@ -321,7 +321,7 @@ int fit_image_add_verification_data(const char *keydir, void *keydest,
|
||||
/*
|
||||
* Check subnode name, must be equal to "hash" or "signature".
|
||||
* Multiple hash nodes require unique unit node
|
||||
* names, e.g. hash@1, hash@2, signature@1, etc.
|
||||
* names, e.g. hash-1, hash-2, signature-1, etc.
|
||||
*/
|
||||
node_name = fit_get_name(fit, noffset, NULL);
|
||||
if (!strncmp(node_name, FIT_HASH_NODENAME,
|
||||
|
Loading…
Reference in New Issue
Block a user