Marek Vasut | 78ad5b4 | 2022-07-12 17:04:52 +0200 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | |
| 3 | # 0) Generate keys |
| 4 | # |
| 5 | # WARNING: ECDSA keys are only supported by HAB 4.5 and newer (i.e. i.MX8M Plus) |
| 6 | # |
| 7 | # cd /path/to/cst-3.3.1/keys/ |
| 8 | # ./hab4_pki_tree.sh -existing-ca n -use-ecc n -kl 4096 -duration 10 -num-srk 4 -srk-ca y |
| 9 | # cd /path/to/cst-3.3.1/crts/ |
| 10 | # ../linux64/bin/srktool -h 4 -t SRK_1_2_3_4_table.bin -e SRK_1_2_3_4_fuse.bin -d sha256 -c ./SRK1_sha256_4096_65537_v3_ca_crt.pem,./SRK2_sha256_4096_65537_v3_ca_crt.pem,./SRK3_sha256_4096_65537_v3_ca_crt.pem,./SRK4_sha256_4096_65537_v3_ca_crt.pem -f 1 |
| 11 | |
| 12 | # 1) Build U-Boot (e.g. for i.MX8MM) |
| 13 | # |
Marek Vasut | 78ad5b4 | 2022-07-12 17:04:52 +0200 | [diff] [blame] | 14 | # cp -Lv /path/to/arm-trusted-firmware/build/imx8mm/release/bl31.bin . |
| 15 | # cp -Lv /path/to/firmware-imx-8.14/firmware/ddr/synopsys/ddr3* . |
| 16 | # make -j imx8mm_board_defconfig |
| 17 | # make -j`nproc` flash.bin |
| 18 | |
| 19 | # 2) Sign SPL and DRAM blobs |
| 20 | |
| 21 | cp doc/imx/habv4/csf_examples/mx8m/csf_spl.txt csf_spl.tmp |
| 22 | cp doc/imx/habv4/csf_examples/mx8m/csf_fit.txt csf_fit.tmp |
| 23 | |
Tim Harvey | 0c6f3ce | 2023-06-15 08:21:08 -0700 | [diff] [blame] | 24 | # update File Paths from env vars |
| 25 | if ! [ -r $CSF_KEY ]; then |
| 26 | echo "Error: \$CSF_KEY not found" |
| 27 | exit 1 |
| 28 | fi |
| 29 | if ! [ -r $IMG_KEY ]; then |
| 30 | echo "Error: \$IMG_KEY not found" |
| 31 | exit 1 |
| 32 | fi |
| 33 | if ! [ -r $SRK_TABLE ]; then |
| 34 | echo "Error: \$SRK_TABLE not found" |
| 35 | exit 1 |
| 36 | fi |
| 37 | sed -i "s:\$CSF_KEY:$CSF_KEY:" csf_spl.tmp |
| 38 | sed -i "s:\$IMG_KEY:$IMG_KEY:" csf_spl.tmp |
| 39 | sed -i "s:\$SRK_TABLE:$SRK_TABLE:" csf_spl.tmp |
| 40 | sed -i "s:\$CSF_KEY:$CSF_KEY:" csf_fit.tmp |
| 41 | sed -i "s:\$IMG_KEY:$IMG_KEY:" csf_fit.tmp |
| 42 | sed -i "s:\$SRK_TABLE:$SRK_TABLE:" csf_fit.tmp |
| 43 | |
| 44 | # update SPL Blocks |
Marek Vasut | 78ad5b4 | 2022-07-12 17:04:52 +0200 | [diff] [blame] | 45 | spl_block_base=$(printf "0x%x" $(( $(sed -n "/CONFIG_SPL_TEXT_BASE=/ s@.*=@@p" .config) - 0x40)) ) |
| 46 | spl_block_size=$(printf "0x%x" $(stat -tc %s u-boot-spl-ddr.bin)) |
| 47 | sed -i "/Blocks = / s@.*@ Blocks = $spl_block_base 0x0 $spl_block_size \"flash.bin\"@" csf_spl.tmp |
| 48 | |
| 49 | # Generate CSF blob |
| 50 | cst -i csf_spl.tmp -o csf_spl.bin |
| 51 | |
| 52 | # Patch CSF blob into flash.bin |
| 53 | spl_csf_offset=$(xxd -s 24 -l 4 -e flash.bin | cut -d " " -f 2 | sed "s@^@0x@") |
| 54 | spl_bin_offset=$(xxd -s 4 -l 4 -e flash.bin | cut -d " " -f 2 | sed "s@^@0x@") |
| 55 | spl_dd_offset=$((${spl_csf_offset} - ${spl_bin_offset} + 0x40)) |
| 56 | dd if=csf_spl.bin of=flash.bin bs=1 seek=${spl_dd_offset} conv=notrunc |
| 57 | |
| 58 | # 3) Sign u-boot.itb |
| 59 | |
Marek Vasut | a7416eb | 2023-05-28 23:00:30 +0200 | [diff] [blame] | 60 | # fitImage |
| 61 | fit_block_base=$(printf "0x%x" $(sed -n "/CONFIG_SPL_LOAD_FIT_ADDRESS=/ s@.*=@@p" .config) ) |
Marek Vasut | 78ad5b4 | 2022-07-12 17:04:52 +0200 | [diff] [blame] | 62 | fit_block_offset=$(printf "0x%s" $(fdtget -t x u-boot.dtb /binman/imx-boot/uboot offset)) |
Marek Vasut | a7416eb | 2023-05-28 23:00:30 +0200 | [diff] [blame] | 63 | fit_block_size=$(printf "0x%x" $(( ( ( $(stat -tc %s u-boot.itb) + 0x1000 - 0x1 ) & ~(0x1000 - 0x1)) + 0x20 )) ) |
| 64 | sed -i "/Blocks = / s@.*@ Blocks = $fit_block_base $fit_block_offset $fit_block_size \"flash.bin\"@" csf_fit.tmp |
Marek Vasut | 78ad5b4 | 2022-07-12 17:04:52 +0200 | [diff] [blame] | 65 | |
| 66 | # IVT |
| 67 | ivt_ptr_base=$(printf "%08x" ${fit_block_base} | sed "s@\(..\)\(..\)\(..\)\(..\)@0x\4\3\2\1@") |
| 68 | ivt_block_base=$(printf "%08x" $(( ${fit_block_base} + ${fit_block_size} - 0x20 )) | sed "s@\(..\)\(..\)\(..\)\(..\)@0x\4\3\2\1@") |
| 69 | csf_block_base=$(printf "%08x" $(( ${fit_block_base} + ${fit_block_size} )) | sed "s@\(..\)\(..\)\(..\)\(..\)@0x\4\3\2\1@") |
| 70 | ivt_block_offset=$((${fit_block_offset} + ${fit_block_size} - 0x20)) |
| 71 | csf_block_offset=$((${ivt_block_offset} + 0x20)) |
| 72 | |
Marek Vasut | a7416eb | 2023-05-28 23:00:30 +0200 | [diff] [blame] | 73 | echo "0xd1002041 ${ivt_block_base} 0x00000000 0x00000000 0x00000000 ${ivt_block_base} ${csf_block_base} 0x00000000" | xxd -r -p > ivt.bin |
Marek Vasut | 78ad5b4 | 2022-07-12 17:04:52 +0200 | [diff] [blame] | 74 | dd if=ivt.bin of=flash.bin bs=1 seek=${ivt_block_offset} conv=notrunc |
| 75 | |
| 76 | # Generate CSF blob |
| 77 | cst -i csf_fit.tmp -o csf_fit.bin |
| 78 | # Patch CSF blob into flash.bin |
| 79 | dd if=csf_fit.bin of=flash.bin bs=1 seek=${csf_block_offset} conv=notrunc |