diff options
author | Dongsheng Yang <yangds.fnst@cn.fujitsu.com> | 2015-10-31 11:12:01 +0800 |
---|---|---|
committer | Brian Norris <computersforpeace@gmail.com> | 2015-11-11 14:38:40 -0800 |
commit | 7d81790ced345585b1e647ca9d0f6678e7062fa4 (patch) | |
tree | 02f61270c7a0fff7bb6b2e28f247a3d2fd6ff490 /rfdformat.c | |
parent | 344753f2aacb94d98ce238f81fc4a4b6ef6adea9 (diff) |
mtd-utils: Restructure the mtd-utils source.
* There is no code modification in this commit, only moving
* the files to proper place.
The user tools looks a little messy as we place almost
the all tools in the root directory of mtd-utils. To make
it more clear, I propose to introduce the following structure
for our source code.
mtd-utils/
|-- lib
|-- include
|-- misc-utils
|-- jffsX-utils
|-- nand-utils
|-- nor-utils
|-- ubi-utils
|-- ubifs-utils
`-- tests
Signed-off-by: Dongsheng Yang <yangds.fnst@cn.fujitsu.com>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Diffstat (limited to 'rfdformat.c')
-rw-r--r-- | rfdformat.c | 160 |
1 files changed, 0 insertions, 160 deletions
diff --git a/rfdformat.c b/rfdformat.c deleted file mode 100644 index 17d9d2d..0000000 --- a/rfdformat.c +++ /dev/null @@ -1,160 +0,0 @@ -/* - * rfdformat.c - * - * Copyright (C) 2005 Sean Young <sean@mess.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This is very easy: just erase all the blocks and put the magic at - * the beginning of each block. - */ - -#define PROGRAM_NAME "rfdformat" -#define VERSION "$Revision 1.0 $" - -#define _XOPEN_SOURCE 500 /* For pread/pwrite */ - -#include <stdio.h> -#include <stdlib.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <sys/ioctl.h> -#include <fcntl.h> -#include <unistd.h> -#include <getopt.h> - -#include <mtd/mtd-user.h> -#include <linux/types.h> - -void display_help(void) -{ - printf("Usage: %s [OPTIONS] MTD-device\n" - "Formats NOR flash for resident flash disk\n" - "\n" - "-h --help display this help and exit\n" - "-V --version output version information and exit\n", - PROGRAM_NAME); - exit(0); -} - -void display_version(void) -{ - printf("%s " VERSION "\n" - "\n" - "This is free software; see the source for copying conditions. There is NO\n" - "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n", - PROGRAM_NAME); - - exit(0); -} - -void process_options(int argc, char *argv[], const char **mtd_filename) -{ - int error = 0; - - for (;;) { - int option_index = 0; - static const char *short_options = "hV"; - static const struct option long_options[] = { - { "help", no_argument, 0, 'h' }, - { "version", no_argument, 0, 'V', }, - { NULL, 0, 0, 0 } - }; - - int c = getopt_long(argc, argv, short_options, - long_options, &option_index); - if (c == EOF) - break; - - switch (c) { - case 'h': - display_help(); - break; - case 'V': - display_version(); - break; - case '?': - error = 1; - break; - } - } - - if ((argc - optind) != 1 || error) - display_help(); - - *mtd_filename = argv[optind]; -} - -int main(int argc, char *argv[]) -{ - static const uint8_t magic[] = { 0x93, 0x91 }; - int fd, block_count, i; - struct mtd_info_user mtd_info; - char buf[512]; - const char *mtd_filename; - - process_options(argc, argv, &mtd_filename); - - fd = open(mtd_filename, O_RDWR); - if (fd == -1) { - perror(mtd_filename); - return 1; - } - - if (ioctl(fd, MEMGETINFO, &mtd_info)) { - perror(mtd_filename); - close(fd); - return 1; - } - - if (mtd_info.type != MTD_NORFLASH) { - fprintf(stderr, "%s: not NOR flash\n", mtd_filename); - close(fd); - return 2; - } - - if (mtd_info.size > 32*1024*1024) { - fprintf(stderr, "%s: flash larger than 32MiB not supported\n", - mtd_filename); - close(fd); - return 2; - } - - block_count = mtd_info.size / mtd_info.erasesize; - - if (block_count < 2) { - fprintf(stderr, "%s: at least two erase units required\n", - mtd_filename); - close(fd); - return 2; - } - - for (i=0; i<block_count; i++) { - struct erase_info_user erase_info; - - erase_info.start = i * mtd_info.erasesize; - erase_info.length = mtd_info.erasesize; - - if (ioctl(fd, MEMERASE, &erase_info) != 0) { - snprintf(buf, sizeof(buf), "%s: erase", mtd_filename); - perror(buf); - close(fd); - return 2; - } - - if (pwrite(fd, magic, sizeof(magic), i * mtd_info.erasesize) - != sizeof(magic)) { - snprintf(buf, sizeof(buf), "%s: write", mtd_filename); - perror(buf); - close(fd); - return 2; - } - } - - close(fd); - - return 0; -} |