[ZIP] LazyFlasher - the swiss army knife of flashing custom kernels!

Search This thread

jcadduono

Recognized Developer
Jan 17, 2014
1,489
6,226
32
Thunder Bay
adduono.com
LazyFlasher & no-verity-opt-encrypt


INTRODUCTION

Hello Users and Developers of XDA!

LazyFlasher is a custom kernel flashing tool designed to make it easy to dynamically modify ramdisks and inject kernel binaries into the current boot image.
It's the swiss army knife of kernel flashing for use in Team Win Recovery Project.

The intent behind it was to allow a 1 custom kernel fits all approach, where your users can flash single zip on any ROM for a particular device,
allowing your kernel to be compatible with the vast majority of custom ROMs already out there. It takes away the pain of building custom boot.img
for each and every variant a user requests and puts it into 1 low maintenance intelligent universal flashable zip.

You might already know of @osm0sis's AnyKernel2 project. This approach is similar to that. Back in late 2015 I decided to design a more compatible, more friendly, and more feature filled version. Since then, AnyKernel2 has apparently improved a lot so if LazyFlasher doesn't accomplish what you need, AnyKernel2 probably will.
LazyFlasher does not currently support ELF boot images.

For users of no-verity-opt-encrypt: This thread can also be used to discuss the no-verity-opt-encrypt project which is just a minimal version of the LazyFlasher framework.

Disqus thread: https://www.xda-developers.com/xda-...-is-an-alternative-to-the-anykernel2-project/

THE GITHUB REPOSITORY

You can find LazyFlasher's development and download it here: https://github.com/jcadduono/lazyflasher

LazyFlasher source code is distributed under the BSD 2-clause license. You can do anything you want with it, however, some of the binaries used by it are under GPLv2 or GPLv3 licenses.

FEATURES

  • ChromeOS support (ChromeOS test-key signing and recognition)
  • MediaTek device support (MTK headers)
  • SELinux policy injection support via sepolicy-inject
  • Example scripts to disable dm-verity or forced encryption during the install process (010-no-force-encrypt, 015-no-dm-verity)
  • A process that executes a sorted list of scripts for making the desired modifications (separate from the framework)
  • Handily unpacks, decompresses, applies changes, compresses, and repacks boot images quickly and safely
  • Supports Gzip, LZ4, Bzip2, and LZO ramdisks. Support for LZMA and XZ is a work in progress
  • Supports arm (armv7), arm64 (aarch64), x86 (i386), x86_64 (amd64), mips, and mips64 architectures
  • Supports dtb.img replacement (place it in the root folder named "dtb.img")
  • Scans fstab and partition locations for the boot partition, optionally allows a preset location
  • Intelligently installs kernel modules by copying the previous layout of /system/lib/modules and creating symlinks
  • Creates modprobe supported /lib/modules aliases if kernel modules are included in the installer (030-kernel-modules)
  • Installs new files to the ramdisk and sets their permissions automatically based on file type from ramdisk-patch (020-patch-ramdisk)
  • Includes an optional bbe tool for applying binary patches
  • Unnecessary architectures and tools can be removed to save space
  • Many useful functions and variables included in the patch.d environment to simplify modification/patching scripts (patch.d-env)
  • Simple "make" build system

SETTING UP LAZYFLASHER

LazyFlasher is only designed for building on Unix based systems such as Linux, Mac OS X, and FreeBSD.

To download it (feel free to fork it so you can have a copy on your GitHub to modify instead!):
Code:
cd ~/build
git clone -b kernel-flasher https://github.com/jcadduono/lazyflasher.git
cd lazyflasher

To use LazyFlasher, you'll probably want to take a look at the Makefile, config.sh, and META-INF/com/google/android/update-binary (a shell script).
There's a few things you can change there to personalize it to your needs.
(make another git commit to save your setup!)

You should also check out the README! There is a lot of useful information there.

Once the installer is set up to your liking, all you have to do to build it is copy the resulting kernel binary from your kernel build output into the lazyflasher folder.
If you have built with kernel modules (make modules_install), copy build/lib/modules -> lazyflasher/modules.
Now simply run:
Code:
make

