From: hujianyang <hujianyang@huawei.com>
To: Joe Balough <jbb5044@gmail.com>
Cc: Brian Norris <computersforpeace@gmail.com>,
linux-mtd@lists.infradead.org,
Artem Bityutskiy <dedekind1@gmail.com>
Subject: Re: [PATCH 1/2] mtd: ubiformat: Add --confirm argument
Date: Sun, 4 Jan 2015 10:31:07 +0800 [thread overview]
Message-ID: <54A8A5EB.6060204@huawei.com> (raw)
In-Reply-To: <1420037925-31156-2-git-send-email-jbb5044@gmail.com>
Hi Joe,
On 2014/12/31 22:58, Joe Balough wrote:
> Add support for an argument to ubiformat that will read back every
> written eraseblock and verify the read data matches the written data.
>
> Signed-off-by: Joe Balough <jbb5044@gmail.com>
> ---
> ubi-utils/ubiformat.c | 27 ++++++++++++++++++++++++---
> 1 file changed, 24 insertions(+), 3 deletions(-)
>
> diff --git a/ubi-utils/ubiformat.c b/ubi-utils/ubiformat.c
> index 21409ca..4129404 100644
> --- a/ubi-utils/ubiformat.c
> +++ b/ubi-utils/ubiformat.c
> @@ -49,6 +49,7 @@
>
> /* The variables below are set by command line arguments */
> struct args {
> + unsigned int confirm:1;
> unsigned int yes:1;
> unsigned int quiet:1;
> unsigned int verbose:1;
> @@ -93,6 +94,7 @@ static const char optionsstr[] =
> " (default is 1)\n"
> "-Q, --image-seq=<num> 32-bit UBI image sequence number to use\n"
> " (by default a random number is picked)\n"
> +"-c, --confirm Read back written value and verify it matches\n"
> "-y, --yes assume the answer is \"yes\" for all question\n"
> " this program would otherwise ask\n"
> "-q, --quiet suppress progress percentage information\n"
> @@ -105,8 +107,8 @@ static const char usage[] =
> "\t\t\t[-Q <num>] [-f <file>] [-S <bytes>] [-e <value>] [-x <num>] [-y] [-q] [-v] [-h]\n"
> "\t\t\t[--sub-page-size=<bytes>] [--vid-hdr-offset=<offs>] [--no-volume-table]\n"
> "\t\t\t[--flash-image=<file>] [--image-size=<bytes>] [--erase-counter=<value>]\n"
> -"\t\t\t[--image-seq=<num>] [--ubi-ver=<num>] [--yes] [--quiet] [--verbose]\n"
> -"\t\t\t[--help] [--version]\n\n"
> +"\t\t\t[--image-seq=<num>] [--ubi-ver=<num>] [--confirm] [--yes] [--quiet]\n"
> +"\t\t\t[--verbose] [--help] [--version]\n\n"
> "Example 1: " PROGRAM_NAME " /dev/mtd0 -y - format MTD device number 0 and do\n"
> " not ask questions.\n"
> "Example 2: " PROGRAM_NAME " /dev/mtd0 -q -e 0 - format MTD device number 0,\n"
> @@ -118,6 +120,7 @@ static const struct option long_options[] = {
> { .name = "no-volume-table", .has_arg = 0, .flag = NULL, .val = 'n' },
> { .name = "flash-image", .has_arg = 1, .flag = NULL, .val = 'f' },
> { .name = "image-size", .has_arg = 1, .flag = NULL, .val = 'S' },
> + { .name = "confirm", .has_arg = 0, .flag = NULL, .val = 'c' },
> { .name = "yes", .has_arg = 0, .flag = NULL, .val = 'y' },
> { .name = "erase-counter", .has_arg = 1, .flag = NULL, .val = 'e' },
> { .name = "quiet", .has_arg = 0, .flag = NULL, .val = 'q' },
> @@ -137,7 +140,7 @@ static int parse_opt(int argc, char * const argv[])
> int key, error = 0;
> unsigned long int image_seq;
>
> - key = getopt_long(argc, argv, "nh?Vyqve:x:s:O:f:S:", long_options, NULL);
> + key = getopt_long(argc, argv, "nh?Vycqve:x:s:O:f:S:", long_options, NULL);
> if (key == -1)
> break;
>
> @@ -178,6 +181,10 @@ static int parse_opt(int argc, char * const argv[])
> case 'n':
> args.novtbl = 1;
> break;
> +
> + case 'c':
> + args.confirm = 1;
> + break;
>
> case 'y':
> args.yes = 1;
This option 'c' seems only use when *flash-image* is specified. So maybe you
can check the validity of this option depending on *args.image* in parse_opt().
> @@ -535,6 +542,20 @@ static int flash_image(libmtd_t libmtd, const struct mtd_dev_info *mtd,
> skip_data_read = 1;
> continue;
> }
> +
> + if (args.confirm) {
> + char read_buf[mtd->eb_size];
> + err = mtd_read(mtd, args.node_fd, eb, 0, read_buf, new_len);
> + if (err) {
> + sys_errmsg("cannot readback eraseblock %d for confirmation", eb);
> + goto out_close;
> + }
> +
> + if (memcmp(buf, read_buf, new_len) != 0) {
> + sys_errmsg("readback failed on eraseblock %d", eb);
> + }
> + }
> +
> if (++written_ebs >= img_ebs)
> break;
> }
>
Do we have a function like *mtd_write_and_check()*? I think the operation
first write and then check it by reading may be used in many cases.
It's worthy to check the writing data of the *flash-image* without any
additional options in my considering.
Thanks,
Hu
next prev parent reply other threads:[~2015-01-04 2:32 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-31 14:58 [PATCH 0/2] mtd: ubiformat: Add support for image confirmation Joe Balough
2014-12-31 14:58 ` [PATCH 1/2] mtd: ubiformat: Add --confirm argument Joe Balough
2015-01-04 2:31 ` hujianyang [this message]
[not found] ` <CACuXwh49YRxqYMHyu_8YH3_VW_EaT4hAuxEWyXWosczZPbfdnA@mail.gmail.com>
2015-01-07 1:56 ` hujianyang
2014-12-31 14:58 ` [PATCH 2/2] mtd: ubiformat: Add confirmation fail exit Joe Balough
2015-01-04 2:38 ` hujianyang
[not found] ` <CACuXwh5eGfpQ6=qJH2_O5yGiK82pxF1mJHaG8X+Hpa50P5PZww@mail.gmail.com>
2015-01-06 1:48 ` hujianyang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=54A8A5EB.6060204@huawei.com \
--to=hujianyang@huawei.com \
--cc=computersforpeace@gmail.com \
--cc=dedekind1@gmail.com \
--cc=jbb5044@gmail.com \
--cc=linux-mtd@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).