[u-boot] rk322x: enable trust os image merge.
1. trust os image merger depend on CONFIG_MERGER_TRUSTOS.
2. loaderimage tools add function merger uboot and trust image.
3. tos bin file config by RK322XTOS.ini.
Change-Id: I6b47c506bf0bbe8b8db81cca9af047577efc0714
Signed-off-by: Firefly <service@t-firefly.com>
(cherry picked from commit 28e9c99049c59d882daf4551bf64bf87d2689a21)
This commit is contained in:
@ -912,12 +912,17 @@ UBOOTVERSION := $(UBOOTVERSION)$(if $(RKCHIP),-$(RKCHIP))$(if $(RK_UBOOT_VERSION
|
||||
|
||||
RK_SUBFIX = $(if $(RK_UBOOT_VERSION),.$(RK_UBOOT_VERSION)).bin
|
||||
|
||||
ifdef CONFIG_MERGER_TRUSTOS
|
||||
RK_TOS_BIN ?= `sed -n "/TOS=/s/TOS=//p" ./tools/rk_tools/RKTRUST/$(RKCHIP)TOS.ini|tr -d '\r'`
|
||||
endif
|
||||
|
||||
RKLoader_uboot.bin: u-boot.bin
|
||||
ifdef CONFIG_SECOND_LEVEL_BOOTLOADER
|
||||
$(if $(CONFIG_MERGER_MINILOADER), ./tools/boot_merger ./tools/rk_tools/RKBOOT/$(RKCHIP)MINIALL.ini &&) \
|
||||
$(if $(CONFIG_MERGER_TRUSTIMAGE), ./tools/trust_merger $(if $(CONFIG_RK_TRUSTOS), --subfix) \
|
||||
./tools/rk_tools/RKTRUST/$(RKCHIP)TRUST.ini &&) \
|
||||
./tools/loaderimage --pack u-boot.bin uboot.img
|
||||
$(if $(CONFIG_MERGER_TRUSTOS), ./tools/loaderimage --pack --trustos $(RK_TOS_BIN) trust.img &&) \
|
||||
./tools/loaderimage --pack --uboot u-boot.bin uboot.img
|
||||
else
|
||||
./tools/boot_merger --subfix "$(RK_SUBFIX)" ./tools/rk_tools/RKBOOT/$(RKCHIP).ini
|
||||
endif # CONFIG_SECOND_LEVEL_BOOTLOADER
|
||||
|
||||
@ -53,6 +53,7 @@
|
||||
#endif /* CONFIG_RKCHIP_RK3128 */
|
||||
|
||||
#if defined(CONFIG_RKCHIP_RK322X)
|
||||
#define CONFIG_MERGER_TRUSTOS
|
||||
#define CONFIG_SECUREBOOT_CRYPTO
|
||||
#define CONFIG_RK_PSCI
|
||||
#define CONFIG_RK_DCF
|
||||
|
||||
@ -12,55 +12,76 @@
|
||||
|
||||
extern uint32_t crc32_rk (uint32_t, const unsigned char *, uint32_t);
|
||||
|
||||
#define MODE_PACK 0
|
||||
#define MODE_UNPACK 1
|
||||
#define UBOOT_NUM 4
|
||||
#define UBOOT_MAX_SIZE 1024*1024
|
||||
#define U_BOOT_VERSION_STRING U_BOOT_VERSION " (" U_BOOT_DATE " - " \
|
||||
U_BOOT_TIME ")" CONFIG_IDENT_STRING
|
||||
/* pack or unpack */
|
||||
#define MODE_PACK 0
|
||||
#define MODE_UNPACK 1
|
||||
|
||||
#define LOADER_MAGIC_SIZE 16
|
||||
#define LOADER_HASH_SIZE 32
|
||||
#define CMD_LINE_SIZE 512
|
||||
/* image type */
|
||||
#define IMAGE_UBOOT 0
|
||||
#define IMAGE_TRUST 1
|
||||
|
||||
#define RK_UBOOT_MAGIC "LOADER "
|
||||
#define RK_UBOOT_SIGN_TAG 0x4E474953
|
||||
#define RK_UBOOT_SIGN_LEN 256
|
||||
typedef struct tag_second_loader_hdr
|
||||
{
|
||||
uint8_t magic[LOADER_MAGIC_SIZE]; // "LOADER "
|
||||
/* magic and hash size */
|
||||
#define LOADER_MAGIC_SIZE 16
|
||||
#define LOADER_HASH_SIZE 32
|
||||
|
||||
uint32_t loader_load_addr; /* physical load addr ,default is 0x60000000*/
|
||||
uint32_t loader_load_size; /* size in bytes */
|
||||
uint32_t crc32; /* crc32 */
|
||||
uint32_t hash_len; /* 20 or 32 , 0 is no hash*/
|
||||
uint8_t hash[LOADER_HASH_SIZE]; /* sha */
|
||||
/* uboot image config */
|
||||
#define UBOOT_NAME "uboot"
|
||||
#define UBOOT_NUM 4
|
||||
#define UBOOT_MAX_SIZE 1024 * 1024
|
||||
#define UBOOT_VERSION_STRING U_BOOT_VERSION " (" U_BOOT_DATE " - " \
|
||||
U_BOOT_TIME ")" CONFIG_IDENT_STRING
|
||||
|
||||
#define RK_UBOOT_MAGIC "LOADER "
|
||||
#define RK_UBOOT_RUNNING_ADDR CONFIG_SYS_TEXT_BASE
|
||||
|
||||
/* trust image config */
|
||||
#define TRUST_NAME "trustos"
|
||||
#define TRUST_NUM 4
|
||||
#define TRUST_MAX_SIZE 1024 * 1024
|
||||
#define TRUST_VERSION_STRING "Trust os"
|
||||
|
||||
#define RK_TRUST_MAGIC "TOS "
|
||||
#define RK_TRUST_RUNNING_ADDR (CONFIG_RAM_PHY_START + SZ_128M + SZ_4M)
|
||||
|
||||
typedef struct tag_second_loader_hdr {
|
||||
uint8_t magic[LOADER_MAGIC_SIZE]; /* magic */
|
||||
|
||||
uint32_t loader_load_addr; /* physical load addr */
|
||||
uint32_t loader_load_size; /* size in bytes */
|
||||
uint32_t crc32; /* crc32 */
|
||||
uint32_t hash_len; /* 20 or 32 , 0 is no hash*/
|
||||
uint8_t hash[LOADER_HASH_SIZE]; /* sha */
|
||||
|
||||
uint8_t reserved[1024-32-32];
|
||||
uint32_t signTag; /* 0x4E474953 */
|
||||
uint32_t signlen; /* maybe 128 or 256 */
|
||||
uint8_t rsaHash[256]; /* maybe 128 or 256, using max size 256 */
|
||||
uint32_t signTag; /* 0x4E474953 */
|
||||
uint32_t signlen; /* maybe 128 or 256 */
|
||||
uint8_t rsaHash[256]; /* maybe 128 or 256, using max size 256 */
|
||||
uint8_t reserved2[2048-1024-256-8];
|
||||
}second_loader_hdr;
|
||||
} second_loader_hdr;
|
||||
|
||||
|
||||
void usage(const char *prog)
|
||||
{
|
||||
fprintf(stderr, "Usage: %s [--pack|--unpack] file\n", prog);
|
||||
fprintf(stderr, "Usage: %s [--pack|--unpack] [--uboot|--trustos] file_in file_out\n", prog);
|
||||
}
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
int mode, size, i;
|
||||
FILE *fi, *fo;
|
||||
second_loader_hdr hdr;
|
||||
char *buf = 0;
|
||||
int mode, image;
|
||||
int max_size, max_num;
|
||||
int size, i;
|
||||
uint32_t loader_addr;
|
||||
char *magic, *version, *name;
|
||||
FILE *fi, *fo;
|
||||
second_loader_hdr hdr;
|
||||
char *buf = 0;
|
||||
|
||||
if (argc < 4) {
|
||||
if (argc < 5) {
|
||||
usage(argv[0]);
|
||||
exit (EXIT_FAILURE);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
/* pack or unpack */
|
||||
if (!strcmp(argv[1], "--pack"))
|
||||
mode = MODE_PACK;
|
||||
else if (!strcmp(argv[1], "--unpack"))
|
||||
@ -70,54 +91,85 @@ int main (int argc, char *argv[])
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
fi = fopen(argv[2], "rb");
|
||||
/* uboot or trust */
|
||||
if (!strcmp(argv[2], "--uboot")) {
|
||||
image = IMAGE_UBOOT;
|
||||
} else if (!strcmp(argv[2], "--trustos")) {
|
||||
image = IMAGE_TRUST;
|
||||
} else {
|
||||
usage(argv[0]);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
/* config image information */
|
||||
if (image == IMAGE_UBOOT) {
|
||||
name = UBOOT_NAME;
|
||||
magic = RK_UBOOT_MAGIC;
|
||||
version = UBOOT_VERSION_STRING;
|
||||
max_size = UBOOT_MAX_SIZE;
|
||||
max_num = UBOOT_NUM;
|
||||
loader_addr = RK_UBOOT_RUNNING_ADDR;
|
||||
} else if (image == IMAGE_TRUST) {
|
||||
name = TRUST_NAME;
|
||||
magic = RK_TRUST_MAGIC;
|
||||
version = TRUST_VERSION_STRING;
|
||||
max_size = TRUST_MAX_SIZE;
|
||||
max_num = TRUST_NUM;
|
||||
loader_addr = RK_TRUST_RUNNING_ADDR;
|
||||
} else {
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
/* file in */
|
||||
fi = fopen(argv[3], "rb");
|
||||
if (!fi) {
|
||||
perror(argv[2]);
|
||||
exit (EXIT_FAILURE);
|
||||
perror(argv[3]);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
fo = fopen(argv[3], "wb");
|
||||
/* file out */
|
||||
fo = fopen(argv[4], "wb");
|
||||
if (!fo) {
|
||||
perror(argv[3]);
|
||||
perror(argv[4]);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
buf = calloc(UBOOT_MAX_SIZE, UBOOT_NUM);
|
||||
buf = calloc(max_size, max_num);
|
||||
if (!buf) {
|
||||
perror(argv[3]);
|
||||
perror(argv[4]);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
//memset(buf, 0, UBOOT_NUM*UBOOT_MAX_SIZE);
|
||||
if(mode == MODE_PACK){
|
||||
printf("pack input %s \n", argv[2]);
|
||||
fseek( fi, 0, SEEK_END );
|
||||
|
||||
if (mode == MODE_PACK) {
|
||||
printf("pack input %s \n", argv[3]);
|
||||
fseek(fi, 0, SEEK_END);
|
||||
size = ftell(fi);
|
||||
fseek( fi, 0, SEEK_SET );
|
||||
printf("pack file size:%d \n", size);
|
||||
if(size > UBOOT_MAX_SIZE - sizeof(second_loader_hdr)){
|
||||
perror(argv[3]);
|
||||
fseek(fi, 0, SEEK_SET);
|
||||
printf("pack file size: %d \n", size);
|
||||
if (size > max_size - sizeof(second_loader_hdr)) {
|
||||
perror(argv[4]);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
memset(&hdr, 0, sizeof(second_loader_hdr));
|
||||
strcpy((char *)hdr.magic, RK_UBOOT_MAGIC);
|
||||
hdr.loader_load_addr = CONFIG_SYS_TEXT_BASE;
|
||||
strcpy((char *)hdr.magic, magic);
|
||||
hdr.loader_load_addr = loader_addr;
|
||||
hdr.loader_load_size = size;
|
||||
if (!fread(buf + sizeof(second_loader_hdr), size, 1, fi)) {
|
||||
if (!fread(buf + sizeof(second_loader_hdr), size, 1, fi))
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
hdr.crc32 = crc32_rk(0, (const unsigned char *)buf + sizeof(second_loader_hdr), size);
|
||||
printf("crc = 0x%08x\n", hdr.crc32);
|
||||
|
||||
#ifndef CONFIG_SECUREBOOT_SHA256
|
||||
SHA_CTX ctx;
|
||||
uint8_t* sha;
|
||||
uint8_t *sha;
|
||||
hdr.hash_len = (SHA_DIGEST_SIZE > LOADER_HASH_SIZE) ? LOADER_HASH_SIZE : SHA_DIGEST_SIZE;
|
||||
SHA_init(&ctx);
|
||||
SHA_update(&ctx, buf + sizeof(second_loader_hdr), size);
|
||||
SHA_update(&ctx, &hdr.loader_load_addr, sizeof(hdr.loader_load_addr));
|
||||
SHA_update(&ctx, &hdr.loader_load_size, sizeof(hdr.loader_load_size));
|
||||
SHA_update(&ctx, &hdr.hash_len, sizeof(hdr.hash_len));
|
||||
sha = (uint8_t*)SHA_final(&ctx);
|
||||
sha = (uint8_t *)SHA_final(&ctx);
|
||||
memcpy(hdr.hash, sha, hdr.hash_len);
|
||||
#else
|
||||
sha256_context ctx;
|
||||
@ -135,24 +187,25 @@ int main (int argc, char *argv[])
|
||||
memcpy(hdr.hash, hash, hdr.hash_len);
|
||||
#endif /* CONFIG_SECUREBOOT_SHA256 */
|
||||
|
||||
printf("uboot version:%s\n",U_BOOT_VERSION_STRING);
|
||||
printf("%s version: %s\n", name, version);
|
||||
memcpy(buf, &hdr, sizeof(second_loader_hdr));
|
||||
for(i=0; i<UBOOT_NUM; i++){
|
||||
fwrite(buf, UBOOT_MAX_SIZE, 1, fo);
|
||||
}
|
||||
printf("pack %s success! \n", argv[3]);
|
||||
}else if (mode == MODE_UNPACK){
|
||||
printf("unpack input %s \n", argv[2]);
|
||||
for(i = 0; i < max_num; i++)
|
||||
fwrite(buf, max_size, 1, fo);
|
||||
|
||||
printf("pack %s success! \n", argv[4]);
|
||||
} else if (mode == MODE_UNPACK) {
|
||||
printf("unpack input %s \n", argv[3]);
|
||||
memset(&hdr, 0, sizeof(second_loader_hdr));
|
||||
if(!fread(&hdr, sizeof(second_loader_hdr), 1, fi)) {
|
||||
if (!fread(&hdr, sizeof(second_loader_hdr), 1, fi))
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
if(!fread(buf, hdr.loader_load_size, 1, fi)) {
|
||||
|
||||
if (!fread(buf, hdr.loader_load_size, 1, fi))
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
fwrite(buf, hdr.loader_load_size, 1, fo);
|
||||
printf("unpack %s success! \n", argv[3]);
|
||||
printf("unpack %s success! \n", argv[4]);
|
||||
}
|
||||
|
||||
free(buf);
|
||||
fclose(fi);
|
||||
fclose(fo);
|
||||
|
||||
2
u-boot/tools/rk_tools/RKTRUST/RK322XTOS.ini
Normal file
2
u-boot/tools/rk_tools/RKTRUST/RK322XTOS.ini
Normal file
@ -0,0 +1,2 @@
|
||||
[TOS_BIN_PATH]
|
||||
TOS=tools/rk_tools/bin/rk32/rk322x_tee.bin
|
||||
BIN
u-boot/tools/rk_tools/bin/rk32/rk322x_tee.bin
Normal file
BIN
u-boot/tools/rk_tools/bin/rk32/rk322x_tee.bin
Normal file
Binary file not shown.
Reference in New Issue
Block a user