A TWRP flashable zip and sha1sum is created!
You should consider signing the zip with AOSP test-keys so that users can verify its integrity before flashing it.

LOOKING TO TRIM DOWN THE INSTALLER?

I have forked the kernel-flasher branch to a branch called kernel-flasher-arm64-minimal. This provides all the features of kernel-flasher except sepolicy injection and bbe, and only supports arm64 devices. It reduces the minimum zip size from 1860 KB to 200 KB.
You can use this branch instead if you like. If you're using another architecture, just look at the trimming commit as an example and apply it for your arch.

BUT I AM ON LE WINDOWS!

How did you build your kernel binary?!

Anyways, there is an alternative for building it on Windows.
You can download the LazyFlasher kernel-flasher branch as a zip file from GitHub and extract it somewhere on your PC.
Make your modifications using Notepad++.
You can then use a tool such as 7-zip to create a zip file by selecting everything in the folder, right clicking, and going to 7-Zip -> Add to "lazyflasher.zip".

LIMITATIONS AND KNOWN ISSUES

  • It will not run on TWRP built in Android 4.3 or earlier (usually builds older than 2.8.0.0)
  • Requires Busybox to exist in the TWRP build. All official builds should have this.

There may occasionally be some devices that are unsupported due to extreme modifications made to the boot image format by the manufacturer. If you have one of these devices, feel free to contact me and I will try to add support for it if it is worth the effort.

If you have an issue, please gather a recovery.log from TWRP after flashing and I will try to look into it. I can't do anything to diagnose your problem without a recovery log.
Code:
adb pull /tmp/recovery.log

JUST WANT TO DISABLE VERITY/ENCRYPTION?

You can build lazyflasher by itself, empty, without a kernel image or modules and flash it!
It's already set up to automatically disable verity and make encryption optional.
Alternatively, there's a branch already set up called no-verity-opt-encrypt. You can find prebuilt official zips at: https://build.nethunter.com/android-tools/no-verity-opt-encrypt/

WHO ELSE IS USING LAZYFLASHER?

I'll keep a list here of cool projects that are using it. Feel free to ask for yours to be added. :)

WHAT IS LAZYFLASHER USING?

LazyFlasher makes use of a few open-source projects. You can find their source code here:

XDA:DevDB Information
LazyFlasher, Tool/Utility for the Android General

Contributors
jcadduono
Source Code: https://github.com/jcadduono/lazyflasher


Version Information
Status: Stable
Current Stable Version: 5.1
Stable Release Date: 2017-02-01

Created 2017-02-02
Last Updated 2017-02-07
 

jcadduono

Recognized Developer
Jan 17, 2014
1,489
6,226
32
Thunder Bay
adduono.com
Is it possible to have this on i9100 ? AnyKernel2 doesn't work with i9100

nope, no plans to support that device, surprised they are still out there, i would expect most to be dead emmc by now. :|

you can probably modify boot-patcher.sh to copy partitions to split-img folder then flash them back instead of using bootimg

i don't even know if lazyflasher's binaries will run on any of the i9100 twrp builds. might be too old.

if i can get an example layout of i9100's partitions i can fork it to a new branch, called kernel-flasher-sgs2 and make it compatible for you guys.
 
Last edited:
  • Like
Reactions: Skyline

Skyline

Senior Member
Mar 31, 2014
510
381
Mumbai
OnePlus 5T
OnePlus 7 Pro
nope, no plans to support that device, surprised they are still out there, i would expect most to be dead emmc by now. :|

you can probably modify boot-patcher.sh to copy partitions to split-img folder then flash them back instead of using bootimg

i don't even know if lazyflasher's binaries will run on any of the i9100 twrp builds. might be too old.

if i can get an example layout of i9100's partitions i can fork it to a new branch, called kernel-flasher-sgs2 and make it compatible for you guys.

They are too old but still supported by lineage 14.1 and official twrp 3.0.2-1 without any problems
osmOsis dev of anykernel2 said that i9100 and older devices are having different boot img header format when i tried to run anykernel2 script it says Android magic is not found something like that
 
