docs: board: ti: Fit signature signing
Add documentation for signing secondary platforms as a part of enabling the fit signature signing in u-boot. Signed-off-by: Manorit Chawdhry <m-chawdhry@ti.com>
This commit is contained in:
parent
42b2cf2e52
commit
b18a04f533
|
|
@ -240,3 +240,148 @@ wakeup and main domain and to boot to the U-Boot prompt
|
|||
|
||||
| `tispl.bin`
|
||||
| `u-boot.img`
|
||||
|
||||
|
||||
|
||||
Fit Signature Signing
|
||||
---------------------
|
||||
|
||||
K3 Platforms have fit signature signing enabled by default on their primary
|
||||
platforms. Here we'll take an example for creating fit image for J721e platform
|
||||
and the same can be extended to other platforms
|
||||
|
||||
1. Describing FIT source
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
/ {
|
||||
description = "Kernel fitImage for j721e-hs-evm";
|
||||
#address-cells = <1>;
|
||||
|
||||
images {
|
||||
kernel-1 {
|
||||
description = "Linux kernel";
|
||||
data = /incbin/("Image");
|
||||
type = "kernel";
|
||||
arch = "arm64";
|
||||
os = "linux";
|
||||
compression = "none";
|
||||
load = <0x80080000>;
|
||||
entry = <0x80080000>;
|
||||
hash-1 {
|
||||
algo = "sha512";
|
||||
};
|
||||
|
||||
};
|
||||
fdt-ti_k3-j721e-common-proc-board.dtb {
|
||||
description = "Flattened Device Tree blob";
|
||||
data = /incbin/("k3-j721e-common-proc-board.dtb");
|
||||
type = "flat_dt";
|
||||
arch = "arm64";
|
||||
compression = "none";
|
||||
load = <0x83000000>;
|
||||
hash-1 {
|
||||
algo = "sha512";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
configurations {
|
||||
default = "conf-ti_k3-j721e-common-proc-board.dtb";
|
||||
conf-ti_k3-j721e-common-proc-board.dtb {
|
||||
description = "Linux kernel, FDT blob";
|
||||
fdt = "fdt-ti_k3-j721e-common-proc-board.dtb";
|
||||
kernel = "kernel-1";
|
||||
signature-1 {
|
||||
algo = "sha512,rsa4096";
|
||||
key-name-hint = "custMpk";
|
||||
sign-images = "kernel", "fdt";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
You would require to change the '/incbin/' lines to point to the respective
|
||||
files in your local machine and the key-name-hint also needs to be changed
|
||||
if you are using some other key other than the TI dummy key that we are
|
||||
using for this example.
|
||||
|
||||
2. Compile U-boot for the respective board
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
make O=build/a72 CROSS_COMPILE=aarch64-none-linux-gnu- ARCH=arm
|
||||
BL31=/path/to/bl31.bin TEE=/path/to/bl32.bin
|
||||
BINMAN_INDIRS="/path/to/ti-linux-firmware" -j15
|
||||
|
||||
.. note::
|
||||
|
||||
The changes only affect a72 binaries so the example just builds that
|
||||
|
||||
3. Sign the fit image and embed the dtb in uboot
|
||||
|
||||
Now once the build is done, you'll have a dtb for your board that you'll
|
||||
be passing to mkimage for signing the fitImage and embedding the key in
|
||||
the u-boot dtb.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
mkimage -r -f fitImage.its -k $UBOOT_PATH/board/ti/keys -K
|
||||
$UBOOT_PATH/build/a72/dts/dt.dtb
|
||||
|
||||
For signing a secondary platform, pass the -K parameter to that DTB
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
mkimage -f fitImage.its -k $UBOOT_PATH/board/ti/keys -K
|
||||
$UBOOT_PATH/build/a72/arch/arm/dts/k3-j721e-sk.dtb
|
||||
|
||||
.. note::
|
||||
|
||||
If changing `CONFIG_DEFAULT_DEVICE_TREE` to the secondary platform,
|
||||
binman changes would also be required so that correct dtb gets packaged.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
diff --git a/arch/arm/dts/k3-j721e-binman.dtsi b/arch/arm/dts/k3-j721e-binman.dtsi
|
||||
index 673be646b1e3..752fa805fe8d 100644
|
||||
--- a/arch/arm/dts/k3-j721e-binman.dtsi
|
||||
+++ b/arch/arm/dts/k3-j721e-binman.dtsi
|
||||
@@ -299,8 +299,8 @@
|
||||
#define SPL_J721E_SK_DTB "spl/dts/k3-j721e-sk.dtb"
|
||||
|
||||
#define UBOOT_NODTB "u-boot-nodtb.bin"
|
||||
-#define J721E_EVM_DTB "u-boot.dtb"
|
||||
-#define J721E_SK_DTB "arch/arm/dts/k3-j721e-sk.dtb"
|
||||
+#define J721E_EVM_DTB "arch/arm/dts/k3-j721e-common-proc-board.dtb"
|
||||
+#define J721E_SK_DTB "u-boot.dtb"
|
||||
|
||||
5. Rebuilt u-boot
|
||||
|
||||
This is required so that the modified dtb gets updated in u-boot.img
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
make O=build/a72 CROSS_COMPILE=aarch64-none-linux-gnu- ARCH=arm
|
||||
BL31=/path/to/bl31.bin TEE=/path/to/bl32.bin
|
||||
BINMAN_INDIRS="/path/to/ti-linux-firmware" -j15
|
||||
|
||||
6. (Optional) Enabled FIT_SIGNATURE_ENFORCED
|
||||
|
||||
By default u-boot will boot up the fit image without any authentication as
|
||||
such if the public key is not embedded properly, to check if the public key
|
||||
nodes are proper you can enable FIT_SIGNATURE_ENFORCED that would not rely
|
||||
on the dtb for anything else then the signature node for checking the fit
|
||||
image, rest other things will be enforced such as the property of
|
||||
required-keys. This is not an extensive check so do manual checks also
|
||||
|
||||
This is by default enabled for devices with TI_SECURE_DEVICE enabled.
|
||||
|
||||
.. note::
|
||||
|
||||
The devices now also have distroboot enabled so if the fit image doesn't
|
||||
work then the fallback to normal distroboot will be there on hs devices,
|
||||
this will need to be explicitly disabled by changing the boot_targets.
|
||||
|
|
|
|||
Loading…
Reference in New Issue