/* * ubparams.c * * Generate a u-boot parameter block with correct crc * * (C) 1007 Guthrie Consulting * hamish@prodigi.ch * */ #include #include #include #ifndef __ASSEMBLY__ #define __ASSEMBLY__ #endif #define __ASM_STUB_PROCESSOR_H__ #include #undef __ASSEMBLY__ #include #define XMK_STR(x) #x #define MK_STR(x) XMK_STR(x) extern unsigned long crc32 (unsigned long, const unsigned char *, unsigned int); #if !defined(ENV_CRC) #define ENV_CRC ~0 #endif static char *environment[] = { "bootdelay=3\0" "baudrate=115200\0" "stdin=serial\0" "stdout=serial\0" "stderr=serial\0" "fbargs=setenv bootargs root=/dev/mtdblock3 ro init=/etc/preinit console=/dev/ttyS0,115200,mem=32M\0" "rdba=setenv bootargs root=/dev/ram rw initrd=0x21200000,6000000 ramdisk_size=20000 init=/etc/preinit console=/dev/ttyS0,115200,mem=32M\0" "rdram=run rdba; tftp 21000000 vImage; tftp 21200000 root.squashfs; bootm 21000000\0" "flash=run fbargs; bootm 0xc0042000\0" "bootargs=setenv bootargs root=/dev/mtdblock3 ro init=/etc/preinit console=/dev/ttyS0,115200,mem=32M\0" "bootcmd=bootm 0xc0042000\0" "ipaddr=10.0.1.73\0" "serverip=10.0.1.210\0" "\0" }; int main(int argc, char *argv[]) { env_t *envptr; char *src, *srcptr; char *dataptr; FILE *params; int argfail = 1; char newmac[30]; char newser[30]; int paramlen = 0; int progmac = 0; int progser = 0; if (argc < 3) { printf ("Invalid arguments\n"); return 1; } switch (argc) { case 5: if (strcmp(argv[3], "--serial") == 0) { argfail = 0; sprintf(newser, "serial#=%s", argv[4]); progser = 1; } case 3: if (strcmp(argv[1], "--mac") == 0) { argfail = 0; sprintf(newmac, "ethaddr=%s", argv[2]); progmac = 1; } else argfail = 1; } if (argfail) { printf("Invalid arguments\n"); return 1; } src = srcptr = *environment; envptr = (env_t *)malloc(CFG_ENV_SIZE); dataptr = (char *)envptr + ENV_HEADER_SIZE; while(*srcptr) { //printf("%d, %s\n", strlen(srcptr), srcptr); paramlen += strlen(srcptr) + 1; srcptr += strlen(srcptr) + 1; } printf("Make u-boot params\n"); printf("Params size is %d\n", CFG_ENV_SIZE); memset(envptr, 0, CFG_ENV_SIZE); memcpy(dataptr, src, paramlen); dataptr += paramlen; if (progmac) { memcpy(dataptr, newmac, strlen(newmac)); dataptr += strlen(newmac) + 1; } if (progser) { memcpy(dataptr, newser, strlen(newser)); dataptr += strlen(newser) + 1; } envptr->crc = crc32(0, envptr->data, ENV_SIZE); params = fopen("/dev/mtd1", "w"); fwrite(envptr, CFG_ENV_SIZE, 1, params); fclose(params); free(envptr); return 0; }