Jehan Bing [Sat, 6 Jun 2009 01:45:53 +0000 (18:45 -0700)]
nandwrite: amend loop condition
If the file contains only a few bytes in the last page and the
--oob option is selected, the loop may exit early
(readlen < meminfo.oobsize).
Most of the time it will still work though because the code
tries to read the whole OOB in one chunk.
Artem Bityutskiy [Tue, 2 Jun 2009 13:11:35 +0000 (16:11 +0300)]
libmts: recognize pre-MTD-sysfs kernels better
Not-so-old linux kernel like 2.6.29 do already have "/sys/class/mtd/mtdX"
directories, while very old kernels do not. But in 2.6.29 these
directories do not contain any information.
Anyway, the logic in libmtd which checked whether the system
supports sysfs was broken, because it assumed that old systems
do not even have "/sys/class/mtd/" directory.
Fix this problem by checking for "/sys/class/mtd/mtdX/name". If this
is present - the system really has sysfs support.
Corentin Chary [Tue, 26 May 2009 13:08:36 +0000 (15:08 +0200)]
mkfs.ubifs: use libubi to format UBI volume
libubi is now used to format directly UBI volume.
Typing mkfs.ubifs /dev/ubi0_0 is now possible.
dtypes should be ok as they are taken from UBIFS code.
Artem Bityutskiy [Fri, 8 May 2009 09:33:56 +0000 (12:33 +0300)]
libubi: do not use udevsettle
Not sure why, but udevsettle does not work when threads are
used. In the io_paral test I experience the problem when
udevsettle opens UBI volumes and prevents tests to open
them (EBUSY is returned).
Rename 'struct mtd_info' to 'struct mtd_dev_info' to reflect the
fact that it provides information about a specific MTD device.
Also, this is more consistent with libubi.
ubiformat: mtd0 (NAND), size 134217728 bytes (128.0 MiB), 16384 eraseblocks of 16384 bytes (16.0 KiB), min. I/O size 512 bytes
libscan: scanning eraseblock 8191 -- 100 % complete
ubiformat: 8190 eraseblocks have valid erase counter, mean value is 9
ubiformat: 2 eraseblocks are supposedly empty
ubiformat: warning!: VID header and data offsets on flash are 512 and 1024, which is different to calculated offsets 256 and 512
ubiformat: use new offsets 512 and 1024? (yes/no) no
Segmentation fault
The reason is that volume table size is calculated for 256/512
layout, and when user chooses 512/1024 - it is not re-calculated
which leads to segfault in 'ubigen_write_layout_vol()'.
This patch also fixes the message - in the above output new
offsets are 256/512, not 512/1024.
Also, this patch adds explicit printing of the selected
positions.
Remove the fd field from the mtd information data structure,
because libmtd does not really know the device node file name,
and serves only as a place to save the descriptor. The callers
should find a better place.
This patch improves code readability and prepares for further
changes.
Mike Frysinger [Tue, 31 Mar 2009 04:09:40 +0000 (00:09 -0400)]
ubi-utils: tweak vpath handling
Building out of tree currently fails with ubi-utils because make gets
confused and can't figure out the vpathed .c files. Using VPATH rather
than vpath seems to work around it.
Mike Frysinger [Thu, 26 Feb 2009 08:30:06 +0000 (03:30 -0500)]
make sure compiler supports warning flags
Some compilers (like gcc-3.3) don't support all the newer -W flags that we
are using. So import the compiler check found in the kernel and test each
flag we add. The := is important so we only do the compiler tests once
per `make` rather than every time we compile a file.
Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Sebastian Andrzej Siewior [Mon, 23 Feb 2009 21:38:54 +0000 (22:38 +0100)]
mkfs.jffs2: fix lzo usage on 64bit systems
the compress size parameter in lzo is defined in the header file as lzo_uint.
This looks very much like uint32_t, I know, but is defined as unsigned long.
So on 64bit LE systems we zero some bytes near by and on BE systems we
get a size of zero.
Signed-off-by: Sebastian Andrzej Siewior <sebastian@breakpoint.cc> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Adrian Hunter [Thu, 12 Feb 2009 08:53:18 +0000 (10:53 +0200)]
mkfs.ubifs: eliminate compiler warnings
The warnings were:
lpt.c: In function ‘create_lpt’:
lpt.c:552: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘long long int’
mkfs.ubifs.c: In function ‘do_openat’:
mkfs.ubifs.c:251: warning: ignoring return value of ‘chdir’, declared with attribute warn_unused_result
mkfs.ubifs.c: In function ‘get_options’:
mkfs.ubifs.c:542: warning: format not a string literal and no format arguments
Signed-off-by: Adrian Hunter <ext-adrian.hunter@nokia.com> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
linux-mtd-owner@lists.infradead.org [Wed, 11 Feb 2009 09:05:39 +0000 (04:05 -0500)]
Artem Bityutskiy said once:
|I mean, IMO most of these warnings are not really sane, and cleaning
|that up just adds mess - you stop understanding why is something signed
|or unsigned :-)
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
linux-mtd-owner@lists.infradead.org [Wed, 11 Feb 2009 09:04:39 +0000 (04:04 -0500)]
I have here a mtd part which is 3 GiB with a flash page size of 256KiB.
The 2GiB limit is at erase block 8192. In mtd_is_bad() the computation
for the MEMGETBADBLOCK ioctl() looks like the following:
| seek = eb * mtd->eb_size;
with both eb and mtd->eb_size being a signed int results in seek being a
signed result.
The _FILE_OFFSET_BITS=64 define is required to switch off_t from 32bit
to 64bit an 32bit systems. This is required in order to keep using
lseek() as lseek64 on 32bit system. Without this change lseek() in
mtd_read() is called with a 32bit value with most significat bit set and
the kernel performs a sign extension for the 64bit value which is used
in the mtd layer.
The last change also changes the size of the parameter which is passed
to the MEMGETBADBLOCK ioctl() from 32 to 64bit. The counter part in
kernel is also defined as loff_t which is of type __kernel_loff_t and
this is "long long". So this must have been broken for a while unless I
missed something.
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Artem Bityutskiy [Wed, 28 Jan 2009 12:19:43 +0000 (14:19 +0200)]
mkfs.ubifs: support reserved space allocation
UBIFS may reserve some amount of flash space for the super-user,
ant this amount is stored in the superblock. Currently mkfs.ubifs
always puts 0 there. This patch adds -R option which may be used
to specify size of the reserved space.
Sebastian Andrzej Siewior [Wed, 17 Dec 2008 10:15:54 +0000 (11:15 +0100)]
ubiupdatevol: fix -t parameter
The execution of
|./ubiupdatevol /dev/ubi0 -t
will fail because 'argv[optind + 1]' is undefined and the later executed
'strcmp(args.img, "-")' will segfault.
So I can hack around and supply a dummy image or fix it that way.
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Mike Frysinger [Mon, 12 Jan 2009 16:08:03 +0000 (11:08 -0500)]
common.mk: tweak rules to workaround make-3.80 bugs
I got some reports from people who use make-3.80 that mtd-utils wasn't
building correctly the first time. Turns out that older versions of make
misbehave with pattern rules and full paths. So I've tweaked the code a
little to work with make-3.80 and make-3.81 (the latest release).
Also, I added a small optimization to avoid running `mkdir` when building
in-tree.
Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Mike Frysinger [Mon, 12 Jan 2009 16:08:07 +0000 (11:08 -0500)]
ubi-utils: fix warning in fprintf() code
When building with gcc security warnings enabled, the ubimirror.c code
triggers this warning:
./src/ubimirror.c: In function 'main':
./src/ubimirror.c:206: error: format not a string literal and no format arguments
Since the buffer in question should be a straight string anyways, avoid
ugly printf exploits by outputting the string indirectly:
printf("%s", buffer)
Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Mike Frysinger [Sat, 27 Dec 2008 03:35:08 +0000 (22:35 -0500)]
mkfs.jffs2: fix dir creation in /
With older mtd-utils, creating a directory in the root worked fine. With
current git, the parent dir search algo breaks this.
For example, just take the current git tree, build it up, and then run:
$ ./mkfs.jffs2 -d . -D device_table.txt -o /dev/null
mkfs.jffs2: skipping device_table entry '/dev': no parent directory!
mkfs.jffs2: skipping device_table entry '/dev/mem': no parent directory!
...
Doing `mkdir ./dev` first works around the issue, but where's the fun in
that.
Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Artem Bityutskiy [Tue, 16 Dec 2008 08:02:16 +0000 (10:02 +0200)]
nandwrite: correct data reading
The "read" syscall does not necessarily return all the requested
data, in which case the caller has to try again and read more.
Take this into account when reading input data.
This patch is an improved vestion of the original patch sent by
Hai Zaar.
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com> Tested-by: Hai Zaar <haizaar@codefidence.com>
Mike Frysinger [Tue, 9 Dec 2008 13:38:10 +0000 (08:38 -0500)]
ubi-utils: fix up build system
The previous change with CFLAGS handling was not entirely correct. So fix
CFLAGS/CPPFLAGS/LDFLAGS to work like standard build systems (i.e. autotools)
and change `ranlib` to $(RANLIB) to fix cross-compiling.
Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Mike Frysinger [Tue, 9 Dec 2008 13:28:03 +0000 (08:28 -0500)]
ubiformat.c: fix printf(%d, size_t) warning
A size_t should be printed using %zu (unsigned size_t) rather than %d. This
fixes the following warning on my system:
gcc -O2 -Werror -Wall -Iinclude -Isrc -I../../include src/ubiformat.c -c -o ubiformat.o
cc1: warnings being treated as errors
src/ubiformat.c: In function ‘read_all’:
src/ubiformat.c:345: error: format ‘%d’ expects type ‘int’, but argument 3 has type ‘size_t’
src/ubiformat.c:352: error: format ‘%d’ expects type ‘int’, but argument 3 has type ‘size_t’
make: *** [ubiformat.o] Error 1
Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Tom Rini [Mon, 8 Dec 2008 08:02:00 +0000 (01:02 -0700)]
ubi-utils: various fixes
gcc-4.3.x introduces a number of new warnings (and we use -Werror) for
things like not checking scanf return values and not using explicit
formatting. Finally, it caught that we were overflowing our own buffer
in unubi.c, so increate the variable size as we want to declare and
clear PATH_MAX + 1, then use only PATH_MAX of the variable.
Signed-off-by: Tom Rini <trini@embeddedalley.com> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Let's have the "new ubi-utils" makefile handle CFLAGS like the other
makefiles. This is important when cross compiling and CFLAGS is
externally provided. Without this, local include files are not found due
to the various -I arguments which are then lost.
Signed-off-by: Nicolas Pitre <nico@marvell.com> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Adrian Hunter [Mon, 3 Nov 2008 08:41:58 +0000 (10:41 +0200)]
ubinize: correct subpage_size print and initialise vol_info to zero
J. Scott Merritt wrote:
> Dear list,
>
> I believe that I have stumbled upon two problems with the latest version
> of ubinize.c in mtd-utils - one serious, and one not so serious.
>
> - First, the easy one: At line 457, I believe that we should be printing
> args.subpage_size rather than ui.min_io_size.
>
> - More seriously, I believe that the "flags" field in the ubigen_vol_info
> structures is not being properly initialized. Line 494 allocates memory
> for these structures with malloc, so they are not cleared to zero. The
> read_section function updates the flag field if the AUTO-RESIZE flag is
> specified, but does not otherwise initialize or clear it.
>
> I reckon the latter problem could be repaired either with calloc, or by
> modifying read_section to more directly set/clear the flag.
>
> Thanks, Scott.
Reported-by: J. Scott Merritt <merrij3@rpi.edu> Signed-off-by: Adrian Hunter <ext-adrian.hunter@nokia.com> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
This patch alters fec.c so it does not use the deprecated bzero, bcopy
and bcmp functions. This can help on platforms that do not have these
functions.
Signed-off-by: Mitch Davis <mitch.davis@symstream.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Grant Erickson [Sun, 7 Sep 2008 20:45:21 +0000 (20:45 +0000)]
nanddump: Qualifier Clean-up
Static-qualified all globals except 'main' because they have no use
beyond file scope.
Constant-qualified MTD device and input positional parameter globals.
Constant-qualified argv array.
Grant Erickson [Sun, 7 Sep 2008 18:29:19 +0000 (18:29 +0000)]
nandwrite: Add Support for Reading from Standard Input
Added suppport for reading in band data from standard input based on a
patch originally generated by Richard Titmuss <titmuss@slimdevices.com>
at <http://lists.slimdevices.com/pipermail/jive-checkins/2008-May/001918.html>.