FORUMS
Remove All Ads from XDA

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

1,443 posts
Thanks Meter: 5,795
 
Post Reply Email Thread
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-e...rnel2-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-...y-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
The Following 75 Users Say Thank You to jcadduono For This Useful Post: [ View ]
 
 
2nd February 2017, 04:10 PM |#2  
Senior Member
Flag Helsinki
Thanks Meter: 71
 
More
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
The Following 4 Users Say Thank You to pahapoika91 For This Useful Post: [ View ] Gift pahapoika91 Ad-Free
2nd February 2017, 04:38 PM |#3  
core7x's Avatar
Senior Member
Flag Kuala Lumpur
Thanks Meter: 51
 
More
Nice tool. Keep up a good work
3rd February 2017, 03:50 PM |#4  
Miustone's Avatar
Senior Member
Flag Bad Oeynhausen
Thanks Meter: 3,991
 
Donate to Me
More
Great Work! Hope i can include it into my Projects in the Future...
Thanks a lot for that!
3rd February 2017, 11:28 PM |#6  
jcadduono's Avatar
OP Recognized Developer
Flag Thunder Bay
Thanks Meter: 5,795
 
Donate to Me
More
Quote:
Originally Posted by Honestly Annoying

You are a goddamn god.

thx dude, usually that phrase is reserved for Chainfire accomplishments
The Following 10 Users Say Thank You to jcadduono For This Useful Post: [ View ]
4th February 2017, 05:45 AM |#7  
MSF Jarvis's Avatar
Recognized Contributor
Flag Ghaziabad
Thanks Meter: 3,221
 
Donate to Me
More
y u nu support mah Indian AF MTK fone @jcadduono :P

Kidding, awesome work on this though!
The Following User Says Thank You to MSF Jarvis For This Useful Post: [ View ] Gift MSF Jarvis Ad-Free
4th February 2017, 11:54 AM |#8  
Senior Member
Thanks Meter: 354
 
More
Good one , this man develops for the developers !
The Following User Says Thank You to DevUt For This Useful Post: [ View ] Gift DevUt Ad-Free
4th February 2017, 05:00 PM |#9  
Senior Member
Flag Mumbai
Thanks Meter: 370
 
More
Is it possible to have this on i9100 ? AnyKernel2 doesn't work with i9100
4th February 2017, 05:29 PM |#10  
jcadduono's Avatar
OP Recognized Developer
Flag Thunder Bay
Thanks Meter: 5,795
 
Donate to Me
More
Quote:
Originally Posted by Skyline

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.
The Following User Says Thank You to jcadduono For This Useful Post: [ View ]
5th February 2017, 09:19 AM |#11  
Senior Member
Flag Mumbai
Thanks Meter: 370
 
More
Quote:
Originally Posted by jcadduono

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
Post Reply Subscribe to Thread
Previous Thread Next Thread
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes