Just for ping.
On Mon, Jun 21, 2021 at 4:52 PM Harvey Wu <[email protected]> wrote: > > Hi Stefan, > > Add bloatcheck result to commit message. > > On Sun, Jun 20, 2021 at 8:19 PM 吳崇維 <[email protected]> wrote: > > > > Hi Stefan, > > > > On Sun, Jun 20, 2021 at 7:44 PM Stefan Seyfried > > <[email protected]> wrote: > > > > > > Hi Harvey, > > > > > > On 15.06.21 04:58, Harvey Wu wrote: > > > > - The original flashcp process is erase, write and verify all blocks > > > > in one time from file to device. > > > > This patch will add a function that only copy different block data > > > > from file to device. The function will compare block by block between > > > > file and device, then erase write block data from file to device if > > > > found different block. > > > > > > The "original flashcp" is from mtdutils > > > http://www.linux-mtd.infradead.org/ > > > While your feature certainly looks useful in certain circumstances, I'm > > > not convinced that busybox should "out-feature" its upstream counterparts. > > > > > > Have you submitted this feature also to the mtd-utils developers? Will > > > it be implemented there, too? > > > > > > Bloatcheck would be interesting, too. > > > > > > Best regards, > > > > > > Stefan > > > -- > > > Stefan Seyfried > > > > > > "For a successful technology, reality must take precedence over > > > public relations, for nature cannot be fooled." -- Richard Feynman > > > > Thanks for your replying. I already submitted this feature to mtd-utils. > > > > Best regards. > > - The original flashcp process is erase, write and verify all blocks > in one time from file to device. > This patch will add a function that only copy different block data > from file to device. The function will compare block by block between > file and device, then erase write block data from file to device if > found different block. > > function old new delta > flashcp_main 694 1158 +464 > progress 96 107 +11 > .rodata 6 7 +1 > ------------------------------------------------------------------------------ > (add/remove: 0/0 grow/shrink: 3/0 up/down: 476/0) Total: 476 bytes > > Signed-off-by: Harvey Wu <[email protected]> > --- > miscutils/flashcp.c | 93 +++++++++++++++++++++++++++++++++++++++++++-- > 1 file changed, 90 insertions(+), 3 deletions(-) > > diff --git a/miscutils/flashcp.c b/miscutils/flashcp.c > index 93c80cc6c..f0d231b1e 100644 > --- a/miscutils/flashcp.c > +++ b/miscutils/flashcp.c > @@ -19,7 +19,10 @@ > //kbuild:lib-$(CONFIG_FLASHCP) += flashcp.o > > //usage:#define flashcp_trivial_usage > -//usage: "[-v] FILE MTD_DEVICE" > +//usage: "\n [-v] FILE MTD_DEVICE : " > +//usage: "Copy full image file to dev" > +//usage: "\n -p [-v] FILE MTD_DEVICE : " > +//usage: "Copy different blocks from file to dev" > //usage:#define flashcp_full_usage "\n\n" > //usage: "Copy FILE to MTD device\n" > //usage: "\n -v Verbose" > @@ -44,7 +47,9 @@ static void progress(int mode, uoff_t count, uoff_t total) > if (total) > percent = (unsigned) (percent / total); > printf("\r%s: %"OFF_FMT"u/%"OFF_FMT"u (%u%%) ", > - (mode < 0) ? "Erasing block" : ((mode == 0) ? "Writing kb" : > "Verifying kb"), > + (mode < 0) ? "Erasing block" : > + ((mode == 0) ? "Writing kb" : > + ((mode == 1) ? "Verifying kb" : "Processing block")), > count, total, (unsigned)percent); > fflush_all(); > } > @@ -56,11 +61,77 @@ static void progress_newline(void) > bb_putchar('\n'); > } > > +static void copy_diff_blocks(int fd_f, \ > + int fd_d, \ > + uoff_t erase_count, \ > + struct mtd_info_user mtd, \ > + struct erase_info_user e, \ > + struct stat statb, \ > + unsigned char *buf, \ > + unsigned char *buf2, \ > + char *devicename) > +{ > + int diffblks = 0; > + int totalblks = 0; > + uoff_t curoffset; > + e.start = 0; > + uoff_t done; > + unsigned count; > + > + xlseek(fd_f, 0, SEEK_SET); > + xlseek(fd_d, 0, SEEK_SET); > + done = 0; > + count = BUFSIZE; > + > + while(1) { > + uoff_t rem; > + > + progress(2, done / mtd.erasesize, (uoff_t)statb.st_size / > mtd.erasesize); > + rem = statb.st_size - done; > + if (rem == 0) > + break; > + if (rem < BUFSIZE) > + count = rem; > + xread(fd_f, buf, count); > + > + curoffset = xlseek(fd_d, 0, SEEK_CUR); > + totalblks++; > + xread(fd_d, buf2, count); > + if (memcmp(buf, buf2, count) != 0) { > + diffblks++; > + if (ioctl(fd_d, MEMERASE, &e) < 0) { > + bb_perror_msg_and_die("erase error at 0x%llx on %s", > + (long long)e.start, devicename); > + } > + int ret; > + if (count < BUFSIZE) > + memset((char*)buf + count, 0, BUFSIZE - count); > + errno = 0; > + xlseek(fd_d, curoffset, SEEK_SET); > + ret = full_write(fd_d, buf, BUFSIZE); > + if (ret != BUFSIZE) { > + bb_perror_msg_and_die("write error at 0x%"OFF_FMT"x on %s, " > + "write returned %d", > + done, devicename, ret); > + } > + } > + > + done += count; > + e.start += mtd.erasesize; > + } > + > + if (option_mask32) { > + printf("\ndiff blocks : %d/%d\n", diffblks, totalblks); > + } > +} > + > int flashcp_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; > int flashcp_main(int argc UNUSED_PARAM, char **argv) > { > int fd_f, fd_d; /* input file and mtd device file descriptors */ > int i; > + int update_check = 0; > + unsigned int opts; > uoff_t erase_count; > struct mtd_info_user mtd; > struct erase_info_user e; > @@ -69,7 +140,17 @@ int flashcp_main(int argc UNUSED_PARAM, char **argv) > RESERVE_CONFIG_UBUFFER(buf, BUFSIZE); > RESERVE_CONFIG_UBUFFER(buf2, BUFSIZE); > > - /*opts =*/ getopt32(argv, "^" "v" "\0" "=2"/*exactly 2 non-option > args: file,dev*/); > + opts = getopt32(argv, "^" "vp" "\0" "=2"/*exactly 2 non-option > args: file,dev*/); > + if (opts & 1) { > + option_mask32 = 1; > + } > + else { > + option_mask32 = 0; > + } > + if (opts & 2) { > + update_check = 1; > + } > + > argv += optind; > // filename = *argv++; > // devicename = *argv; > @@ -106,6 +187,12 @@ int flashcp_main(int argc UNUSED_PARAM, char **argv) > erase_count = 1; > } > #endif > + > + if (update_check) { > + copy_diff_blocks(fd_f, fd_d, erase_count, mtd, e, statb, buf, > buf2, devicename); > + return EXIT_SUCCESS; > + } > + > e.start = 0; > for (i = 1; i <= erase_count; i++) { > progress(-1, i, erase_count); > -- > 2.17.1 _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
