|
|
@@ -0,0 +1,125 @@
|
|
|
+/*
|
|
|
+ * ubparams.c
|
|
|
+ *
|
|
|
+ * Generate a u-boot parameter block with correct crc
|
|
|
+ *
|
|
|
+ * (C) 1007 Guthrie Consulting
|
|
|
+ * [email protected]
|
|
|
+ *
|
|
|
+ */
|
|
|
+
|
|
|
+#include <stdio.h>
|
|
|
+#include <stdlib.h>
|
|
|
+#include <string.h>
|
|
|
+
|
|
|
+#ifndef __ASSEMBLY__
|
|
|
+#define __ASSEMBLY__
|
|
|
+#endif
|
|
|
+#define __ASM_STUB_PROCESSOR_H__
|
|
|
+#include <config.h>
|
|
|
+#undef __ASSEMBLY__
|
|
|
+#include <environment.h>
|
|
|
+
|
|
|
+#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"
|
|
|
+ "partitions=mtdparts=AT45DB642.spi0:132k(bootloader),33k(ubparams),99k(spare),1056k(linux),1056k(rootfs),33k(nvram),-(rootfs_data)\0"
|
|
|
+ "fbargs=setenv bootargs mtdparts=AT45DB642.spi0:132k(bootloader),33k(ubparams),99k(spare),1056k(linux),1056k(rootfs),33k(nvram),-(rootfs_data) root=/dev/mtdblock4 ro init=/etc/preinit console=/dev/ttyS0,115200,mem=32M\0"
|
|
|
+ "rdba=setenv bootargs mtdparts=AT45DB642.spi0:132k(bootloader),33k(ubparams),99k(spare),1056k(linux),1056k(rootfs),33k(nvram),-(rootfs_data) 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 mtdparts=AT45DB642.spi0:132k(bootloader),33k(ubparams),99k(spare),1056k(linux),1056k(rootfs),33k(nvram),-(rootfs_data) root=/dev/mtdblock4 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("params", "w");
|
|
|
+ fwrite(envptr, CFG_ENV_SIZE, 1, params);
|
|
|
+ fclose(params);
|
|
|
+
|
|
|
+ free(envptr);
|
|
|
+ return 0;
|
|
|
+}
|