diff -x.svn -u fconfig/crunchfc.c ../../../snapgear_avila/user/fconfig/crunchfc.c
--- fconfig/crunchfc.c	2006-03-15 01:18:17.000000000 +1100
+++ ../../../snapgear_avila/user/fconfig/crunchfc.c	2007-09-06 13:48:38.000000000 +1000
@@ -320,6 +320,48 @@
 }
 
 /*
+ * List known keys.
+ */
+int8_t list_keys(struct config_data *data)
+{
+	struct fconfig_key key;
+	uint32_t len = data->reallen;
+	uint8_t *keyptr = NULL;
+	uint8_t *ptr = data->buf+8;
+	uint8_t *ptrend = data->buf+len-9;
+	printer_t printer;
+
+	while (ptr < ptrend-4) {
+		keyptr = ptr;
+		ptr = get_key(ptr, &key);
+		if (ptr == NULL) {
+			MESSAGE(VERB_LOW, "Error in structure\n");
+			return -1;
+		}
+		if (ptr > ptrend) {
+			MESSAGE(VERB_LOW, "Parser went out of struct!\n");
+			return -1;
+		}
+
+		if ((key.type == 0) && (key.namelen==0)) {
+			MESSAGE(VERB_NORMAL, "EOF reached - key not found\n");
+			return -1;
+		}
+		
+		print_key(&key, VERB_HIGH, data->swab);
+
+		printf("%s: ", key.keyname);
+		printer = TYPE_PRINTER(key.type);
+		if (printer == NULL) {
+			MESSAGE(VERB_LOW, "Printer missing for type %d\n", key.type);
+			return -1;
+		}	
+		printer(key.dataval);
+		printf("\n");
+	}
+}
+
+/*
  * Find a key with given nickname, check its type and set value
  * Assumes that verify_fconfig() has been called on 'data' before. 
  */
diff -x.svn -u fconfig/crunchfc.h ../../../snapgear_avila/user/fconfig/crunchfc.h
--- fconfig/crunchfc.h	2006-03-15 01:18:17.000000000 +1100
+++ ../../../snapgear_avila/user/fconfig/crunchfc.h	2007-09-06 13:48:38.000000000 +1000
@@ -31,6 +31,7 @@
 int8_t verify_fconfig(struct config_data *data);
 int8_t get_key_value(struct config_data *data, uint8_t *nickname);
 int8_t set_key_value(struct config_data *data, uint8_t *nickname, void *value);
+int8_t list_keys(struct config_data *data);
 void recalculate_crc(struct config_data *data);
 
 #endif //CRUNCHFC_H
diff -x.svn -u fconfig/fconfig.c ../../../snapgear_avila/user/fconfig/fconfig.c
--- fconfig/fconfig.c	2006-03-15 01:18:18.000000000 +1100
+++ ../../../snapgear_avila/user/fconfig/fconfig.c	2007-09-06 13:48:38.000000000 +1000
@@ -35,8 +35,9 @@
 #include <string.h>
 #include <unistd.h>
 #include <fcntl.h>
+#include <getopt.h>
 
 #include "debug.h"
 #include "ftypes.h"
 #include "crunchfc.h"
 
@@ -72,7 +73,7 @@
 	}
 
 	fputs("Read or write Redboot configuration\n", stdout);
-	fputs("usage: fconfig [-r|-w] -d dev -n nickname -x value\n", stdout);
+	fputs("usage: fconfig [-r|-w|-l] -d dev -n nickname -x value\n", stdout);
 	fputs("'dev' may be a char device, block device or a file\n", stdout);
 	fputs("Supported types: \n", stdout);
 	for (i = 0; i < NUM_TYPES; i++) {
@@ -181,7 +182,33 @@
 	close_fconfig_handle(data);
 	return 0;
 
-exit_fail: 
+exit_fail:
+	close_fconfig_handle(data);
+	return 1;
+}
+
+/*
+ * List mode of operation: list parameter values from the configuration.
+ */
+static int list_mode(struct config_data *data, uint8_t *device)
+{
+	if (get_fconfig_handle(data, device, O_RDONLY) == NULL) {
+		MESSAGE(VERB_LOW, "Could not get a config data handle!\n");
+		return 1;
+	}
+	if (verify_fconfig(data)) {
+		MESSAGE(VERB_LOW, "Config verification failed!\n");
+		goto exit_fail;
+	}
+
+	if (list_keys(data)) {
+		goto exit_fail;
+	}
+
+	close_fconfig_handle(data);
+	return 0;
+
+exit_fail:
 	close_fconfig_handle(data);
 	return 1;
 }
@@ -189,6 +216,7 @@
 #define MODE_NONE 0
 #define MODE_WRITE 1
 #define MODE_READ 2
+#define MODE_LIST 3
 
 /*
  * main(). ...nuff said.
@@ -202,14 +230,17 @@
 	uint8_t *value = NULL;
 	uint8_t *device = NULL;
 
-	while ((c = getopt(argc, argv, "hrwvsd:n:x:")) != -1) {
+	while ((c = getopt(argc, argv, "hrwlvsd:n:x:")) != -1) {
 		switch (c) {
 		case 'r':
 			mode = MODE_READ;
 			break;
-		case 'w': 
+		case 'w':
 			mode = MODE_WRITE;
 			break;
+		case 'l':
+			mode = MODE_LIST;
+			break;
 		case 'n':
 			nickname = optarg;
 			break;
@@ -240,7 +271,7 @@
 	MESSAGE(VERB_NORMAL, "Normal verbosity messages are printed.\n");
 	MESSAGE(VERB_HIGH, "High verbosity messages are printed.\n");
 
-	if (nickname == NULL) {
+	if (nickname == NULL && mode != MODE_LIST) {
 		usage();
 		exit(1);
 	}
@@ -251,13 +282,16 @@
 	}
 
 	switch (mode) {
-		case MODE_WRITE : 
+		case MODE_WRITE :
 			ret = write_mode(&data, device, nickname, value);
 			break;
-		case MODE_READ : 
+		case MODE_READ :
 			ret = read_mode(&data, device, nickname);
 			break;
-		default : 
+		case MODE_LIST :
+			ret = list_mode(&data, device);
+			break;
+		default :
 			MESSAGE(VERB_LOW, "Unknown mode of operation\n");
 			usage();
 			ret = 1;
