aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVimal Singh <vimal.newwork@gmail.com>2009-12-02 20:00:14 +0530
committerArtem Bityutskiy <Artem.Bityutskiy@nokia.com>2009-12-09 12:32:50 +0200
commit2426f4b7219c77b3d33b40c01f6d97d0ca0adc5f (patch)
tree5de0948909769a33c74a7f4b62cd056ef35fa462
parent43feb39f35a9ee0ed318df80433243c0bfe263ea (diff)
flash_unlock: enhancing for unlocking of specified number of blocks
This patch enhances the flash_unlock utility to be able to do unlocking for specified blocks range. This patch also fixes calculation of 'length' as in previous patch. Say there are 240 blocks present in the device. Then: offset starts from: 0x0 and full size of device: 0x1E00000 doing: 240 * 0x20000 gives -> 0x1E00000 But last block address should be 0x1DE0000 (which spans for 0x20000 bytes, adding up to size of 0x1E00000) Signed-off-by: Vimal Singh <vimalsingh@ti.com> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
-rw-r--r--flash_unlock.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/flash_unlock.c b/flash_unlock.c
index 648dc4f..3969453 100644
--- a/flash_unlock.c
+++ b/flash_unlock.c
@@ -21,13 +21,14 @@ int main(int argc, char *argv[])
int fd;
struct mtd_info_user mtdInfo;
struct erase_info_user mtdLockInfo;
+ int count;
/*
* Parse command line options
*/
- if(argc != 2)
+ if(argc < 2)
{
- fprintf(stderr, "USAGE: %s <mtd device>\n", argv[0]);
+ fprintf(stderr, "USAGE: %s <mtd device> <offset in hex> <block count in decimal number>\n", argv[0]);
exit(1);
}
else if(strncmp(argv[1], "/dev/mtd", 8) != 0)
@@ -50,8 +51,18 @@ int main(int argc, char *argv[])
exit(1);
}
- mtdLockInfo.start = 0;
- mtdLockInfo.length = mtdInfo.size;
+ if (argc > 2)
+ mtdLockInfo.start = strtol(argv[2], NULL, 0);
+ else
+ mtdLockInfo.start = 0;
+
+ if (argc > 3) {
+ count = strtol(argv[3], NULL, 0);
+ mtdLockInfo.length = mtdInfo.erasesize * count;
+ } else {
+ mtdLockInfo.length = mtdInfo.size - mtdInfo.erasesize;
+ }
+
if(ioctl(fd, MEMUNLOCK, &mtdLockInfo))
{
fprintf(stderr, "Could not unlock MTD device: %s\n", argv[1]);
@@ -61,4 +72,3 @@ int main(int argc, char *argv[])
return 0;
}
-