From f563fc95654b5835787c0790b3d7ba96ae624489 Mon Sep 17 00:00:00 2001 From: Ulf Samuelsson Date: Sat, 3 Jan 2009 00:04:55 +0000 Subject: [PATCH] Provide factory default command to u-boot, using Buildroot variables --- .../u-boot-2009.01-rc1-009-factory.patch | 323 ++++++++++++++++++ 1 file changed, 323 insertions(+) create mode 100644 target/u-boot/2009.01-rc1/u-boot-2009.01-rc1-009-factory.patch diff --git a/target/u-boot/2009.01-rc1/u-boot-2009.01-rc1-009-factory.patch b/target/u-boot/2009.01-rc1/u-boot-2009.01-rc1-009-factory.patch new file mode 100644 index 0000000000..59d2a0d4e2 --- /dev/null +++ b/target/u-boot/2009.01-rc1/u-boot-2009.01-rc1-009-factory.patch @@ -0,0 +1,323 @@ +diff -urN u-boot-2009.01-0rig//common/cmd_factory.c u-boot-2009.01/common/cmd_factory.c +--- u-boot-2009.01-0rig//common/cmd_factory.c 1970-01-01 01:00:00.000000000 +0100 ++++ u-boot-2009.01/common/cmd_factory.c 2009-01-02 19:32:07.000000000 +0100 +@@ -0,0 +1,308 @@ ++/* ++ * (C) Copyright 2000 ++ * Ulf Samuelsson . ++ * ++ * See file CREDITS for list of people who contributed to this ++ * project. ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License as ++ * published by the Free Software Foundation; either version 2 of ++ * the License, or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, ++ * MA 02111-1307 USA ++ */ ++ ++/* ++ * Boot support ++ */ ++#include ++#include ++#include ++#include ++ ++/* ++ * ++ * The typical use of this file, is to update config.h ++ * from an external build system ++ * ++ */ ++ ++ ++/* ++ * Macros to transform values ++ * into environment strings. ++ */ ++#define XMK_STR(x) #x ++#define MK_STR(x) XMK_STR(x) ++ ++void setargs(void); ++ ++int do_factory_defaults (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) ++{ ++#if defined(CONFIG_ETHADDR) ++ setenv("ethaddr", MK_STR(CONFIG_ETHADDR)); ++#endif ++#if defined(CONFIG_ETH1ADDR) ++ setenv("eth1addr", MK_STR(CONFIG_ETH1ADDR)); ++#endif ++#if defined(CONFIG_HOSTNAME) ++ setenv("hostname", MK_STR(CONFIG_HOSTNAME)); ++#endif ++#if defined(CONFIG_IPADDR) ++ setenv("ipaddr", MK_STR(CONFIG_IPADDR)); ++#endif ++#if defined(CONFIG_SERVERIP) ++ setenv("serverip", MK_STR(CONFIG_SERVERIP)); ++#endif ++#if defined(CONFIG_GATEWAY) ++ setenv("gatewayip", MK_STR(CONFIG_GATEWAY)); ++#endif ++#if defined(CONFIG_NETMASK) ++ setenv("netmask", MK_STR(CONFIG_NETMASK)); ++#endif ++#if defined(KERNEL_START) ++ setenv("kernel", MK_STR(KERNEL_START)); ++#endif ++#if defined(KERNEL_LOCATION) ++ setenv("OS", MK_STR(KERNEL_LOCATION)); ++#endif ++#if defined(FILESYSTEM_START) ++ setenv("ramdisk", MK_STR(FILESYSTEM_START)); ++ setenv("initrd", MK_STR(FILESYSTEM_START)","MK_STR(FILESYSTEM_SIZE)); ++#endif ++#if defined(FILESYSTEM_LOCATION) ++ setenv("FS", MK_STR(FS_LOCATION)); ++#endif ++#if defined(END_OF_FLASH) ++ setenv("endflash", MK_STR(END_OF_FLASH)); ++#endif ++#if defined(CONFIG_LOAD_SCRIPTS) ++ /* By updating the "fs-date" environment variable and running "fs" ++ You set "rd-1" and "rd-2" ++ */ ++ setenv("rd-1", "rootfs.arm-"MK_STR(DATE)".ext2"); ++ setenv("rd-2", "rootfs.arm-"MK_STR(DATE)".jffs2"); ++ setenv("rd-3", "rootfs.arm-linux.ext2"); ++ setenv("rd-4", "rootfs.arm-linux.jffs2"); ++ setenv("ver", "1"); ++ ++ setenv("config", "tftp ${ramdisk} autoscript.${hostname} ; autoscr ${ramdisk} "); ++ ++#if defined(KERNEL_VERSION) ++ setenv("kernel-version",MK_STR(KERNEL_VERSION)); ++#endif ++#if defined(DATE) ++ setenv("kernel-date", MK_STR(DATE)); ++ setenv("fs-date", MK_STR(DATE)); ++ setenv("rd", "rootfs.arm-"MK_STR(DATE)".ext2"); ++#endif ++#if defined(KERNEL_VERSION) ++ setenv("linux", MK_STR(BOARD_NAME)"-linux-"MK_STR(KERNEL_VERSION)"-"MK_STR(DATE)".gz"); ++#endif ++ setenv("get-ramdisk", "tftp ${ramdisk} ${rd}; setenv rd-size ${filesize}"); ++ setenv("store-ramdisk", "cp.b ${ramdisk} ${FS} ${rd-size}"); ++ setenv("load-ramdisk", "cp.b ${FS} ${ramdisk} ${rd-size}"); ++ setenv("flash-ramdisk", "run get-ramdisk; run store-ramdisk"); ++ ++ setenv("get-kernel", "tftp ${kernel} ${linux}; setenv kernel-size ${filesize}"); ++ setenv("store-kernel", "cp.b ${kernel} ${OS} ${kernel-size}; saveenv"); ++ setenv("load-kernel", "cp.b ${OS} ${kernel} ${kernel-size}; saveenv"); ++ setenv("flash-kernel", "run get-kernel; run store-kernel"); ++ ++ setenv("get", "run get-kernel ; run get-ramdisk"); ++ setenv("flash", "run flash-kernel ; run flash-ramdisk ; saveenv"); ++ setenv("load", "run load-kernel ; run load-ramdisk"); ++ ++ setenv("bootcmd", "run load ; bootm "MK_STR(KERNEL_START)); ++ ++ setenv("fstype", "ram"); ++ setenv("flashfs", "/dev/mtdblock2"); ++ setenv("ramfs", "/dev/ram"); ++ ++ setenv("rootfstype", "jffs2"); ++ setenv("access", "rw"); ++ setenv("ramdisk_size", "15360"); ++ setenv("console", "ttyS0,115200"); ++ ++ ++#if defined(MEMORY_SIZE) ++ setenv("mem", MK_STR(MEMORY_SIZE)); ++#else ++ setenv("mem", "32M"); /* Cautious default */ ++#endif ++ ++ setenv("update", "os; fs; setargs"); ++ setenv("cmpk", "run flash-kernel; cp.b ${OS} ${ramdisk} ${kernel-size}; cmp ${kernel} ${ramdisk} ${kernel-size}"); ++#endif /* CONFIG_LOAD_SCRIPTS */ ++#if defined(CONFIG_AT91RM9200) ++ setenv("machid24", "0x0fb"); ++ setenv("machid26", "0x2c1"); ++ setenv("machid", "0x2c1"); ++ setenv("k24", "setenv machid ${machid24}; os"); ++ setenv("k26", "setenv machid ${machid26}; os"); ++#endif ++ AT91F_DataflashSetEnv (); ++#if defined(CONFIG_LOAD_SCRIPTS) ++ setargs(); ++#endif ++ return (saveenv() ? 1 : 0); ++} ++ ++ ++ ++U_BOOT_CMD( ++ factory, 1, 1, do_factory_defaults, ++ "factory\t- Create a default environment\n", ++ "\n" ++); ++ ++#if defined(CONFIG_LOAD_SCRIPTS) ++void setargs(void) ++{ ++ char cmd[512]; ++ char fstype[512]; ++ ++ sprintf(fstype,getenv("fstype")); ++ if((fstype[0] != 'f') && (fstype[0] != 'r')) { ++ fstype[0] = 'r'; ++ } ++ ++ if(fstype[0] == 'f') { ++ sprintf(cmd,"root=%s rootfstype=%s ip=%s:%s:%s:%s console=%s,mem=%s", ++ getenv("flashfs"), ++ getenv("rootfstype"), ++ getenv("ipaddr"), ++ getenv("serverip"), ++ getenv("gatewayip"), ++ getenv("netmask"), ++ getenv("console"), ++ getenv("mem") ++ ); ++ cmd[511] = '\0'; ++ printf("len=%d: %s\n",strlen(cmd),cmd); ++ if(strlen(cmd) > 500) { ++ printf("Error: Environment too large during 'setargs'\n"); ++ } else { ++ setenv("bootargs",cmd); ++ setenv("bootcmd", "run load-kernel ; bootm 21000000"); ++ } ++ } else if(fstype[0] == 'r') { ++ sprintf(cmd,"root=%s %s initrd=%s ramdisk_size=%s ip=%s:%s:%s:%s console=%s,mem=%s", ++ getenv("ramfs"), ++ getenv("access"), ++ getenv("initrd"), ++ getenv("ramdisk_size"), ++ getenv("ipaddr"), ++ getenv("serverip"), ++ getenv("gatewayip"), ++ getenv("netmask"), ++ getenv("console"), ++ getenv("mem") ++ ); ++ printf("len=%d: %s\n",strlen(cmd),cmd); ++ cmd[511] = '\0'; ++ if(strlen(cmd) > 500) { ++ printf("Error: Environment too large during 'setargs'\n"); ++ } else { ++ setenv("bootargs",cmd); ++ setenv("bootcmd", "run load ; bootm 21000000"); ++ } ++ } else { ++ setenv("bootargs","no args"); ++ } ++} ++ ++int do_setargs (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) ++{ ++ setargs(); ++ return 0; ++} ++ ++U_BOOT_CMD( ++ setargs, 1, 1, do_setargs, ++ "setargs\t- Create a bootargs from:" ++ "fstype=flash: (${flash} ${access} ${initrd} ${ramdisk_size}) " ++ "fstype=ram: (${ram} ${access} ${initrd} ${ramdisk_size}) " ++ "${ipaddr} ${serverip} ${gatewayip} ${netmask} " ++ "${console} ${mem}\n" ++ , "\n" ++); ++ ++int do_os (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) ++{ ++ char *kchip; ++ char *kdate; ++ char *kver; ++ char cmd[512]; ++ kchip = getenv("hostname"); ++ kdate = getenv("kernel-date"); ++ kver = getenv("kernel-version"); ++ if((strlen(kdate) + strlen(kver) + 32) > 500) { ++ printf("Error: Environment too large during 'os': "); ++ printf("len=%d\n", strlen(kdate) + strlen(kver) + 32); ++ } else if(kver != NULL) { ++ if(kdate != NULL) { ++ sprintf(cmd,"%s-linux-%s-%s.gz",kchip,kver,kdate); ++ } else { ++ sprintf(cmd,"%s-linux-%s.gz",kchip,kver); ++ } ++ printf("Setting kernel to %s\n",cmd); ++ setenv("linux",cmd); ++ return 0; ++ } ++ return 1; ++} ++ ++U_BOOT_CMD( ++ os, 1, 1, do_os, ++ "os\t- Select linux version ${hostname}-linux-${kernel-name}-${kernel-date}\n" ++ , "\n" ++); ++ ++ ++int do_fs (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) ++{ ++ char *ver; ++ char *fsdate; ++ char *hostname; ++ char cmd[512]; ++ fsdate = getenv("fs-date"); ++ hostname = getenv("hostname"); ++ ++ if(fsdate != NULL) { ++ sprintf(cmd,"rootfs.arm-%s.ext2",fsdate); ++ setenv("rd-1",cmd); ++ sprintf(cmd,"rootfs.arm-%s.jffs2",fsdate); ++ setenv("rd-2",cmd); ++ } ++ ver = getenv("ver"); /* Find out which version we are using*/ ++ if(cmd==NULL) { ++ setenv("ver","1"); ++ } ++ ver = getenv("ver"); /* Find out which version we are using*/ ++ sprintf(cmd,"rd-%s",ver); /* create rd${ver}*/ ++ ver=getenv(cmd); ++ sprintf(cmd,"%s",ver); ++ printf("Setting ramdisk to %s\n",cmd); ++ setenv("rd",cmd); ++ return 0; ++} ++ ++ ++U_BOOT_CMD( ++ fs, 1, 1, do_fs, ++ "fs\t- Select ramdisk version == rd-${ver}\n" ++ , "\n" ++); ++#endif /* #if defined(CONFIG_LOAD_SCRIPTS) */ ++ ++#endif /* CONFIG_DEFENV */ +diff -urN u-boot-2009.01-0rig//common/Makefile u-boot-2009.01/common/Makefile +--- u-boot-2009.01-0rig//common/Makefile 2008-12-16 23:48:27.000000000 +0100 ++++ u-boot-2009.01/common/Makefile 2009-01-02 19:17:16.000000000 +0100 +@@ -84,6 +84,7 @@ + COBJS-$(CONFIG_CMD_EEPROM) += cmd_eeprom.o + COBJS-$(CONFIG_CMD_ELF) += cmd_elf.o + COBJS-$(CONFIG_CMD_EXT2) += cmd_ext2.o ++COBJS-$(CONFIG_CMD_FACTORY) += cmd_factory.o + COBJS-$(CONFIG_CMD_FAT) += cmd_fat.o + COBJS-$(CONFIG_CMD_FDC)$(CONFIG_CMD_FDOS) += cmd_fdc.o + COBJS-$(CONFIG_OF_LIBFDT) += cmd_fdt.o fdt_support.o -- 2.30.2