Google Glass Experimental Kernel Builds
I don't have the google glass, but making a kernel is possible for all devices so why not. I have made some experimental builds using the official google kernel source and using the regular arm-eabi-4.4.3 toolchain because other toolchains gave errors while compiling.
I didn't test these kernels but they should work fine as they are built from official sources with the right defconfig, anyways, you're fully responsible for any damage caused to your expensive sunglasses :silly:
Initial Source: https://android.googlesource.com/kernel/omap/+log/glass-omap-xrr02/
Defconfig: notle_defconfig
Toolchain: arm-eabi-4.4.3
My source:
https://github.com/broodplank/glass-omap-xrr02
Installation guide:
Download the kernel you want, place it in a directory that contains fastboot and adb and rename it to boot.img
Then enter (if unlocked):
Code:
adb reboot bootloader
fastboot flash boot boot.img
fastboot reboot
Or when locked:
Code:
adb reboot bootloader
fastboot oem unlock
fastboot flash boot boot.img
fastboot reboot
Build #1 (stock boot.img with ro.secure 0 and modified adbd binary)
Based on stock boot.img from google
Info:
- Stock kernel
- ro.secure=0
- Modified adbd binary
Build param
unknown, probably -o2 since defconfig has -o2 default.
Download:
http://forum.xda-developers.com/attachment.php?attachmentid=2005346&stc=1&d=1369959602
Build #2 (Custom kernel built on -O3 param)
Ramdisk Based on build 1's ramdisk
Info:
- Fully optimized
- Compiled from source
- Added governor: smartassV2 (set as default)
- ro.secure=0
- Modified adbd binary
Build param
-O3 -fmodulo-sched -fmodulo-sched-allow-regmoves -fno-tree-vectorize
Warning: I don't know what the partition size is of the boot partition, if its under 5mb do not use this one (check cat /proc/partitions)
Download:
http://forum.xda-developers.com/attachment.php?attachmentid=2005351&stc=1&d=1369960135
Build #3 (Custom kernel built on -O2 param)
Ramdisk Based on build 1's ramdisk
Info:
- Optimized a bit
- Compiled from source
- Added governor: smartassV2 (set as default)
- ro.secure=0
- Modified adbd binary
Build param
-O2
Download:
http://forum.xda-developers.com/attachment.php?attachmentid=2005352&stc=1&d=1369960222
Build #4 (Custom kernel built on -OS param)
Ramdisk Based on build 1's ramdisk
Info:
- Optimized for size
- Compiled from source
- Added governor: smartassV2 (set as default)
- ro.secure=0
- Modified adbd binary
Build param
-Os
Download:
http://forum.xda-developers.com/attachment.php?attachmentid=2005361&stc=1&d=1369960340
First !!. Wonderful work brood !:good:
UpGado said:
First !!. Wonderful work brood !:good:
Click to expand...
Click to collapse
Thank you , do you own the glasses btw?
broodplank1337 said:
Thank you , do you own the glasses btw?
Click to expand...
Click to collapse
No , But I liked the idea of custom kernel for glasses
Note:
Kernel Developers: I would like to ask you to merge this patch to your kernels, because it is essential part of MultiROM (MR) - it allows MR to boot any kernel without changing the boot partition. I realize that it is no small request, but the patch is not big, touches relatively stable parts of kernel and should not cause any problems outside its intended function.
The Patch:
You'll need to cherry pick a total of 5 commits (if anyone feels like squashing them to help me out, feel free to link me to it).
Cherry-pick against: http://github.com/multirom-nexus6p/android_kernel_huawei_angler.git on the branch 'mm2'.
Commit hashes in order:
2641ac7979c0b4ef7d8c33bae57404fea89ca0de
ff67f9fae243fea2b513b1721c8cff4584f229ba
58154995579253a2ee864b839aa4a9271afdb1c5
fb7e7c6212f59fce48f83235a99c244e2432b1f3
1fb02d265b4170e193018d513de11f9a47e5e775
Related defconfig options, and their explanations:
Code:
CONFIG_KEXEC=y # Enables the Kexec SysCall to allow loading the new 'secondary' kernel into memory
CONFIG_KEXEC_HARDBOOT=y # Enables the HardBoot flag, which allows 'cold-booting' a new kernel
# CONFIG_ATAGS_PROC is not set # Prevents potential atags related discrepancies, this must be either removed or commented out
CONFIG_PROC_DEVICETREE=y # Allows us to read out the kernel config, and tell that the kernel has all the necessary configs enabled (read out from /proc/config.gz)
User-space Kexec binary: here (you'll need to extract the zip, and it will be in 'multirom/kexec')
A quick guide to use Kexec: here
Authors:
- This patch was made by Mike Kasick for Samsung Epic 4G.
- Tassadar built on this patch, and partially rewrote it to support the Nexus 4, 5, and 6.
- Zhuowei Zhang rewrote the patch from scratch for arm64.
- Myself for maintaining MultiROM for the 6P, and managing the patch.
XDA:DevDB Information
[KEXEC] [ARM64] Kexec-Hardboot Patch, Kernel for the Huawei Nexus 6P
Contributors
npjohnson, 500 Internal Server Error
Kernel Special Features:
Version Information
Status: Stable
Current Stable Version: Version 1
Stable Release Date: 2016-06-11
Created 2016-06-12
Last Updated 2016-06-12
None of the above links working
The links of commits you have mentioned are not working.
shenoy13 said:
The links of commits you have mentioned are not working.
Click to expand...
Click to collapse
Been a long while, because the related MultiROM project is no longer maintained, but the links now work
Introduction
Based on samsung sources and android common tree. Supported devices: G970F/N, G973F/N, G975F/N G977B/N, N970F, N975F, N971N, N976B/N. All sources are open on GitHub.
Continuous integration with GitHub Actions set up. This means you can customize the kernel from browser and build the version suitable for you without leaving the browser (see сustomization section).
Features
Customizable build with config presets
Only part of samsung security features disabled (DEFEX, Process Authentification, root restrictions)
Switchable SELinux (by default it's locked in "always enforcing" mode in samsung sources)
Built-in in Magisk v21.1
Various toolchains (cruel,arm,samsung,proton,arter97...) supported
Wireguard for VPN
CIFS for SMB
Iptables TTL and HL editing modules for bypassing tethering restrictions
NTFS module for OTG usb drives
Moro sound module
Boeffla WakeLock Blocker
sdfat driver for vfat and exfat filesystems
reiser4 filesystem added. reiser4progs (https://github.com/CruelKernel/reiser4progs/releases)
DEX cable vendor lock for WQHD resolution removed
ZIP installer with XZ compression
ZIP installer with automatic os_patch_level patching
Build commands (configuration presets) used for V3.9 kernel:
Code:
$ ./cruelbuild pack model=<MODEL> name=CRUEL-V3.9 +magisk +nohardening +force_dex_wqhd +ttl +cifs +ntfs +sdfat +nodebug +noaudit +noksm +nomodules +wireguard +usb_serial +sched_powersave +sched_performance +morosound +boeffla_wl_blocker +fake_config +dtb
Where model can be one of G970F/N, G973F/N, G975F/N G977B/N, N970F, N975F, N971N, N976B/N.
Installation Instructions
First of all, TWRP Recovery + multidisabler should be installed in all cases. This is a preliminary step. Backup your existing kernel. You will be able to restore it in TWRP Recovery in case of any problems. Download an *.zip file. Reboot to TWRP. Install > Install ZIP > Flash CruelKernel.zip. Reboot to system.
ChangeLog
V3 - Support for G970F, G975F, G977B, N970F, N975F, N976B models.
V3.1 - Boeffla wl blocker, BTB5 sources for N10 models.
V3.2 - Magisk update v20.4, wireguard update, sdfat for VFAT, exFAT, ntfs module.
V3.3 - CTC9 sources. The camera will work only on CTC9 based firmwares.
V3.4 - CTE9/CTF1 sources. Small fixes, overall improvements, more customization configs for building on github.
V3.7 - Various toolchains added (arm, arter97, samsung, proton, system, default)
V3.8 - DTI1 sources added for N971N, N976N.
DTH7 sources added for G977N model.
Some debugging flags disabled. performance config fixed (-O3).
Cruel toolchain added (gcc 10.2 with PGO/LTO and inlining params from gcc 9 branch)
simple_lmk added (github.com/kerneltoast/simple_lmk)
V3.9 - G977N, G973N models added.
G970F/N, G975F/N, G973F/N updated to DTJA.
N976B, N970F, N975F updated to DTJ4.
Magisk updated to v21.1 version.
Vendor lock for dp cable for DEX removed (thanks, fart1-git).
Zip installer implemented.
Automted os_patch_level level patching in installer (https://github.com/CruelKernel/clone_header).
Downloads
OS Patch Level: 2020-11
V3.9 Download folder
Sources
If you like the work and want to help me with hosting: https://www.paypal.me/evdenis Hitting star button on GitHub and thanks button on XDA really helps to stay motivated.
Instructions here could be outdated a bit, one can find the latest version in project's readme at github.
How to customize the kernel build
It's possible to customize the kernel and build it from the browser. First of all, create and account on GitHub. Next, fork this repository. Switch to the "Actions" tab and activate GitHub Actions. At this step you've got your own copy of the sources and you can build it with GitHub Actions. You need to open github actions configuration file (.github/workflows/main.yml) and edit it from the browser. For example, to alter the kernel configuration you need to edit lines:
Code:
- name: Kernel Configure
run: |
./build config
model=G973F
name="CRUEL-V3.3"
+magisk
+nohardening
+ttl
+wireguard
+cifs
+sdfat
+ntfs
+tcp_cibuc
+morosound
+boeffla_wl_blocker
First of all, you need to change G973F model to the model of your phone. Supported models: G970F/N, G973F/N, G975F/N G977B/N, N970F, N975F, N971N, N976B/N.
You can change the name of the kernel by replacing name="CRUEL-V3" with, for example, name="my_own_kernel". You can remove wireguard from the kernel if you don't need it by changing "+" to "-" or by removing the "+wireguard" line and "" on the previous line. OS patch date can be changed with os_patch_level=2020-02 argument, the default current date is in build.mkbootimg.G973F file.
Available configuration presets can be found at kernel/configs folder. Only the *.conf files prefixed with "cruel" are meaningful. For example:
+magisk - integrates magisk into the kernel. This allows to have root without booting from recovery. Enabled by default.
magisk+canary - integrates canary magisk into the kernel.
bfq - enable bfq I/O scheduler in the kernel.
sched_... - enable various (conservative, ondemand, powersave, userspace, performance) CPU schedulers in the kernel.
ttl - adds iptables filters for altering ttl values of network packets. This helps to bypass tethering blocking in mobile networks.
wireguard - adds wireguard VPN module to the kernel.
cifs - adds CIFS (SMB) support.
tcp_cubic - use CUBIC as default TCP congestion control.
tcp_westwood - use WestWood as default TCP congestion control.
sdfat - use sdfat for exFAT and VFAT filesystems.
ntfs - enable ntfs filesystem support (read only).
boeffla_wl_blocker - enable boeffla wakelock blocker module.
morosound - enable moro sound control module.
+nohardening - removes Samsung kernel self-protection mechanisms. Potentially can increase the kernel performance. Enabled by default. Disable this if you want to make your system more secure.
nohardening2 - removes Android kernel self-protection mechanisms. Potentially can increase the kernel performance. Don't use it if you don't know what you are doing. Almost completely disables kernel self-protection. Very insecure.
nodebug - remove debugging information from the kernel.
noksm - disable Kernel Samepage Merging (KSM).
nomodules - disable loadable modules support.
noaudit - disable kernel auditing subsystem.
300hz - increases kernel clock rate from 250hz to 300hz. Potentially can improve ui responsiveness.
1000hz - increases kernel clock rate from 250hz to 1000hz. Potentially can improve ui responsiveness.
For example, you can alter default configuration to something like:
Code:
- name: Kernel Configure
run: |
./build config
os_patch_level=2020-12
model=G975F
name="OwnKernel"
+magisk+canary
+wireguard
+nohardening
+1000hz
After editing the configuration in the browser, save it and commit. Next, you need to switch to the "Actions" tab. At this step you will find that GitHub starts to build the kernel. You need to wait about 25-30 mins while github builds the kernel. If the build is successfully finished, you will find your boot.img in the Artifacts section. Download it, unzip and flash.
To keep your version of the sources in sync with main tree, please look at one of these tutorials:
How can I keep my fork in sync without adding a separate remote?
How do I update a GitHub forked repository?
Support
This thread. Feature requests accepted.
Telegram (testing and intermediate releases).
GitHub Pull Requests if you want to contribute.
Credits
Samsung for kernel sources
fart1-git for disabling DEX cable vendor lock
corsicanu for default blocklist of wakelocks for boeffla_wl_blocker driver
Nico (@NicoMax2012) for porting moro sound module
bamsbamx for porting boeffla_wakelock_blocker
thehacker911 for general improvements and advices
ExtremeGrief for overall improvements, porting maple scheduler
geiti94 for his advices
topjohnwu for Magisk
franciscofranco for FK Kernel Manager
and testers.
I'm sorry if I missed someone, just write me and I will update the list.
XDA:DevDB Information
[KERNEL] CRUEL KERNEL S10/Note10, Kernel for the Samsung Galaxy S10
Contributors
evdenis, evdenis
Source Code: https://github.com/CruelKernel/samsung-exynos9820
Kernel Special Features:
Version Information
Status: Testing
Current Stable Version: v3.9
Stable Release Date: 2020-12-01
Created 2020-03-08
Last Updated 2020-12-01
How to build the kernel locally on your PC
This instructions assumes you are using Linux. Install mkbootimg (AIK tool) from osm0sis, heimdall (if you want to flash the kernel automatically).
Next:
Code:
# Install prerequisites
# If you use ubuntu or ubuntu based distro then you need to install these tools:
$ sudo apt-get install build-essential libncurses-dev libtinfo5 bc bison flex libssl-dev libelf-dev
# If you use Fedora:
$ sudo dnf group install "Development Tools"
$ sudo dnf install ncurses-devel ncurses-compat-libs bc bison flex elfutils-libelf-devel openssl-devel
# Install mkbootimg
$ wget https://github.com/osm0sis/mkbootimg/archive/master.zip
$ unzip master.zip
$ cd mkbootimg-master
$ sed -i -e 's/-Werror//g' Makefile
$ make
$ sudo mv mkbootimg /usr/local/bin/mkbootimg
# Get the sources
$ git clone https://github.com/CruelKernel/samsung-exynos9820
$ cd samsung-exynos9820
# List available branches
$ git branch -a | grep remotes | grep cruel | cut -d '/' -f 3
# Switch to the branch you need
$ git checkout cruel-v3
# Install compilers
$ git submodule update --init --recursive
# Compile
$ ./build mkimg name=CustomCruel model=G973F +magisk+canary +wireguard +ttl +cifs +nohardening
# You will find your kernel in boot.img file after compilation.
$ ls -lah ./boot.img
# You can automatically flash the kernel with heimdall
# if you connect your phone to the PC and execute:
$ ./build :flash
# Or in a single command (compilation with flashing)
# ./build flash name=CustomCruel model=G973F +magisk+canary +wireguard +ttl +cifs +nohardening
Pin problem
The problem is not in sources. It's due to os_patch_level mismatch with you current kernel (and/or twrp). CruelKernel uses common security patch date to be in sync with the official twrp and samsung firmwares. You can check the default os_patch_level in build.mkbootimg.* files. However, this date can be lower than other kernels use. When you flash a kernel with an earlier patch date on top of the previous one with a higher date, android activates rollback protection mechanism and you face the pin problem. It's impossible to use a "universal" os_patch_level because different users use different custom kernels and different firmwares. CruelKernel uses the common date by default in order to suite most of users.
How can you solve the problem? 5 ways:
You can restore your previous kernel and the pin problem will gone
You can check the os_patch_level date of your previous kernel here https://cruelkernel.org/tools/bootimg/ and patch cruel kernel image to the same date. If your previous kernel is nemesis, patch cruel to 2099-12 date.
You can reboot to TWRP, navigate to data/system and delete 3 files those names starts with 'lock'. Reboot. Login, set a new pin. To fix samsung account login, reinstall the app
You can rebuild cruel kernel with os_patch_level that suites you. To do it, you need to add the line os_patch_level="<your date>" to the main.yml cruel configuration. See the next section if you want to rebuild the kernel.
You can do the full wipe during cruel kernel flashing
Good job!
Thanks Dev! Does this kernel work also with LineageOS and AOSP roms?
evdenis said:
...
After that you need to add the line os_patch_level="<your date>" to the main.yml cruel configuration and rebuild it. See the customization section if you want to rebuild the kernel.
Click to expand...
Click to collapse
Did you checked it if it works for you? For me the oneliner didnt work in main.yml. I must edit the build.mkbootimg.G975F file and rebuild. Then i got no pin problems cause the OPL was now changed.
hanspampel said:
Did you checked it if it works for you? For me the oneliner didnt work in main.yml. I must edit the build.mkbootimg.G975F file and rebuild. Then i got no pin problems cause the OPL was now changed.
Click to expand...
Click to collapse
Yes, I checked that it works. Here you did't use os_patch_level setting and the date is 2020-02. Next, you updated os_patch_level and you can see the date changed if you unfold "Show information about build" section in build log. In the third commit you removed the os_patch_level and cancelled the build, so the date reverted to default one 2020-02. And in finial commit the date was changed in build.mkbootimg.G975F file. If you doubt the date changed, you can check the build settings either in "Show information about build" section in build log or in "Kernel Configuration Info" file next to the kernel image in "Artifacts". Thanks!
Valentino911 said:
Thanks Dev! Does this kernel work also with LineageOS and AOSP roms?
Click to expand...
Click to collapse
As for now, it compatible only with Samsung based firmwares. Works on native samsung firmwares, BeyondROM, on Ambasadii it's better to use Nemesis kernel (you will face pin problem if you try to install cruel). The kernel doesn't work on LOS.
Anybody want gcam for exynos.. u can see tgis video it for android Q one ui 2.0 for s10plus exynos
I have a question . The hadest rum was established, respectively the hadest kernel. I install the cruel kernel, but after the reboot the kernel of the hadest returns. Why? The first time I encounter this phenomenon, How to solve the problem?
Before rebooting the cruel core, the necessary functions work. After a reboot, the hades kernel returns.
@evdenis
I got problems with your latest sources (3.0 and 3.1). It doesnt boot to recovery with an app. This works for a few commits earlier(last week or so). Now its not working. And the OSPL in main.yml doesnt work for me too. Doesnt pass the restart pin. But thats not a problem, changed it in the other side.
Cant test your compiled versions, pin problem, i was on nemesis kernel, so i have to compile it myself.
Another problem ive saw, the device doesnt shut down. It only reboots. Compiled with 3.0 and 3.1 sources. With the older source a week ago, it works.
Edit: So tried your released v3.1 and changed the OSPL manually for PIN Fix, seems to work(recovery and shutdown). Maybe something went wrong on my side till compiling. Have no clue atm.
hanspampel said:
Another problem ive saw, the device doesnt shut down. It only reboots. Compiled with 3.0 and 3.1 sources. With the older source a week ago, it works.
Edit: So tried your released v3.1 and changed the OSPL manually for PIN Fix, seems to work(recovery and shutdown). Maybe something went wrong on my side till compiling. Have no clue atm.
Click to expand...
Click to collapse
This could be due to enabling non-default configuration presets, like +nodebug or +nohardening2.
elchinemil said:
I have a question . The hadest rum was established, respectively the hadest kernel. I install the cruel kernel, but after the reboot the kernel of the hadest returns. Why? The first time I encounter this phenomenon, How to solve the problem?
Before rebooting the cruel core, the necessary functions work. After a reboot, the hades kernel returns.
Click to expand...
Click to collapse
Hades rom uses very good kernel. Technically, I don't see any reason to change it on hades rom, unless you really want to experiment with, for example, +1000hz or +bfq scheduler.
The reason the previous kernel restores back could be again due to patch level mismatch.
I will update installation method in the next version to dynamically repack kernel during installation procedure. Hope, this will solve os_patch_level problem (pin issue) once and for all.
nice kernel
Thanks for this wonderful kernel! It is an honour for me to be able to participate in this!
G975N
Working in 975N or not
hamidru said:
Working in 975N or not
Click to expand...
Click to collapse
If it works om F/FD devices. It will work on N devices
hamidru said:
Working in 975N or not
Click to expand...
Click to collapse
If it's an exynos device ... no reason to this
This is a patched stock kernel and Magisk module to enable Wireguard's "kernel module backend" feature on stock or GSI firmwares. The patched kernel is required for unofficial modules to be loadable and is an offical kernel with binary patches applied.
The boot image is not already prepatched with Magisk as some users may not want to use it. You can always extract the kernel module from the magisk module zip and insmod it by any means you like.
Kernel Patches:
module_sig_check - always pass - bypass CONFIG_MODULE_SIG and CONFIG_MODULE_SIG_FORCE
check_version - always return true - similar to CONFIG_MODULE_FORCE_LOAD
Spoiler: Resources Used
Build instructions
readme/MMI-QPG30.82-95.txt at master · MotorolaMobilityLLC/readme
Readme's for motorola builds. Contribute to MotorolaMobilityLLC/readme development by creating an account on GitHub.
github.com
Kernel Sources
Release MMI-QPG30.82-135 · MotorolaMobilityLLC/kernel-msm
ginna push for android 10
github.com
AOSP dtc
refs/heads/android10-release - platform/external/dtc - Git at Google
magiskboot - Unpacking and repacking boot image
GitHub - topjohnwu/Magisk: The Magic Mask for Android
The Magic Mask for Android. Contribute to topjohnwu/Magisk development by creating an account on GitHub.
github.com
vmlinux-to-elf - Format the kernel for analysis and recover symbols
GitHub - marin-m/vmlinux-to-elf: A tool to recover a fully analyzable .ELF from a raw kernel, through extracting the kernel symbol table (kallsyms)
A tool to recover a fully analyzable .ELF from a raw kernel, through extracting the kernel symbol table (kallsyms) - GitHub - marin-m/vmlinux-to-elf: A tool to recover a fully analyzable .ELF from ...
github.com
Ghidra - Static analysis and patching
Ghidra
Download:
Running a kernel module built for an older kernel like that seems to be the wrong approach. Whenever I build a kernel with the "kernel: module: Hack to force load prebuilt vendor modules" patch and load it with a recent vendor image, I get boot loops, so the kernels are probably too different to safely force load modules.
Everything works fine with a QPG30.82-135 boot and vendor though, and doesn't need the check_version patch.