/*=========================================================================== Combined Charging System (CCS): SECC FWMaker.c initiated by Vern, Joseph (since 2019/07/19) =============================================================================*/ #include #include #include #include #include #include #include /*struct ifreq*/ #include /*SIOCGIFINDEX*/ #include #include #include #include #include #include #include "FWMaker.h" //./FWMaker 172.16.24.126 int main(int argc, char *argv[]) { unsigned char *MemBuf, *MemBuf2, buf[64]; int fd, rd = 0, wrd = 0, tmp = 0, rd2 = 0; unsigned int CheckSum = 0; memset(buf, 0, 64); sprintf(buf, "tftp -gr uImage -l /mnt/uImage %s", argv[1]); system(buf); memset(buf, 0, 64); sprintf(buf, "tftp -gr rootfs_nor.img -l /mnt/rootfs_nor.img %s", argv[1]); system(buf); if((MemBuf = malloc(0x100000D)) == NULL) { printf("Allocate MemBuf memory error\n"); return 0; } memset(MemBuf, 0xff, 0x100000D); fd = open("/mnt/uImage", O_RDWR); if(fd > 0) { if((rd = read(fd, MemBuf, 0x100000D)) <= 0) { printf("/mnt/uImage read Error\n"); free(MemBuf); close(fd); return 0; } close(fd); for(tmp = 0; tmp < rd; tmp++) { CheckSum += MemBuf[tmp]; } strncpy(MemBuf + rd, "DELTADCOK", 9); *(MemBuf + rd + 9) = CheckSum >> 24; *(MemBuf + rd + 10) = CheckSum >> 16; *(MemBuf + rd + 11) = CheckSum >> 8; *(MemBuf + rd + 12) = CheckSum; // memcpy(MemBuf+rd+9,&CheckSum,4); fd = open("/mnt/DcoKImage", O_CREAT | O_RDWR); wrd = write(fd, MemBuf, rd + 13); if(wrd != (rd + 13)) { printf("write error wrd=0x%x, rd=0x%x\n", wrd, rd + 13); } else { printf("/mnt/DcoKImage OK\n"); } } else { free(MemBuf); printf("/mnt/uImage open Error\n"); return 0; } memset(MemBuf, 0xff, 0x100000D); CheckSum = rd = 0; fd = open("/mnt/rootfs_nor.img", O_RDWR); if(fd > 0) { if((rd = read(fd, MemBuf, 0x100000D)) <= 0) { printf("/mnt/rootfs_nor.img read Error\n"); free(MemBuf); close(fd); return 0; } close(fd); for(tmp = 0; tmp < rd; tmp++) { CheckSum += MemBuf[tmp]; } strncpy(MemBuf + rd, "DELTADCOF", 9); *(MemBuf + rd + 9) = CheckSum >> 24; *(MemBuf + rd + 10) = CheckSum >> 16; *(MemBuf + rd + 11) = CheckSum >> 8; *(MemBuf + rd + 12) = CheckSum; //memcpy(MemBuf+rd+9,&CheckSum,4); fd = open("/mnt/DcoFImage", O_CREAT | O_RDWR); wrd = write(fd, MemBuf, rd + 13); if(wrd != (rd + 13)) { printf("write error wrd=0x%x, rd=0x%x\n", wrd, rd + 13); } else { printf("/mnt/DcoFImage OK\n"); } } else { free(MemBuf); printf("/mnt/rootfs_nor.img open Error\n"); return 0; } }