Vendor-provided .bin files have repeatedly demonstrated that our
previous interpretation of this field as version[0] is likely
wrong. Instead, it seems to represent the file size (in bytes)
of the .bin file.
This commit fixes both decompilation (and header checks) and
generation of .bin files, where it will now store the size to
this field.
TODO: It's unclear whether the 'filesize' needs some specific
alignment (and the .bin corresponding padding). A value of
34864 (0x8830) has already been observed, so any possible
alignment is expected not to exceed 16 bytes (0x10). (Currently
our .bin generator doesn't care about any specific alignment.)
Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
This removes the "-g -O0" default (to leave them up to the user
CFLAGS), and adds a switch to ignore "unused result" warnings.
The latter is relevant when trying to compile nand-part.c with
optimizations enabled.
Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
The previous commit had introduced a new build rule that made
sunxi-pio always (cross-)compile as part of TARGET_TOOLS. This
originated from a misunderstanding, and is wrong - sunxi-pio
should be part of TOOLS instead.
sunxi-pio is a "dual mode" utility. When run natively on a sunxi
SoC, it can mmap() and manipulate the PIO registers directly. But
it also supports file-based operation, to be used in conjunction
with sunxi-fel (after uploading fel-pio.bin thunk code). This
should work over USB from non-sunxi hosts, and thus puts sunxi-pio
in the TOOLS category. See the fel-gpio shell script for details.
Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
For now, this is for informational purposes (program version
output), but it might also serve as an anchor point for a
"bugfix" release after some changes made to the build system.
Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
For Linux build testing, we want all targets compiled. To do so
without a cross-toolchain, simply use the host compiler for the
target tools. This can be achieved by setting CROSS_COMPILE to
an empty string.
OSX can't handle this: It neither supports "-static", nor would
it successfully compile meminfo.c. Thus we keep the default
"make", which should only build the 'tools' target.
On Linux we'll also test the install-* targets by requesting
installation to /tmp/sunxi-tools as a post-build step.
Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
This appends sunxi-meminfo to the TARGET_TOOLS, and adds a new rule
to fix the compilation of sunxi-pio (by making it *cross-compile*
for the target).
Additionally adds a new build target "make install-misc".
For more details, see github issues #69 and #70.
Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
Fixing the (currently erroneous) compilation of sunxi-pio will
cause "make target-tools" to require a suitable cross-compiler
installed. Otherwise "make target-tools" fails to build.
As that is part of our default target ("make all"), we might
possibly introduce a build breakage on quite a few systems.
Avoid this situation by redefining "make tools" as the default,
and change "make install" to "make install-tools", i.e. limit
the standard targets to those builds that only rely on the host
toolchain. From now, if you actually want to include the cross-
compiling steps, use "make all" or "make install-all" instead.
Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
Also: Add the winsock2 library to LIBS for Windows. When not
linking against it, the usage of WS2 conversion functions from
portable_endian.h would cause unresolved symbols.
Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
For Windows portable_endian.h relies on and includes <winsock2.h>.
Thus it needs to be requested first, otherwise other includes might
pull in <windows.h> and cause a preprocessor warning / compilation
failure (observed with MinGW).
Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
By defining NO_MMAP it's now possible to avoid the usage of
mmap() and munmap(). This benefits platforms that don't support
these functions, e.g. Windows.
Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
This commit renames the function pointer of type progress_cb_t
for file_upload(). That might help to avoid potential confusion
with other routines that use a boolean "progress" parameter to
indicate whether progress information is desired (at all).
Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
Until now, the function would always pass `true` as the "progress"
parameter to aw_write_buffer(). This has the potential drawback
of limiting the maximum USB transfer size.
By selectively passing `false` instead (with no progress function
active), we hint that aw_write_buffer() and subsequent routines
don't have to care about callbacks; so that usb_bulk_send() is
free to select a transfer size of AW_USB_MAX_BULK_SEND.
Reviewed-by: Bernhard Nortmann <bernhard.nortmann@web.de>
This way we don't have to introduce new options for retrieving
version info. For those programs that do not output their usage
by default (e.g. because they would process stdin), you may pass
a "-?" option to get help - and thus version information.
Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
* fel: Add the ability to pass uEnv-style data via FEL
The corresponding format is recognized by having the environment
data (= text) start with a special "#=uEnv" marker. Upon transfer
of such a file, sunxi-fel will detect this condition, and set a
field in the SPL header accordingly - which in turn also requests
U-Boot to auto-import it (i.e. merge with the default environment).
(Note that this requires a U-Boot version that knows about the
new meaning of this field, namely v2016.09 or later. Older U-Boot
versions will fail to import the uEnv-style data.)
Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
LICENSE.md replaces the former COPYING. It's an exact copy of the
original at https://www.gnu.org/licenses/old-licenses/gpl-2.0.md
(MD5 97bd67b5d0309e452b637f76e1c9a23c), retrieved as of Oct 22nd 2016:
HTTP/1.1 200 OK
Date: Sat, 22 Oct 2016 13:45:28 GMT
Last-Modified: Sat, 06 Aug 2016 17:46:02 GMT
ETag: "45e5-5396ac1a9ca80"
Content-Length: 17893
Content-Language: en
As github (auto)displays a license link and we also point to it
via a badge in the README.md, it's convenient to have Markdown
syntax display this file nicely formatted.
Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
The Makefile will now use a script (autoversion.sh) to update
version.h, which in turn defines a VERSION string and gets
included from common.h.
The idea is that version.h normally receives a git-describe
based identifier that represents the current checkout. In
cases where git might not be available, e.g. for builds from
a tarball, the script will instead fall back to a predefined
version (that should reflect the most recent release tag).
Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
--help/-h is not working correctly (it's printing the help context on
stderr instead of stdout).
Adding a valid shortcut for --help solves the problem.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Bernhard Nortmann <bernhard.nortmann@web.de>
Add explanations on where the options to pass to the tool should be
extracted from, and add two examples to illustrate this explanation.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Bernhard Nortmann <bernhard.nortmann@web.de>
---
Changes since v3:
- cosmetic changes to the help context
Changes since v2:
- limit line width in the help context
Changes since v1:
- use shorter option names
- rework the help context
Add error messages explaining what is wrong or missing in the arguments
passed by to the sunxi-nand-image-builder tool.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Bernhard Nortmann <bernhard.nortmann@web.de>
---
Changes since v1:
- Drop uneeded braces
Add NextThing Co. and Free Electrons copyrights and add myself as the
author of the randomizer and image builder implementation.
Remove the lengthy description explaining how the BCH implementation works,
since this is the purpose of this tool is not to expose a BCH library
(which was the case of the original source code I copied from the kernel).
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Bernhard Nortmann <bernhard.nortmann@web.de>
---
Changes since v1:
- Add a link to the original bch.c source file
Generating raw NAND images is particularly useful for boot0 images
creation since the mainline driver is not supporting the funky layout
used by Allwinner's ROM code to load the boot0 binary from NAND.
This tools also allows one to generate raw images for 'normal' partitions
so that they can be flashed before soldering on the NAND on the board
(using a regular NAND programmer).
The tool takes care of generating ECC bytes and randomizing data as
expected by the NAND controller, and re-arranging the ECC/data sections
correctly.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Now that we have a better understanding of what's causing the issue
that prevented entering FEL sometimes, we can adjust the workaround
code to a proper solution, i.e. skip over the problematic location.
Since the code amounts to less than a dozen ARM instructions, I've
decided to rewrite it as assembly code - fel-sdboot.S replaces the
former fel-sdboot.c.
The commit also includes a new binary (bin/fel-sdboot.sunxi) with
these changes.
Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
Reviewed-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>