u-boot/board/trab
Wolfgang Denk 54841ab50c Make sure that argv[] argument pointers are not modified.
The hush shell dynamically allocates (and re-allocates) memory for the
argument strings in the "char *argv[]" argument vector passed to
commands.  Any code that modifies these pointers will cause serious
corruption of the malloc data structures and crash U-Boot, so make
sure the compiler can check that no such modifications are being done
by changing the code into "char * const argv[]".

This modification is the result of debugging a strange crash caused
after adding a new command, which used the following argument
processing code which has been working perfectly fine in all Unix
systems since version 6 - but not so in U-Boot:

int main (int argc, char **argv)
{
	while (--argc > 0 && **++argv == '-') {
/* ====> */	while (*++*argv) {
			switch (**argv) {
			case 'd':
				debug++;
				break;
			...
			default:
				usage ();
			}
		}
	}
	...
}

The line marked "====>" will corrupt the malloc data structures and
usually cause U-Boot to crash when the next command gets executed by
the shell.  With the modification, the compiler will prevent this with
an
	error: increment of read-only location '*argv'

N.B.: The code above can be trivially rewritten like this:

	while (--argc > 0 && **++argv == '-') {
		char *arg = *argv;
		while (*++arg) {
			switch (*arg) {
			...

Signed-off-by: Wolfgang Denk <wd@denx.de>
Acked-by: Mike Frysinger <vapier@gentoo.org>
2010-07-04 23:55:42 +02:00
..
auto_update.c Fix e-mail address of Gary Jennejohn. 2009-05-15 22:11:59 +02:00
cmd_trab.c Make sure that argv[] argument pointers are not modified. 2010-07-04 23:55:42 +02:00
config.mk arm: unify linker script 2009-06-12 20:39:52 +02:00
flash.c Redundant Environment: protect full sector size 2009-06-04 00:16:16 +02:00
lowlevel_init.S Fix e-mail address of Gary Jennejohn. 2009-05-15 22:11:59 +02:00
Makefile Rename lib_generic/ to lib/ 2010-04-13 09:13:04 +02:00
memory.c board/trab/memory.c: Fix compile problems. 2008-12-16 22:32:25 +01:00
Pt1000_temp_data.h * Patch by Martin Krause, 11 Sep 2003: 2003-09-11 23:06:34 +00:00
README.kbd Initial revision 2002-11-03 00:24:07 +00:00
rs485.c arm: Move cpu/$CPU to arch/arm/cpu/$CPU 2010-04-13 09:13:24 +02:00
rs485.h arm: Move cpu/$CPU to arch/arm/cpu/$CPU 2010-04-13 09:13:24 +02:00
trab_fkt.c Make sure that argv[] argument pointers are not modified. 2010-07-04 23:55:42 +02:00
trab.c Make sure that argv[] argument pointers are not modified. 2010-07-04 23:55:42 +02:00
tsc2000.c Add a unified s3c24x0 header file 2009-11-27 16:26:13 -06:00
tsc2000.h Clean-up of s3c24x0 drivers excluding nand driver 2009-10-13 21:13:56 -05:00
u-boot.lds arm: Move cpu/$CPU to arch/arm/cpu/$CPU 2010-04-13 09:13:24 +02:00
vfd.c Add a unified s3c24x0 header file 2009-11-27 16:26:13 -06:00

The TRAB keyboard implementation is similar to that for LWMON and
R360MPI boards. The only difference concerns key naming. There are 4
keys on TRAB: 1, 2, 3, 4.

1) The "kbd" command provides information about the current state of
   the keys. For example,

	TRAB # kbd
	Keys: 1 0 1 0

   means that keys 1 and 3 are pressed. The keyboard status is also
   stored in the "keybd" environment variable. In this example we get

	keybd=1010

2) The "preboot" variable is set according to current environment
   settings and keys pressed. This is an example:

	TRAB # setenv magic_keys XY
	TRAB # setenv key_magicX 12
	TRAB # setenv key_cmdX echo ## Keys 1 + 2 pressed ##\;echo
	TRAB # setenv key_magicY 13
	TRAB # setenv key_cmdY echo ## Keys 1 + 3 pressed ##\;echo

   Here "magic_keys=XY" means that the "key_magicX" and "key_magicY"
   variables will be checked for a match. Each variable "key_magic*"
   defines a set of keys. In the our example, if keys 1 and 3 are
   pressed during reset, then "key_magicY" matches, so the "preboot"
   variable will be set to the contents of "key_cmdY":

	preboot=echo ## Keys 1 + 3 pressed ##;echo

3) The TRAB board has optional modem support. When a certain key
   combination is pressed on the keyboard at power-on, the firmware
   performs the necessary initialization of the modem and allows for
   dial-in. The key combination is specified in the
   "include/configs/trab.h" file. For example:

	#define        CONFIG_MODEM_KEY_MAGIC  "23"

   means that modem will be initialized if and only if both keys 2, 3
   are pressed. Note that the format of this string is similar to the
   format of "key_magic*" environment variables described above.