Brian Norris [Sat, 16 Oct 2010 20:54:05 +0000 (13:54 -0700)]
mtd-utils: flash_erase: Fix output of offsets
Need to use unsigned arithmetic and a 64-bit cast in order to
calculate and output the correct offset for eraseblocks at large
offsets. Signed integer arithmetic does not produce the correct
result "uint64_t" result, so for offsets over 2GB we get
messages like:
Note that this error was not affecting proper erasure; it just
produced incorrect status messages.
Also, we should not add an extra eraseblock for the final status
message; this gives misleading output when, for example, the
following statement is executed:
Brian Norris [Sat, 16 Oct 2010 02:12:25 +0000 (19:12 -0700)]
mtd-utils: nandwrite: Large page+oob support
Dynamic allocation of the oob buffer provides the necessary
support for removing the oob size check. Now, new unknown OOB
sizes can be handled correctly (for example, 8KB page + 448B
OOB).
Included common.h for the use of xmalloc.
Memory freeing should occur on "restoreoob" as well as on
"closeall."
[Conflicts resolved by Artem]
Signed-off-by: Brian Norris <computersforpeace@gmail.com> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
The buffers used for dumping page and OOB data needed dynamic
allocation to help eliminate burdens for updating (i.e., every
time there's a new OOB size we don't have to increase the sizes).
Also, there is no need to check flash chips for "standard sizes."
With recent changes to the printing codebase, we should be able to
handle arbitrary sizes with no problem.
More exit operations are now necessary on program failure, so
"goto closeall" is used more liberally.
Also, common.h is included for the use of xmalloc.
[conflicts fixed by Artem]
Signed-off-by: Brian Norris <computersforpeace@gmail.com> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Mike Frysinger [Fri, 1 Oct 2010 17:13:10 +0000 (13:13 -0400)]
libmtd: make malloc failures fatal
This converts libmtd to the common xalloc helpers and in doing so, makes
memory allocation failures fatal rather than returning an error to the
caller. I think this is acceptable behavior.
Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Mike Frysinger [Fri, 1 Oct 2010 17:11:28 +0000 (13:11 -0400)]
sumtool/libfec: convert "()" to "(void)" in func defs
Since these functions take no parameters, declare them as such. The
subtle difference here is that gcc allows (without warning) people to
accidentally call funcs declared with "()" with arguments. Using void
makes sure that gcc will reject such typos at compile time.
Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Mike Frysinger [Fri, 1 Oct 2010 05:45:06 +0000 (01:45 -0400)]
mtd-utils: xalloc: simplify/unify error messages
I'm not sure that if we actually are out of memory that declaring the
failing allocation size is useful in the output. So use the same
simple string in every error message to cut down on size (there will
only be one copy of this at runtime). Size is a much more common
concern than handling OOM issues which most likely aren't the fault
of mtd-utils in the first place.
Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
The utilities are unmaintained for long time, and many of them
do not even work, just compile, and no on complains about this.
This suggests they are unused and we can now safely kill them.
Mike Frysinger [Mon, 27 Sep 2010 06:50:58 +0000 (02:50 -0400)]
mtd-utils: unify flash_erase and flash_eraseall
These have overlapping functionality, and while flash_eraseall supports
newer 64bit ioctls, flash_erase does not. So rather than graft support
onto flash_erase, merge the functionality of two into flash_erase so we
only have to support one util from now on.
A simple wrapper is provided to ease old flash_eraseall users into the
new combined flash_erase util.
Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Mike Frysinger [Mon, 27 Sep 2010 06:42:28 +0000 (02:42 -0400)]
mtd-utils: new strtoX helpers
Simply usage of converting strings to numbers by adding some wrappers
around the standard strtoX functions. These helpers simplify the api
of these functions a bit by providing an optional "error" pointer and
automatic error message.
Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Mike Frysinger [Thu, 23 Sep 2010 20:04:15 +0000 (16:04 -0400)]
nandwrite: add --skipbad to write bad blocks
Sometimes dumping bad blocks is useful, like when the block isn't actually
bad but the OOB layout isn't what the kernel is expecting or is otherwise
screwed up. The --skipbad option allows just that.
Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Mike Frysinger [Thu, 23 Sep 2010 03:08:03 +0000 (23:08 -0400)]
libfec: fix up pointer warnings in fec magic computation
The current fec code casts a pointer to an int which causes warnings on
64bit systems. So create a macro for the duplicate/complicated magic
computation, and add an unsigned long cast in it to fix the original
problem.
Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Mike Frysinger [Thu, 23 Sep 2010 02:53:47 +0000 (22:53 -0400)]
mtd-utils: compr: drop unused model argument
The jffs2 compression framework provides a "model" argument when
compressing and decompressing, but the caller always passes in NULL
and the callees never use it. So punt this useless overhead.
Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Mike Frysinger [Thu, 23 Sep 2010 02:32:56 +0000 (22:32 -0400)]
mtd-utils: clean up zlib.h usage a bit
Hide zlib's crc32 in compr_zlib.c and mkfs.ubifs/compr.c.
jffs2reader.c and mkfs.jffs2.c don't actually use zlib, so punt the
include from the file.
mkfs.jffs2.c is implicitly using crc32 from zlib.h instead of the
local mtd_crc32, so fix the local usage. otherwise we get warnings
about undefined crc32 because the file was redirecting the prototype.
Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Mike Frysinger [Thu, 23 Sep 2010 02:13:40 +0000 (22:13 -0400)]
rbtree: avoid redefining offsetof
Newer versions of gcc will define & export offsetof, so we don't
want to unconditionally define it. Otherwise we hit:
In file included from mkfs.jffs2.c:76:0:
rbtree.h:134:0: warning: "offsetof" redefined
/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.1/include/stddef.h:411:0: note:
this is the location of the previous definition
Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
mkfs.ubifs: do not override root inode permissions
When mkfs.ubifs is used with -r dir, it does not make the root UBIFS
inode uid/gid/permissions to be equivalent to dir's permissions, but
it makes root inode permissions to be equivalent to uid = git = 0
(root) and permissions = u+rwx go+rx.
Unfortunately, we cannot simply fix this bug, because mkfs.ubifs is
already used in production. Thus, we have introduce --squash-rino-perm
option which is the default and it preserves the old mkfs.ubifs
behavior. We also introduce --nosquash-rino-perm option which fixes
mkfs.ubifs behavior. If none of these options is used, we print a
warning. The plan is to make everyone use one of these options, then
make --nosquash-rino-perm to be the default and remove the warning,
and then eventually deprecate and remove both options.
Mike Frysinger [Sun, 12 Sep 2010 03:50:27 +0000 (23:50 -0400)]
nanddump: add --nobad to read bad blocks
Sometimes dumping bad blocks is useful, like when the data isn't actually
bad but the OOB layout isn't what the kernel is expecting or is otherwise
screwed up. The --nobad option allows just that.
Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Mike Frysinger [Sun, 12 Sep 2010 03:48:13 +0000 (23:48 -0400)]
ubi-utils: drop -Werror in old utils
Considering this is marked as "old" which is synonymous with "dead",
having the dir cause build failures because of warnings makes no
sense. So drop the -Werror usage.
Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
libcrc32.a was generated without external symbols: nm -g libcrc32.a shoed
nothing. This patch fixes it to make libcrc32.a build to be the same as
libmtd.a. Frankly, I do not know why this happened and why this patch fixes
the issue, sorry for my ignorance. But this works.
Because of namespace collisions mkfs.ubifs uses crc32() implementation from
/lib/libz.so.1, which generates incompatible CRC and later on the kernel reports
many CRC errors.
Fix this by re-naming mtd-utils' crc32 function to mtd_crc32.
Reported-by: Jon Povey <Jon.Povey@racelogic.co.uk> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Kevin Cernekee [Mon, 26 Jul 2010 18:37:19 +0000 (11:37 -0700)]
mtd-utils: clean up compile warnings
gcc 4.4.3 on x86_64:
libcrc32.c:42: warning: ‘static’ is not at beginning of declaration
libfec.c:120: warning: initialization discards qualifiers from pointer target type
libfec.c:121: warning: initialization discards qualifiers from pointer target type
libfec.c:417: warning: passing argument 2 of ‘my_malloc’ discards qualifiers from pointer target type
recv_image.c:164: warning: comparison of unsigned expression < 0 is always false
recv_image.c:170: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘size_t’
recv_image.c:170: warning: format ‘%d’ expects type ‘int’, but argument 4 has type ‘long unsigned int’
And many more along the same lines.
Signed-off-by: Kevin Cernekee <cernekee@gmail.com> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
This patch is based on Kevin Cernekee's patch posted to the MTD mailing
list. It adds 'mtd_read_oob()' and 'mtd_write_oob()' interfaces support.
The interfaces use MEMREADOOB64/MEMWRITEOOB64 MTD ioctls if possible, and
fall-back to MEMREADOOB/MEMWRITEOOB if the 64-bit versions are not supported.
The information about ioctls support is then cashed in 'offs64_ioctls'
libmtd flag.
This patch is base on Kevin Cernekee's patch posted to the MTD mailing
list. It adds MEMERASE64 support to the 'mtd_erase()' call. Now it
first tries to use MEMERASE64, and if that is not supported, falls
back to the old MEMERASE ioctl.
This patch also introduces an 'offs64_ioctl' flag to the libmtd
descriptor. However, we cannot initialize it in 'libmtd_open()',
because we need an MTD device node, which we do not have in
'libmtd_open()'. Thus, we firs mark this flag as "uninitialized",
and at the first invocation of 'mtd_erase()' we initialize it.
This also means that we have to pass the limbtd descriptor to
'mtd_erase()', to save the flag value. This, in turn, requires
tweaking 'mtd_erase()' users.
Brian Norris [Mon, 19 Jul 2010 17:33:16 +0000 (10:33 -0700)]
nanddump: add "forcebinary" flag
Restrict binary dumping so that by default, binary garbage is not
printed directly to a terminal. Output redicted to files or piped to
other commands should not be affected (as judged by "isatty(ofd)").
A new flag "-a" or "--forcebinary" is included so that users can
override this behavior if necessary.
Signed-off-by: Brian Norris <norris@broadcom.com> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Brian Norris [Mon, 19 Jul 2010 17:33:15 +0000 (10:33 -0700)]
nanddump: add canonical (hex+ascii) flag
Added the "-c" or "--canonicalprint" flag (modelled off 'hexdump -C')
so that users can choose to print ASCII output next to the prettyprint
output. This is really an extension to the prettyprint option, so the two
options do not conflict if they are both included in the same execution.
Signed-off-by: Brian Norris <norris@broadcom.com> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Brian Norris [Mon, 19 Jul 2010 17:33:14 +0000 (10:33 -0700)]
nanddump: robust pretty hexdump
Adapted code from the linux kernel hex_dump_to_buffer() (lib/hexdump.c)
to provide a more robust hexdump for the pretty option. Now, nanddump
can print out any size of OOB (or page for that matter...) without
having to worry about non-multiples of 16.
This also provides ability to dump ASCII format next to the hex output
once additional command-line flags are added.
Tested with Samsung K9GAG08U0D
Signed-off-by: Brian Norris <norris@broadcom.com> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Brian Norris [Thu, 8 Jul 2010 20:50:08 +0000 (13:50 -0700)]
nandtest: Fixed indentation
Replaced tabs with spaces in the help message for nandtest to
fix problems with varying indentation and to provide consistency
with other utils in the set.
Signed-off-by: Brian Norris <norris@broadcom.com> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Enrico Scholz [Thu, 24 Jun 2010 13:02:40 +0000 (15:02 +0200)]
mkfs.jffs2: fix integer underflow in jffs2_rtime_compress()
When '*dstlen' is 0 or 1, comparison will return wrong result. Reported
by valgrind as
==5919== Invalid write of size 1
==5919== at 0x40564E: jffs2_rtime_compress (compr_rtime.c:51)
==5919== by 0x40676B: jffs2_compress (compr.c:246)
==5919== by 0x403EE4: recursive_populate_directory (mkfs.jffs2.c:884)
==5919== Address 0x4e1bdb1 is 0 bytes after a block of size 1 alloc'd
==5919== at 0x4A0515D: malloc (vg_replace_malloc.c:195)
==5919== by 0x40671C: jffs2_compress (compr.c:229)
==5919== by 0x403EE4: recursive_populate_directory (mkfs.jffs2.c:884)
Fix the following warning:
mkfs.ubifs.c: In function ‘add_dent_node’:
mkfs.ubifs.c:1172: warning: format ‘%lu’ expects type ‘long unsigned int’, but argument 4 has type ‘ino_t’
mkfs.ubifs.c:1172: warning: format ‘%lu’ expects type ‘long unsigned int’, but argument 6 has type ‘ino_t’
Kevin Cernekee [Thu, 8 Jul 2010 00:30:10 +0000 (17:30 -0700)]
mtd-utils: move libmtd source files to lib/ subdirectory
Source files for libmtd, crc32, and fec are scattered throughout the
tree. Move them to a central location so they can be built into a
common "libmtd.a" library used by all mtd-utils programs.
This patch only renames/deletes files and does not change the content.
Also modify the build system and source code so that libmtd.a can be built
from a "common" location (lib/). Statically link all utilities at the top
level with libmtd.a . Minor changes to mkfs.ubifs to allow using the common
crc32 implementation.
Signed-off-by: Kevin Cernekee <cernekee@gmail.com> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Artem Bityutskiy [Mon, 14 Jun 2010 05:00:18 +0000 (08:00 +0300)]
libubi: remove few fields from volume info
Remove the 'dev_major' and 'dev_minor' fields from the volume
information structure, because these fields should be provided
by the device information structure.
Enric Balletbo i Serra [Tue, 18 May 2010 09:53:59 +0000 (11:53 +0200)]
mtd-utils: support 4096+64 page sizes
Add support for oobsize 64 and writesize 4096 in nanddump & nandwrite.
Artem: some more info from further e-mail exchange:
> Are there flashes with the 4096 page / 64 spare combination? Could you
> refer to one? May be any URL? I thought 4096 comes with 128.
Much to my regret I can't provide a URL because is not public. IGEP v2
board has a Onenand with two dice of 2048/64 spare combination but mtd
views 4096/64. The minimal write page is 4K (2K from first dice and 2K
from second dice).
Signed-off-by: Enric Balletbo i Serra <eballetbo@iseebcn.com> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Stanley.Miao [Tue, 18 May 2010 12:23:09 +0000 (20:23 +0800)]
nandwrite: fix the bug of writing a yaffs2 image to NAND
The tool mkyaffs2image doesn't know the oob layout of a NAND flash, so it
puts the yaffs2 tags at the offset 0 of oob area, as a result, the image
generated by mkyaffs2image is different with the image dumped by nanddump.
Now adding a parameter "-r" for nandwrite to differentiate these images.
Write a image generated by mkyaffs2image:
$> nandwrite -a -o /dev/mtd3 yaffs2.bin
Write a image dumped by nanddump:
$> nandwrite -a -r /dev/mtd3 image.bin