[U-Boot] [PATCH] tools: fw_printenv supports mmc device

Donghwa Lee dh09.lee at samsung.com
Thu Dec 16 02:22:26 CET 2010


I modified fw_printenv tools to use /dev/mmcblk0 node. Original fw_printenv tool
can be access MTD devices, but, in some cases, environment variables can be stored
other memory devices, for example, mmc devices.
So, I modified a few code to use /dev/mmcblk0.

Signed-off-by: Donghwa Lee <dh09.lee at samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park at samsung.com>

---
 tools/env/fw_env.c      |   13 ++++++++++---
 tools/env/fw_env.config |    7 +++++--
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
index 8ff7052..5a707f6 100644
--- a/tools/env/fw_env.c
+++ b/tools/env/fw_env.c
@@ -855,6 +855,7 @@ static int flash_write_buf (int dev, int fd, void *buf, size_t count,
 		}
 
 		erase.start = blockstart;
+#ifndef CONFIG_ENV_IS_IN_MMC
 		ioctl (fd, MEMUNLOCK, &erase);
 
 		if (ioctl (fd, MEMERASE, &erase) != 0) {
@@ -863,7 +864,7 @@ static int flash_write_buf (int dev, int fd, void *buf, size_t count,
 				 strerror (errno));
 			return -1;
 		}
-
+#endif
 		if (lseek (fd, blockstart, SEEK_SET) == -1) {
 			fprintf (stderr,
 				 "Seek error on %s: %s\n",
@@ -880,8 +881,9 @@ static int flash_write_buf (int dev, int fd, void *buf, size_t count,
 			return -1;
 		}
 
+#ifndef CONFIG_ENV_IS_IN_MMC
 		ioctl (fd, MEMLOCK, &erase);
-
+#endif
 		processed  += blocklen;
 		block_seek = 0;
 		blockstart += blocklen;
@@ -964,9 +966,10 @@ static int flash_write (int fd_current, int fd_target, int dev_target)
 
 static int flash_read (int fd)
 {
-	struct mtd_info_user mtdinfo;
 	int rc;
 
+#ifndef CONFIG_ENV_IS_IN_MMC
+	struct mtd_info_user mtdinfo;
 	rc = ioctl (fd, MEMGETINFO, &mtdinfo);
 	if (rc < 0) {
 		perror ("Cannot get MTD information");
@@ -982,6 +985,10 @@ static int flash_read (int fd)
 
 	rc = flash_read_buf (dev_current, fd, environment.image, CONFIG_ENV_SIZE,
 			     DEVOFFSET (dev_current), mtdinfo.type);
+#else
+	rc = flash_read_buf (dev_current, fd, environment.image, CONFIG_ENV_SIZE,
+			     DEVOFFSET (dev_current), 0);
+#endif
 
 	return (rc != CONFIG_ENV_SIZE) ? -1 : 0;
 }
diff --git a/tools/env/fw_env.config b/tools/env/fw_env.config
index c8f12cf..228ded8 100644
--- a/tools/env/fw_env.config
+++ b/tools/env/fw_env.config
@@ -4,8 +4,11 @@
 # Notice, that the "Number of sectors" is ignored on NOR.
 
 # MTD device name	Device offset	Env. size	Flash sector size	Number of sectors
-/dev/mtd1		0x0000		0x4000		0x4000
-/dev/mtd2		0x0000		0x4000		0x4000
+#/dev/mtd1		0x0000		0x4000		0x4000
+#/dev/mtd2		0x0000		0x4000		0x4000
 
 # NAND example
 #/dev/mtd0		0x4000		0x4000		0x20000			2
+
+# MMC device name	Device offset	Env. size	Flash sector size	Number of sectors
+/dev/mmcblk0		0x7000		0x1000		0x1000
-- 
1.6.0.4



More information about the U-Boot mailing list