Last edited:

Miustone

Senior Member
Jul 23, 2012
3,355
6,184
30
Google Pixel 7 Pro
Wow...

I'm just recognizing now, how powerful lazyflasher is ...
Setting default.prop values and settings. Disable Encryptions and so on. Wish I could contribute something but I'm still learning how it works. For now I've just included lazyflasher into my PATCH to disable DM Verity and forced Encryption and to make some edits on the default.prop. That's really useful since the build.prop doesn't allows such deep changes.
@jcadduono what would be in the Theory possible with the Lazyflasher? Could we add things like Gouverneurs or default Kernel Clockings? Init.d Support? Sorry if I sound noobish :angel:
 
  • Like
Reactions: MSF Jarvis

hanurak

Member
Feb 20, 2017
22
4
can you please make a tutorial vedio of it because i don't get it and i'm sorry for my stupidity
 

Professor Woland

Senior Member
Mar 10, 2016
353
55
Redmi Note 9 Pro
Did anyone succeeded in removing dm-verity? I got this error
 

Attachments

  • IMG_20171021_011626.jpg
    IMG_20171021_011626.jpg
    260 KB · Views: 737

Top Liked Posts

  • There are no posts matching your filters.
  • 116
    LazyFlasher & no-verity-opt-encrypt


    INTRODUCTION

    Hello Users and Developers of XDA!

    LazyFlasher is a custom kernel flashing tool designed to make it easy to dynamically modify ramdisks and inject kernel binaries into the current boot image.
    It's the swiss army knife of kernel flashing for use in Team Win Recovery Project.

    The intent behind it was to allow a 1 custom kernel fits all approach, where your users can flash single zip on any ROM for a particular device,
    allowing your kernel to be compatible with the vast majority of custom ROMs already out there. It takes away the pain of building custom boot.img
    for each and every variant a user requests and puts it into 1 low maintenance intelligent universal flashable zip.

    You might already know of @osm0sis's AnyKernel2 project. This approach is similar to that. Back in late 2015 I decided to design a more compatible, more friendly, and more feature filled version. Since then, AnyKernel2 has apparently improved a lot so if LazyFlasher doesn't accomplish what you need, AnyKernel2 probably will.
    LazyFlasher does not currently support ELF boot images.

    For users of no-verity-opt-encrypt: This thread can also be used to discuss the no-verity-opt-encrypt project which is just a minimal version of the LazyFlasher framework.

    Disqus thread: https://www.xda-developers.com/xda-...-is-an-alternative-to-the-anykernel2-project/

    THE GITHUB REPOSITORY

    You can find LazyFlasher's development and download it here: https://github.com/jcadduono/lazyflasher

    LazyFlasher source code is distributed under the BSD 2-clause license. You can do anything you want with it, however, some of the binaries used by it are under GPLv2 or GPLv3 licenses.

    FEATURES

    • ChromeOS support (ChromeOS test-key signing and recognition)
    • MediaTek device support (MTK headers)
    • SELinux policy injection support via sepolicy-inject
    • Example scripts to disable dm-verity or forced encryption during the install process (010-no-force-encrypt, 015-no-dm-verity)
    • A process that executes a sorted list of scripts for making the desired modifications (separate from the framework)
    • Handily unpacks, decompresses, applies changes, compresses, and repacks boot images quickly and safely
    • Supports Gzip, LZ4, Bzip2, and LZO ramdisks. Support for LZMA and XZ is a work in progress
    • Supports arm (armv7), arm64 (aarch64), x86 (i386), x86_64 (amd64), mips, and mips64 architectures
    • Supports dtb.img replacement (place it in the root folder named "dtb.img")
    • Scans fstab and partition locations for the boot partition, optionally allows a preset location
    • Intelligently installs kernel modules by copying the previous layout of /system/lib/modules and creating symlinks
    • Creates modprobe supported /lib/modules aliases if kernel modules are included in the installer (030-kernel-modules)
    • Installs new files to the ramdisk and sets their permissions automatically based on file type from ramdisk-patch (020-patch-ramdisk)
    • Includes an optional bbe tool for applying binary patches
    • Unnecessary architectures and tools can be removed to save space
    • Many useful functions and variables included in the patch.d environment to simplify modification/patching scripts (patch.d-env)
    • Simple "make" build system

    SETTING UP LAZYFLASHER

    LazyFlasher is only designed for building on Unix based systems such as Linux, Mac OS X, and FreeBSD.

    To download it (feel free to fork it so you can have a copy on your GitHub to modify instead!):
    Code:
    cd ~/build
    git clone -b kernel-flasher https://github.com/jcadduono/lazyflasher.git
    cd lazyflasher

    To use LazyFlasher, you'll probably want to take a look at the Makefile, config.sh, and META-INF/com/google/android/update-binary (a shell script).
    There's a few things you can change there to personalize it to your needs.
    (make another git commit to save your setup!)

    You should also check out the README! There is a lot of useful information there.

    Once the installer is set up to your liking, all you have to do to build it is copy the resulting kernel binary from your kernel build output into the lazyflasher folder.
    If you have built with kernel modules (make modules_install), copy build/lib/modules -> lazyflasher/modules.
    Now simply run:
    Code:
    make

    A TWRP flashable zip and sha1sum is created!
    You should consider signing the zip with AOSP test-keys so that users can verify its integrity before flashing it.

    LOOKING TO TRIM DOWN THE INSTALLER?

    I have forked the kernel-flasher branch to a branch called kernel-flasher-arm64-minimal. This provides all the features of kernel-flasher except sepolicy injection and bbe, and only supports arm64 devices. It reduces the minimum zip size from 1860 KB to 200 KB.
    You can use this branch instead if you like. If you're using another architecture, just look at the trimming commit as an example and apply it for your arch.

    BUT I AM ON LE WINDOWS!

    How did you build your kernel binary?!

    Anyways, there is an alternative for building it on Windows.
    You can download the LazyFlasher kernel-flasher branch as a zip file from GitHub and extract it somewhere on your PC.
    Make your modifications using Notepad++.
    You can then use a tool such as 7-zip to create a zip file by selecting everything in the folder, right clicking, and going to 7-Zip -> Add to "lazyflasher.zip".

    LIMITATIONS AND KNOWN ISSUES

    • It will not run on TWRP built in Android 4.3 or earlier (usually builds older than 2.8.0.0)
    • Requires Busybox to exist in the TWRP build. All official builds should have this.

    There may occasionally be some devices that are unsupported due to extreme modifications made to the boot image format by the manufacturer. If you have one of these devices, feel free to contact me and I will try to add support for it if it is worth the effort.

    If you have an issue, please gather a recovery.log from TWRP after flashing and I will try to look into it. I can't do anything to diagnose your problem without a recovery log.
    Code:
    adb pull /tmp/recovery.log

    JUST WANT TO DISABLE VERITY/ENCRYPTION?

    You can build lazyflasher by itself, empty, without a kernel image or modules and flash it!
    It's already set up to automatically disable verity and make encryption optional.
    Alternatively, there's a branch already set up called no-verity-opt-encrypt. You can find prebuilt official zips at: https://build.nethunter.com/android-tools/no-verity-opt-encrypt/

    WHO ELSE IS USING LAZYFLASHER?

    I'll keep a list here of cool projects that are using it. Feel free to ask for yours to be added. :)

    WHAT IS LAZYFLASHER USING?

    LazyFlasher makes use of a few open-source projects. You can find their source code here:

    XDA:DevDB Information
    LazyFlasher, Tool/Utility for the Android General

    Contributors
    jcadduono
    Source Code: https://github.com/jcadduono/lazyflasher


    Version Information
    Status: Stable
    Current Stable Version: 5.1
    Stable Release Date: 2017-02-01

    Created 2017-02-02
    Last Updated 2017-02-07
    10
    You are a goddamn god.

    thx dude, usually that phrase is reserved for Chainfire accomplishments
    7
    We should give this man award.
    The Job that he has done with this and Nethunter is just amazing.

    Thank you and keep up the good work
    2
    Good one , this man develops for the developers !
    1
    You are a goddamn god.