sparse_file_write_block calls functions that might failed. This patch
makes sparse_file_write_block catch the error code and propagate it.
Without this patch, fastboot crashes on a segmentation fault if
usb_write() fail during a sparse file image flashing.
Change-Id: If9c0e8dfac8fa380628a2504e13abe8cf7d62726
Signed-off-by: Jeremy Compostella <jeremy.compostella@intel.com>
This matches the more general adb syntax, though the fastboot
protocol doesn't support rebooting into the recovery image.
Change-Id: I6d93d4c63d4a9b81c71e681e7a7bf76867fba019
Many of the windows files where not including stdlib.h even though they
are using malloc/free calls.
(cherry-pick of ae7bf0959bd3f79afbf365e41f015ed1c304afdc.)
Change-Id: If6959df9909d9d9928e9f4a2a96018166361cf3c
When enumerating USB 3.x devices, an extra 6-byte SuperSpeed
companion descriptor follows each standard endpoint descriptor.
The loop parsing the descriptors will stumble if they're not
handled. Since they're not needed once the bulk endpoints are
identified, we can simply skip over them.
Change-Id: I7e73bcf9135f23c3059cd7c55b432557b28cb6ef
This was caught by clang 3.6's -Wpointer-bool-conversion. The device_path
field is a char[256], and thus never NULL. The intention for this code was
to check whether or not there is a named path at all. Checking whether this
is an empty string matches the original intent.
Change-Id: I5ccedc03167e6a457e472089de26130aff7f96e3
This is useful for writing Windows GUIs that want to parse the output of
fastboot before it exits.
Change-Id: Ic0171fe379fc4db7b65b1501e5f2e771ac7c62c4
Signed-off-by: Florian Bäuerle <florian.bae@gmail.com>
Replace the use of CFStringGetCString with kCFStringEncodingASCII specified
with CFStringGetFileSystemRepresentation which will ensure the correct
character encoding is used to conver the CFString into a NULL terminated
char array suitable for use with POSIX APIs.
Change-Id: Ibab1dc05c4f4db8604d329a493b4241992b8e69d
The previous implementation returned the path the executable was in instead
of returning the path including the executable (i.e. it returned ...bin
instead of ...bin/executable). This is not what the original methods did
and caused the process forking of adb to fail.
This patch corrects the implementation.
Change-Id: Ib58497cab35706041f170c1bc97c31fd5d965f90
Recent versions of XCode fail to compile the adb and fastboot binaries due to
two functions being deprecated in 10.9 (GetCurrentProcess and
ProcessInformationCopyDictionary), and the use of -Werrror.
This patch replaces the method implementations which use calls to methods
deprecated in the 10.9 SDK with versions which only call non-deprecated methods.
Change-Id: I855bf26aff45093ca9022924f3ecd1b80f2305a8
With USB3.0 SS support the max packet size supported by USB protocol
is 1024 bytes. When connected to a USB device in SuperSpeed, if only
512 bytes are sent at a time the device would interpret each transfer
as a short packet and slows down overall throughput. To accommodate
for SuperSpeed USB bulk endpoints, increase the buffer size to 1024.
Change-Id: I4f447fe38045bc0008e2d6dd3f36c2d6819d6c15
Many of the windows files where not including stdlib.h even though they
are using malloc/free calls.
Change-Id: If6959df9909d9d9928e9f4a2a96018166361cf3c
Bug: 14416410
1. The new mingw-w64 toolchain x86_64-w64-mingw32-4.8 has ddk
in x86_64-w64-mingw32/include/ddk
2. Add -Wno-error=cpp to suppress a warning that turns into error
thanks to -Werror:
Please include winsock2.h before windows.h
3. Cast GetLastError() return type DWORD to "int"
4. Include direct.h for _mkdir
5. Include stdint.h for uint8_t on Windows
Change-Id: I4bec0587f6573692f08c760da6c98ae551b8b5eb
The AOSP bootimage format allows the use of a second stage image
however the fastboot boot and flash:row commands do not allow the
"secondstage" optional argument. This patch adds the support of this
argument for both commands.
Change-Id: I00403a95d7460a00233841ba0fe0e8a69d78c7b4
Signed-off-by: Jeremy Compostella <jeremy.compostella@intel.com>
For Linux, the USB code was only looking at the first
descriptor when searching for the fastboot interface
which caused some devices to not be found.
Also clarify some code by using the actual USB structures
instead of void or char pointers.
(Cherry Picked from aac89db8a5)
Change-Id: I9e4871c4d477ac10ba75bb17a955f176809af289
Signed-off-by: Patrick Tjin <pattjin@google.com>
For Linux, the USB code was only looking at the first
descriptor when searching for the fastboot interface
which caused some devices to not be found.
Also clarify some code by using the actual USB structures
instead of void or char pointers.
Change-Id: I9e4871c4d477ac10ba75bb17a955f176809af289
Signed-off-by: Patrick Tjin <pattjin@google.com>
Modified fastboot to flash vendor.img as well. Moved symlink
for /vendor to occur after mounting partitions. Changed mount
to also create the mount point.
Change-Id: I78e1ba24e6bb8b4af96a67ee0569af579439e682
Signed-off-by: Daniel Rosenberg <drosen@google.com>
This is a follow-up to commit 157b00171a.
After "fastboot reboot", "fastboot devices" was still showing the device as
connected even though it was starting to reboot; now "fastboot reboot" will
wait until the device has disconnected.
The wait timeout is 3 seconds.
Change-Id: I8066741f0be91e53f3e3f5bc968bc1b9de31db05
Currently the default rpath includes $ORIGIN/../lib
So we throw in '.' which should help distributions of fastboot.
readelf -d $(which fastboot)|grep RPATH
0x0000000f (RPATH) Library rpath: [$ORIGIN/../lib:.]
Bug: 15731906
Change-Id: I2f4345d178e5b3c87f6f159faf105ae30f3b52eb
Signed-off-by: JP Abgrall <jpa@google.com>
In the past it would incorrectly also link against the dlopen()'d lib.
Now it clearly does not care about it.
ldd $(which fastboot)
linux-gate.so.1 => (0xf7735000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf76d9000)
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf75f4000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf75c7000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf75a9000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf73ff000)
/lib/ld-linux.so.2 (0xf7736000)
Bug: 15717498
Change-Id: I5465e97a445b17f5493a1f590e181ef98a382451
Signed-off-by: JP Abgrall <jpa@google.com>
F2FS was already disabled on windows, but the library doesn't build for
mac either, so only try and use it on Linux hosts.
Change-Id: I8bacfa4c01c9ee13123aef6d05d17b3f9094c765
Only do f2fs dynamic loading on linux.
Adds a stub for windows builds.
Change-Id: I7bbaaa1b2ff5992709d904b7ace40ae263d32922
Signed-off-by: JP Abgrall <jpa@google.com>
- Enables fsck.f2fs for partitions with type F2FS.
- Adds support for f2fs as format fs-type.
- f2fs is optional and support is dlopen()d when needed.
Needs changes in
system/extras/f2fs_utils
external/f2fs-tools
Change-Id: I8d141a0d4d14df9fe84d3b131484e9696fcd8870
Signed-off-by: JP Abgrall <jpa@google.com>
- Deal with a missing initializer issue
- Deal with some -Wunused issues
- Deal with some signed/unsigned issues
- switch to usleep from sleep to facilitate win_sdk compile
Change-Id: I64e32a5b0782aeed9582f489e866173c4df1afbf
This changes allows overriding the fs-type and size that
are normally returned by the booloader.
This is in preparation for supporting other FSes.
Change-Id: I8d141a0d4d14df9fe84d3b131484e9696fcd8870
Signed-off-by: JP Abgrall <jpa@google.com>
Previously, if an image was listed as optional, but was not found,
flashall would fail. Now it will proceed if optional images are not
present.
Change-Id: Ic82595cf0cd6ddce4c676de590f03f1a95f32040
Signed-off-by: Daniel Rosenberg <drosen@google.com>
Formatting large partitions on devices with small transfer buffers did
not work before since format used a strange path through the code to
send data. It now uses the normal path. Also cleaned up a bit. FS
code now lives in a separate file and the custom path for format is
gone.
Change-Id: If4e01cabc2e250b7c02ca7ce8c268e51d49e1529
Normally fastboot follows the procedure that host sends a command
to device and device sends back response after the command
is executed.
But sometimes device spends too long time to execute the command
so that timeout error occurs before host receives the response.
This patch fixes the issue by aligning with the solution of ADB.
ADB commit id: 1c4b760a5d
Change-Id: I50e6bf428ea38219b64cca6ab82db22af28e0264
Author: Jiebing Li <jiebing.li@intel.com>
Signed-off-by: Bo Huang <bo.b.huang@intel.com>
(Linux only for now) With fastboot reading serial numbers from sysfs, it had
become possible for a fastboot command issued immediately after rebooting
the bootloader to fail, because sysfs still thought the device was online.
To prevent this, after reboot-bootloader we wait for the device to disconnect.
Also made usb_read and usb_write fail immediately if the descriptor has been
closed; this prevents an incorrect error message ("Bad file descriptor")
when errors from fb_getvar are ignored (e.g., by fb_format_supported).
Also removed unused fd param from filter_usb_device, and simplified logic
in usb_write by using do/while instead of a special case for len == 0.
Change-Id: I799b857eab411fd8ad25f5777fc61c685152ea86
Instead of sending control requests to all devices to read their serial
numbers, read the cached strings from sysfs. This fixes two problems:
1) The control requests sometimes timed out, causing devices to show up
as "????????????????", and 2) a control request could mess up devices
which were in the middle of being flashed.
Also enumerate by walking sysfs rather than devs so that we can avoid
opening host controller devices, which can be slow. On a system with 10
EHCI controllers, fastboot devices now takes 7 msec instead of 700 msec.
Change-Id: I2ad2d58b48268d7950bd279fd6a6753dc2f79514
The version of MINGW we compile with has more advanced POSIX support.
Removing legacy MINGW workarounds as those are not needed anymore.
Change-Id: Id5d67176b719db6c3667be6d63c41432e0ba9f30
Signed-off-by: Rom Lemarchand <romlem@google.com>
Without the partition name, the bootloader would have to store all
of the data until the next flash command, which potentially wastes
time.
To help the bootloader deal with the data more efficiently, we now
issue a flashing hint ("preflash:%s", partname).
"preflash:" is used to indicate that the following download
should ignore any previous "preflash:%s".
Bug: 6045918
Change-Id: I4e9708f64f28a4781bde14eb3714d36b281ec5be
Some devices use mkbootimg with weird args for which fastboot
only a hardcoded value.
Now fastboot recognizes those args.
Made handling of global vars more consistent.
Bug: 8341331
Change-Id: Ic09f148ccd0249f49935fdc63e517cf8ab2229bc
The removal of extra headers from ext4_utils.h removed an indirect
include of errno.h that breaks building with USE_MINGW=1.
Change-Id: Ic8448db97b5c056a139dc836e1d6f3aaafb917c9
Switch fastboot to use an exported api from libext4_utils that
will change less often, and remove some of the implementation
details from fastboot.
Change-Id: I85a10c8f58abe8093d0c781e1a0e100c348ef0d9
fastboot_protocol.txt used to live in bootable/bootloader/legacy
which was old, obsolete code. However, fastboot_protocol.txt is
a useful file and belongs with the fastboot code.
Change-Id: Iea50c3219f9ff9dd0c394fc6028c456fa948ffd9
Signed-off-by: Scott Anderson <saa@android.com>
To prevent false error reports from e2fsck, update fastboot to erase
a partition identified as being ext4 partition before flashing an image
to it.
bug: 7259359
Change-Id: I85e9963aa8247b4b33fdd57f994cdb3ee72b670f
Move the help command handling before the call to open_device
so that is doesn't block when no device is connected.
Bug: 7078873
Change-Id: I4e9a4317bd72b4ceb4b9fc838eafd2e57b17a473
Move the help command handling before the call to open_device
so that is doesn't block when no device is connected.
Bug: 7078873
Change-Id: I4e9a4317bd72b4ceb4b9fc838eafd2e57b17a473
* commit 'c56f428530a307c850dc99024d23f7e5ebbf92d3':
Support for multiple modules with the same name is going away.
Fix build by removing TAGS from host module
libext4_utils on host is now called libext4_utils_host so there is no name conflict
Change-Id: I7390867abd00036f19eb4d1a1ce23aa0aca50674
Signed-off-by: Matt Gumbel <matthew.k.gumbel@intel.com>
Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
Change the default sparse limit to disabled to prevent resparsing files
unless the bootloader or user specifies a sparse limit. Some
bootloaders issue an erase before every flash command, which causes
earlier parts of the downloaded image to get erased.
Change-Id: Iac6f3b05580aba8b82ed0f2f800979a49c33c691
"fastboot -w" would segfault because *argv was invalid when no
non-option arguments were specified. Check argc > 0 before
dereferencing argv.
Change-Id: I822a799e6a38e4e5c0a4eca48c6343b8a08a6185
Add support to fastboot for automatically using libsparse to break large
files, whether they are in sparse or normal format, into multiple sparse
files that can each fit into the target's memory. Allows flashing
images that are larger than the size of the available memory on the
target.
By default, any file over 512MB will be sparsed into 512MB chunks. The
limit can be modified with the -m argument, or sparsing can be forced
with -S or avoided with -N. If -m is not specified, the target can
override the default by implementing getvar:max-download-size
Change-Id: I6c59381c3d24475c4f2587ea877200b96971cbd7
Modify the fastboot argument parsing to use getopt_long. This
simplifies argument parsing, and permutes all the commands to the end of
argv to allow parsing them later.
Also moves usb initailization between argument and command processing,
to allow commands to query parameters over usb.
Change-Id: I883572f52c4190c80ee3b4aa4511ea2061a6b734
Ignore ANDROID_SERIAL when requesting to list devices, or else it is
impossible to list devices without unsetting the env var. Even
ANDROID_SERIAL= fastboot devices
or
fastboot -s "" devices
won't work.
Change-Id: Ie92f35bda852c6ecea4ebaefb75b8f18c10b6d0c
If the bootloader doesn't support formatting of those partitions
(either because it doesn't support the getvar commands needed or
the partition type is not supported), the errors are printed but
doesn't halt processing of subsequent commands.
Change-Id: I816ac2e5e7593846fcb4fd39c793a8dbdd996f6f
Signed-off-by: Mike J. Chen <mjchen@google.com>
For manufacturing and testing, there is a need to talk to
whatever device is connected to a given port on the host. This
change modifies fastboot's "-s" option to take either a serial
number or a device path. The device paths of the connected
devices can be listed using "fastboot -l devices" whose output
will resemble:
016B75D60A00600D usb:2-5 fastboot
AD3C12020173 usb:1-4.3 fastboot
The second column lists the device paths. If the -l option is
not given, the output from "fastboot devices" will be the same as
it used to be (i.e. the paths will not be printed).
Finally, note that the format of the device paths are platform
dependent. The example above is from Linux. On OS-X, the paths
will be "usb:" followed by hex digits. For Windows, the device
paths will be printed as "????????????" and the -s option will
not be able to select a device until someone implements the
underlying functionality in usb_windows.c.
Change-Id: I1f01b8f47acd32edb0ac18db107316a2c923bbde
Signed-off-by: Scott Anderson <saa@android.com>
Some devices will fail to return the requested data if the final
URB len of the request to > 255.
So shrink the current data buffer from 128 to 127 in the acse of getting
the serial number seems to work just fine.
Change-Id: Ic24e6c86ec93f002dc721d92309b3f880f281f20
There were some changes to make_ext4fs to add SELinux context. Also, we
changed the "android" argument to an fs_config_func that allows you to
customize the permissions put into a ext4 filesystem.
Change-Id: If23152c40659122a91771fcbd094f713b38e321e
Some filesystems (e.g. ext4) require flushing an initial
fs image, right after erasing it the partition is unusable.
Doing erase,flush emptyfs is a little bit scaring so we have a
separate command that performs it as atomic step:
- get size of partition
- create an empty filesystem image
- erase the partition
- flush empty fs to the partition
This command applicable only for ext4 filesystem and checks the
partition type before formatting it.
Change-Id: I8529bc3485739487f0d91312f7c0ab1a6e5d8b44
fastboot: Change -w to format after the erase of userdata & cache
If the bootloader doesn't support formatting of those partitions
(either because it doesn't support the getvar commands needed or
the partition type is not supported), the errors are printed but
doesn't halt processing of subsequent commands.
Change-Id: I816ac2e5e7593846fcb4fd39c793a8dbdd996f6f
Signed-off-by: Mike J. Chen <mjchen@google.com>
Some filesystems (e.g. ext4) require flushing an initial
fs image, right after erasing it the partition is unusable.
Doing erase,flush emptyfs is a little bit scaring so we have a
separate command that performs it as atomic step:
- get size of partition
- create an empty filesystem image
- erase the partition
- flush empty fs to the partition
This command applicable only for ext4 filesystem and checks the
partition type before formatting it.
Change-Id: Ifa42deaa66c3cb96ff786a73c3fadad92658f395
Some filesystems (e.g. ext4) require flushing an initial
fs image, right after erasing it the partition is unusable.
Doing erase,flush emptyfs is a little bit scaring so we have a
separate command that performs it as atomic step:
- get size of partition
- create an empty filesystem image
- erase the partition
- flush empty fs to the partition
This command applicable only for ext4 filesystem and checks the
partition type before formatting it.
Change-Id: I8529bc1dc64237f1f0d91312f7c0ab1a6e5d8b44
Some filesystems (e.g. ext4) require flushing an initial
fs image, right after erasing it the partition is unusable.
Doing erase,flush emptyfs is a little bit scaring so we have a
separate command that performs it as atomic step:
- get size of partition
- create an empty filesystem image
- erase the partition
- flush empty fs to the partition
This command applicable only for ext4 filesystem and checks the
partition type before formatting it.
Change-Id: I8529bc1dc64698f1f0d91312f7c0ab1a6e5d8b44
Some filesystems (e.g. ext4) require flushing an initial
fs image, right after erasing it the partition is unusable.
Doing erase,flush emptyfs is a little bit scaring so we have a
separate command that performs it as atomic step:
- get size of partition
- create an empty filesystem image
- erase the partition
- flush empty fs to the partition
This command applicable only for ext4 filesystem and checks the
partition type before formatting it.
Change-Id: I8529bc1dc64698f1f0d91312f7c0ab1a6e5d8b44
Set the language local string to 0x409 (English US / en-us) such that
fastboot will successfully read the usb descriptor serial number string.
The usbdevfs ioctl fails when the wIndex is not initialized with the
local for the unicode of the usb descriptor string. usbdevfs is an
obsolete interface and fastboot probably needs a re-write to use libusb
like what is in adb.
Change-Id: I3687f84643f53c736f14b3ae7793185d9b5cccc0
Signed-off-by: Mark D Horn <mark.d.horn@intel.com>
This patch adds Intel USB Vendor ID into the support
list for adb and fastboot.
Signed-off-by: Wu, Hao <hao.wu@intel.com>
Signed-off-by: Jack Ren <jack.ren@intel.com>
This is needed for products like xoom-cdma and xoom-cdma-lte.
The xoom-cdma-lte product requires an lte baseband binary but
it's not needed for xoom-cdma.
This is implemented by allowing an optional product parameter
to "required" statements. The parameter is separated from
"required" by a colon so the version-baseband-2 requirment in
board-info.txt for stingray becomes:
require-for-product:xoom-cdma-lte version-baseband-2=ltedc_u_03.25.00|ltedc_u_03.19.00
In the above statement, only xoom-cdma-lte requires version-baseband-2
and the baseband can be lte_u_03.25.00 or lte_u_03.19.00. For other
products version-baseband-2 will be ignored.
Change-Id: I786bec5f5661c2243d87925b064fc6124d3cffa1
The default USB transfer bulk is fixed as 4096 in fastboot util code for
Windows and Linux. Enlarging the bulk size can greatly improve the image
download speed via USB.
For Windows, adjust the max bulk size to 1MB to maximize the USB transfer
speed. With this change, the USB transfer speed can be doubled to 20MB/s.
For Linux, adjust the max bulk size to 16384 to maximize the USB transfer
speed according to MAX_USBFS_BUFFER_SIZE definition in drivers/usb/core/devio.c.
For OSX, the maxLenToSend is already 1MB in code.
Change-Id: If6af8c6301f6f6c2ef345e37241706f16d8f5cda
ClearPipeStallBothEnds() appears to fail on some devices, but if we ignore
that error then fastboot does work. So ignore the error.
Change-Id: Ic866ece28a57c081e34079e1a032fa8155301ddf
Merge commit 'beb72464ff8c501597cd7e098090f7d131dc5ccb'
* commit 'beb72464ff8c501597cd7e098090f7d131dc5ccb':
fastboot: make it so I can actually see the bootloader chatter
- prefix bootloader messages with (bootloader)
- remove the fancy right justified no newline business
Change-Id: Ica16ebe6a25971db423c5db06300a280d93faf3e
Signed-off-by: Brian Swetland <swetland@google.com>
Merge commit 'a8c7404956b4370162a87ae09b851266a4933b54'
* commit 'a8c7404956b4370162a87ae09b851266a4933b54':
Set explicit timeout on USB control transfer
The kernel panic seems to be related to the driver trying to allocate
too many pages from the IO mapper. That may be caused by the fact
that we try to perform a 100+ MiB transfer in a single IO operation.
This change breaks the transfer down into 1 MiB chunks.
So far after a day of testing, no kernel panics have occurred compared
to 5 in the previous 24 hours!
Change-Id: I8d27a546e0c0bf4fe2f0fc7fcad65a88d3e6bee0
When using fastboot in scripts, it currently is necessary to parse the
output for FAILED messages and possible other indications of
error. This happens relatively often, for example when there are radio
update issues. Fortunately, fb_execute_queue already has a notion that
an error has occured which is used to abort the queue execution.
This change makes the status value be returned from fb_execute_queue
to main which can then return it as an exit status. usage cases were
also changed to return 1.
Note the code already returned 1 for error in one other case when
there was a problem with boot, so there is a precedent for return 1 on
error in this program.
Change-Id: Ib0463b08c8f2569495e248dd84e331f7e3691039
Merge commit 'ef063fe3066153dab5389b6baba6cb4e36888106'
* commit 'ef063fe3066153dab5389b6baba6cb4e36888106':
Add support for Acer devices
FreeBSD support for usb-connected devices in adb
Make get_my_path() safer
Fix use of memset function
Without this patch, "adb devices" will say "no permissions" when it sees
a device it can't write to, but "fastboot devices" will silently ignore it.
This is confusing to n00bs, especially since it doesn't seem to be widely
known that a device's USB id might be different in the bootloader (meaning
two udev rules are needed). It can also be confusing if you're sshed in,
when you can't access the device because you won't be in the "plugdev"
group, but "fastboot devices" won't make this clear.
I'm not sure about the Mac OS and Windows changes. AIUI, devices are always
writable on those platforms, but I don't use either, so I can't test this.
This patch shouldn't alter the behavior on either of those platforms.
If the USB connection to the device is reset but is still there
the code should retry to re-connect the device and continue.
This is a short term fix for a bootloader issue.
We should revisit and look for a better solution.
Signed-off-by: Dan Murphy <D.Murphy@motorola.com>
Signed-off-by: Mike Lockwood <lockwood@android.com>
Add the --base flag to mkbootimg and -b flag to fastboot, to allow
the default kernel base address (0x10000000) to be changed.
Signed-off-by: Brian Swetland <swetland@google.com>