--- fw_env.c.orig	Fri Nov 28 15:22:23 2008
+++ fw_env.c		Wed Nov 26 15:28:17 2008
@@ -31,7 +31,8 @@
 #include <sys/ioctl.h>
 #include <sys/stat.h>
 #include <unistd.h>
-#include <linux/mtd/mtd.h>
+#include <mtd/mtd-user.h>
+//#include <linux/mtd/mtd.h>
 #include "fw_env.h"
 
 typedef unsigned char uchar;
@@ -389,6 +390,8 @@
 	int fd, fdr, rc, otherdev, len, resid;
 	erase_info_t erase;
 	char *data = NULL;
+	int  writesz;
+	char *writebuf = NULL;
 
 	if ((fd = open (DEVNAME (curdev), mode)) < 0) {
 		fprintf (stderr,
@@ -468,6 +471,28 @@
 
 		printf ("Done\n");
 
+		/* Have to write NAND page-aligned, write crc and data together */
+		writesz = len + ENV_SIZE;
+		writebuf = malloc(writesz);
+		memcpy(writebuf, &environment, len);
+		memcpy(writebuf + len, environment.data, ENV_SIZE);
+		
+		printf("Write CRC + environment (%d bytes) to %s\n",writesz,
+			   DEVNAME (otherdev));
+
+		if (lseek (fdr, DEVOFFSET (otherdev), SEEK_SET) == -1) {
+			fprintf (stderr,
+				"seek error on %s: %s\n",
+				DEVNAME (otherdev), strerror (errno));
+			return (-1);
+		}
+		if (write (fdr, writebuf, writesz) != writesz) {
+			fprintf (stderr,
+				"write error on %s: %s\n",
+				DEVNAME (otherdev), strerror (errno));
+			return (-1);
+		}
+#if 0
 		printf ("Writing environment to %s...\n", DEVNAME (otherdev));
 		if (lseek (fdr, DEVOFFSET (otherdev), SEEK_SET) == -1) {
 			fprintf (stderr,
@@ -487,6 +512,7 @@
 				DEVNAME (otherdev), strerror (errno));
 			return (-1);
 		}
+#endif
 		if (resid) {
 			if (write (fdr, data, resid) != resid) {
 				fprintf (stderr,

