One of the tools any good flashaholic should be familiar with is fastboot. Like ADB, the help screen for fastboot received some changes with the preview release of Android M. The reboot command now offers a friendlier syntax to reach the bootloader, and there is a new set of "flashing" commands designed to prevent write operations from occurring when they aren't desired. There's also a fix for the "missing system.img" error that some people experienced after trying to use the flash-all script to install factory images.

Perhaps the most welcome change is the smallest. Fastboot's reboot command now accepts an optional bootloader parameter that can restart the device and immediately launch back into the bootloader screen. Obviously, the functionality mirrors that of the reboot-bootloader command, but it will no longer play havoc with those of us that reflexively use the more commonly used adb syntax (i.e. adb reboot bootloader). It's a small thing, but I hope the Android team considers adding a shortcut to Recovery, as well.

A brand new set of commands have also been added to take control over when and what is allowed to be written. Each command begins with the word "flashing" and is followed by an instruction that indicates both an intended lock state and what is supposed to be locked:

flashing lock - locks the device. Prevents flashing partitions

- locks the device. Prevents flashing partitions flashing unlock - unlocks the device. Allows user to flash any partition except the ones that are related to bootloader

- unlocks the device. Allows user to flash any partition except the ones that are related to bootloader flashing lock_critical - prevents flashing bootloader related partitions

- prevents flashing bootloader related partitions flashing unlock_critical - enables flashing bootloader related partitions

- enables flashing bootloader related partitions flashing get_unlock_ability - queries bootloader to see if the device is unlocked

These flashing commands are most likely meant to set some restrictions on scripts that may not be entirely predictable. Beyond the AOSP commit that added support, there's not much in the way of documentation.

A relatively minor change was also made to the boot and flash:raw boot commands. They used to allow for the selection of a second ramdisk, if it was necessary, but that parameter appears to have been removed.

Finally, for users that have seen the "update package missing system.img" error message after using the flash-all script that comes with Nexus factory images, it seems that the issue has been fixed. The old default behavior for fastboot involved decompressing the entire factory image into RAM before transferring everything to a device. The problem usually occurred because the substantially larger system image exceeded the amount of available physical memory. A bit of reworking and fixing of a couple newly created bugs, and now it seems that everything should be working correctly across all major operating systems (Windows, Mac, and Linux).

If you haven't already, the latest fastboot is available through the SDK Manager in the Platform Tools package. Look for the Preview Channel to find rev. "23 rc2". This package will include both the latest adb and fastboot executables, along with a few other development-oriented tools. We've also created copies of the fastboot usage pages from v22 and v23 rc2 for anybody that would like to compare them.