From 95cf4939c80f577199e5e050e8a1246b417708a1 Mon Sep 17 00:00:00 2001 From: Eric Anderson Date: Sun, 3 Aug 2025 18:37:32 -0700 Subject: [PATCH] Only update checksum --- aml_chksum.c | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/aml_chksum.c b/aml_chksum.c index 76b795c..c14829f 100644 --- a/aml_chksum.c +++ b/aml_chksum.c @@ -18,7 +18,7 @@ static void printf_sha256_sum(const char *format, const uint8_t *sum) str[0] = '\0'; for (index = 0; index < SHA256_SUM_LEN; ++index) { - sprintf(str, "%s%02x", str, sum[index]); + sprintf(str+index*2, "%02x", sum[index]); } printf(format, str); } @@ -97,17 +97,31 @@ int main(int argc, char **argv) sha256_finish(&ctx, genSum); printf_sha256_sum("genSum=%s\n", genSum); - // clone header + // read header data from 1 uint8_t *sd_header_buffer = calloc(AML_HEADER_READ_SIZE, sizeof(uint8_t)); - memcpy(sd_header_buffer, header_buffer, AML_HEADER_READ_SIZE); + if (fseek(fp, AML_SD_OFFSET, SEEK_SET) != 0) { + printf("ERROR: Cannot seek to header: %s\n", strerror(errno)); + return errno; + } + read_header_size = fread(sd_header_buffer, sizeof(uint8_t), AML_HEADER_READ_SIZE, fp); + if (read_header_size != AML_HEADER_READ_SIZE) { + printf("ERROR: Cannot read header: %s\n", strerror(errno)); + return errno; + } st_aml_block_header *sd_header = (st_aml_block_header *)(sd_header_buffer + AML_HEADER_OFFSET); uint8_t *sdSum = (sd_header_buffer + AML_HEADER_OFFSET + AML_HEADER_SIZE); - // update sd header - sd_header->nTotalSize -= AML_SD_OFFSET; - sd_header->nDataLen -= AML_SD_OFFSET; - sd_header->nCHKStart = AML_HEADER_SIZE + AML_CHKSUM_SIZE; // start after checksum - sd_header->nCHKSize = sd_header->nTotalSize - sd_header->nCHKStart; // must be less then total size, bl1 only reads ~48kb to memory + // basic header check + if (sd_header->dwMagic != AML_BLK_ID || + sd_header->byVerMajor != AML_BLK_VER_MJR || + sd_header->byVerMinor != AML_BLK_VER_MIN || + sd_header->bySizeHdr != AML_HEADER_SIZE || + sd_header->nSigType != 0 || + sd_header->nPUKType != 0) { + printf("ERROR: Bad SD header.\n"); + return EINVAL; + } + printf("nTotalSize=%u\n", sd_header->nTotalSize); printf("nCHKStart=%u\n", sd_header->nCHKStart); printf("nCHKSize=%u\n", sd_header->nCHKSize); @@ -147,10 +161,6 @@ int main(int argc, char **argv) fflush(fp); // new header - header->nCHKStart = AML_SD_OFFSET - AML_HEADER_OFFSET; // must be 496+ for MBR support - header->nCHKSize = header->nTotalSize - header->nCHKStart; // must be less then total size, bl1 only reads ~48kb to memory - header->nDataOffset = 1024 - 16; // point to code that copies bl2 from 4608 to 4096 - header->nDataLen = header->nTotalSize - header->nDataOffset; printf("nCHKStart=%u\n", header->nCHKStart); printf("nCHKSize=%u\n", header->nCHKSize); printf("nDataOffset=%u\n", header->nDataOffset); -- 2.50.1