Related
This guide is an adaptation/update of the following guides:
http://forum.xda-developers.com/sho...mctr=(not provided)&__utmv=-&__utmk=231246620
http://forum.xda-developers.com/nexus-4/general/guide-cm11-how-to-build-cyanogenmod-11-t2515305
Disclaimer
My linux skills are not very good but following a few of guides I could compile a very stable and functional ROM. Everything written here is tested by me several times and works, but I am not responsible for any damage.
Requirements:
Linux - Ubuntu 14.04 - 64bit (AFAIK, a 64 bit host is needed to compile KK)
An SGH-T959 with cm11 compile with this guide or cm-10.1-2014xxxx-NIGHTLY-vibrantmtd already installed - Get the latest nightly here: http://get.cm/?device=vibrantmtd
About 14GB of storage for the repository plus about 15GB for building
1 - Install Ubuntu Packages
Terminal
Code:
sudo apt-get install bison build-essential curl flex \
g++-multilib gcc-multilib git-core gnupg gperf \
lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev \
libesd0-dev libncurses5-dev libsdl1.2-dev \
libwxgtk2.8-dev libxml2 libxml2-utils lzop \
pngcrush schedtool \
squashfs-tools xsltproc zip zlib1g-dev
2 - Install JAVA
2.1 Download Java JDK for Linux 64-bit from: http://ghaffarian.net/downloads/Java/JDK/jdk-6u45-linux-x64.bin
2.2 Move jdk-6u45-linux-x64.bin to your home directory
2.3 Remove any other java packages from system:
Code:
sudo apt-get purge openjdk-\* icedtea-\* icedtea6-\*
2.4 Install Java JDK:
Code:
sudo mkdir -p /opt/java/64/
sudo cp jdk-6u45-linux-x64.bin /opt/java/64
sudo su -
cd /opt/java/64
chmod +x jdk-6u45-linux-x64.bin
./jdk-6u45-linux-x64.bin
exit
2.5 Add JDK PATH to .bashrc:
Code:
gedit ~/.bashrc
Add these lines to .bashrc:
Code:
# Java PATHs
export JAVA_HOME=/opt/java/64/jdk1.6.0_45
export PATH=$PATH:$JAVA_HOME/bin
3 - Install Android SDK
3.1 Setup directories:
Code:
cd ~
mkdir android
cd android
mkdir sdk
3.2 Download Android SDK from http://developer.android.com/sdk/index.html
3.3 Extract SDK contents to ~/android/sdk
3.4 Add Android SDK Path:
Code:
gedit ~/.bashrc
Add these lines to .bashrc:
Code:
#Android PATH
export PATH=$PATH:~/android/sdk
export PATH=$PATH:~/android/sdk/platform-tools
export PATH=$PATH:~/android/sdk/tools
4 - Install Repository
4.1 Download Repo:
Code:
mkdir -p ~/bin
mkdir -p ~/android/system
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
4.2 Add Repo Path:
Code:
gedit ~/.bashrc
Add these lines to .bashrc:
Code:
export PATH=$PATH:~/bin
4.3 Close and open new terminal.
4.4 Initialize Repository:
Code:
cd ~/android/system/
repo init -u git://github.com/CyanogenMod/android.git -b stable/cm-11.0
5 - Download the specific code for Vibrant SGH-T959
Code:
mkdir ~/android/system/.repo/local_manifests && touch ~/android/system/.repo/local_manifests/vibrantmtd.xml && gedit ~/android/system/.repo/local_manifests/vibrantmtd.xml
Copy the following path and save the file:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<project path="device/samsung/vibrantmtd" name="CyanogenMod/android_device_samsung_vibrantmtd" remote="github" revision="cm-10.2" />
<project path="device/samsung/aries-common" name="CyanogenMod/android_device_samsung_aries-common" remote="github" revision="cm-11.0" />
<project path="packages/apps/SamsungServiceMode" name="CyanogenMod/android_packages_apps_SamsungServiceMode" remote="github" revision="cm-11.0" />
<project path="kernel/samsung/aries" name="CyanogenMod/android_kernel_samsung_aries" remote="github" revision="cm-11.0" />
<project path="hardware/samsung" name="CyanogenMod/android_hardware_samsung" remote="github" revision="cm-11.0" />
</manifest>
Note: For specific code for vibrant, aries and samsung does not use the stable branch to have the latest fixes available
6 - Sync. the Repository
Code:
cd ~/android/system/
repo sync
NOTE: When finished, run the repo sync command again to be sure there are no errors.
7 - Edit a one file from vibrant.
When you finished the download the Repository you need edit a vibrant file or it will not compile.
Code:
gedit ~/android/system/device/samsung/vibrantmtd/recovery/recovery_keys.c
Delete all code and replace it and save the file.
Replace with this code:
Code:
#include <linux/input.h>
#include "recovery_ui.h"
#include "common.h"
#include "extendedcommands.h"
int device_handle_key(int key_code, int visible) {
if (visible) {
switch (key_code) {
case KEY_VOLUMEDOWN:
case 217: // SEARCH
return HIGHLIGHT_DOWN;
case KEY_VOLUMEUP:
case 139: // MENU
return HIGHLIGHT_UP;
case KEY_POWER:
case 158: // HOME
return SELECT_ITEM;
case 102: // BACK
return GO_BACK;
default:
return NO_ACTION;
}
}
return NO_ACTION;
}
8 - Extract files from phone:
NOTE: You need to have cm10.1 (or cm11 compile with this guide) installed on the phone and the phone has to be in usb debugging.
Connect phone to pc and in terminal type:
Code:
adb root
cd ~/android/system/device/samsung/vibrantmtd/
./extract-files.sh
9 - Download Extra Files
Code:
~/android/system/vendor/cm/get-prebuilts
10 - Building Android
Code:
cd ~/android/system
. build/envsetup.sh && brunch vibrantmtd
11 - Install on Phone
11.1 Copy your .zip file from ~/android/system/out/target/product/vibrantmtd/cm-11-XXXXXXXXX-UNOFFICIAL-vibrantmtd.zip to the root of the SD card.
11.2 Optional: Download Google Apps for KitKat from http://goo.im/gapps and place it on the root of the SD card.
11.3 Flash both of these .zip files from recovery.
Note: I put this guide in general because I do not have the necessary permission to put in the development area. If any Administrator can put in the dev. area would be helpful.
Huge thanks. This will come in handy. :good:
@stinga11 - One question. I've read compiling with Linaro yields better results for performance. Are there any special steps in order to compile CM for Vibrant with that?
nirogu325 said:
@stinga11 - One question. I've read compiling with Linaro yields better results for performance. Are there any special steps in order to compile CM for Vibrant with that?
Click to expand...
Click to collapse
Yes with Linaro you have a better performance, but I read that is a bit unstable. Honestly, I do not know how to compile this rom with Linaro if you know how to do and want to contribute, I will gladly I edit the main post and add the steps on how to do.
stinga11 said:
Yes with Linaro you have a better performance, but I read that is a bit unstable. Honestly, I do not know how to compile this rom with Linaro if you know how to do and want to contribute, I will gladly I edit the main post and add the steps on how to do.
Click to expand...
Click to collapse
So far I think @sada23 is the only one left in our community with that knowledge. It would help tremendously in case @sada23 wants to lend someone the torch eventually.
I'd like to take on that challenge of compiling CM11 with Linaro. As a matter of fact, I was looking for a way to compile CM for the vibrant so I could test compiling with Linaro 4.9.2 and maybe add some optimizations, so thank you for this!
Does anyone know any downsides to using the cm-10.2 vibrant device branch? And I'd like to get a consensus for this, I already have an S4 ROM based on the CM stable branch, compiled with SaberMod and a couple of cherry-picks to add on to CM11. How many people would want this?
Synergy510 said:
Does anyone know any downsides to using the cm-10.2 vibrant device branch?
Click to expand...
Click to collapse
The official CM11 releases for galaxy s, galaxy s B, and captivate(They share most of the code with the vibrant.) do not have received any changes from 10.2 branch. In other words, for these device also used the 10.2 branch.:angel:
stinga11 said:
The official CM11 releases for galaxy s, galaxy s B, and captivate(They share most of the code with the vibrant.) do not have received any changes from 10.2 branch. In other words, for these device also used the 10.2 branch.:angel:
Click to expand...
Click to collapse
Cool, thanks for the info. I'm downloading the source right now and I'll try to have a build up as soon as I can. It'll be compiled with some combination of Linaro toolchains. Does anyone know if sada's cm11 is built with this guide (just wanna know because I'm too lazy to install cm-10.1)
Synergy510 said:
Cool, thanks for the info. I'm downloading the source right now and I'll try to have a build up as soon as I can. It'll be compiled with some combination of Linaro toolchains. Does anyone know if sada's cm11 is built with this guide (just wanna know because I'm too lazy to install cm-10.1)
Click to expand...
Click to collapse
No, I do not think sada23 has used this guide to create his ROM, since it was created long before I made this guide. If you can compile with Linaro maybe you want to share the guide on how to do/
stinga11 said:
No, I do not think sada23 has used this guide to create his ROM, since it was created long before I made this guide. If you can compile with Linaro maybe you want to share the guide on how to do/
Click to expand...
Click to collapse
I'll see if I can. I know a fairly simple, a little on the hack-ish side, way to declare which toolchain you want to use.
How come the vibrant has to be running cm-10.1? Which part of the build process dictates that we have to do that? Because we are using the 10.2 branch? If nothing has change with the other Galaxy S variants in their device githubs, then I don't think it should matter which CM the vibrant currently runs since there is no dependency on cm10.1 in extract-files.sh
Synergy510 said:
I'll see if I can. I know a fairly simple, a little on the hack-ish side, way to declare which toolchain you want to use.
How come the vibrant has to be running cm-10.1? Which part of the build process dictates that we have to do that? Because we are using the 10.2 branch? If nothing has change with the other Galaxy S variants in their device githubs, then I don't think it should matter which CM the vibrant currently runs since there is no dependency on cm10.1 in extract-files.sh
Click to expand...
Click to collapse
For the vibrant never was released an official CM-10.2. The coder created the branch but any reason never was released. Is necessary that you have installed an official CM for extract the vibrant drivers. I use CM-10.1 because is the last official release for the vibrant.
stinga11 said:
For the vibrant never was released an official CM-10.2. The coder created the branch but any reason never was released. Is necessary that you have installed an official CM for extract the vibrant drivers. I use CM-10.1 because is the last official release for the vibrant.
Click to expand...
Click to collapse
Gotcha, that makes sense. I've downloaded the source and I'll make some changes to certain things. Maybe after I get a build going I'll make another post on how to build with another toolchain
How to use another toolchain
Okay, I'm going to explain how to compile with different toolchains, namely SaberMod or Linaro. This may not be *the exact way*, but this is what works for me
1) First locate the toolchain you want to use and find it's github. Here are two examples:
Linaro provided by JustArchi: https://github.com/archidroid/toolchain
SaberMod provided by kykdev (optimized for arm cortex architecture): https://github.com/kykdev?tab=repositories
Two notes about toolchains:arm-eabi == kernel toolchain
arm-linux-androideabi == ROM toolchain
2) Once you've located it, add it to your roomservice.xml (or in the case of this thread vibrantmtd.xml)
When you add something to your roomservice/vibrant.xml, repo sync will gather these files from github for you and place there where you specify
A generic example of adding the toolchain:
from: https://github.com/SOME_USER/THEIR_REPO
Code:
<project name="SOME_USER/THEIR_REPO" path="prebuilts/gcc/linux-x86/arm/arm-eabi-SOME_SPECIAL_NAME" remote="github" revision= "BRANCH" />
By SOME_SPECIAL_NAME, I mean name it what it is. Linaro-4.9.2 or SaberMod-4.8.4 etc etc
By BRANCH, the user's THEIR_REPO might contain both the arm-eabi and arm-linux-androideabi
Example 1:
Looking at kykdev's github, each repo is it's own toolchain, so there is no BRANCH you have to declare. So do this:
Code:
<project name="kykdev/sabermod-arm-cortex_a15-eabi-4.9" path="prebuilts/gcc/linux-x86/arm/arm-eabi-SM-Combo" remote="github" revision="master" />
<project name="kykdev/sabermod-arm-cortex_a15-linux-androideabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-SM-Combo" remote="github" revision="master" />
Notice how I grab what I needed, see the "project name" and see where they go:
path="prebuilts/gcc/linux-x86/arm/arm-eabi-SM-Combo"
path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-SM-Combo"The underlined part must stay as it is, but the bold part is the SOME_SPECIAL_NAME. This is going to come handy later when you tell the ROM which toolchain to use. This is why I use "4.8" in both the ROM and kernel toolchains although the kernel toolchain is labeled as 4.9. Since there are no branches here, you declare BRANCH as "master" or whatever the default branch name is on the github repo
Example 2:
Lookin at JustArchi's repo, everything is listed under his "Toolchain" repo.
Code:
<project name="ArchiDroid/Toolchain" path="prebuilts/gcc/linux-x86/arm/arm-eabi-Linaro-4.9.2" remote="github" revision="linaro-4.9-arm-eabi" />
<project name="ArchiDroid/Toolchain" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-Linaro-4.9.2" remote="github" revision="linaro-4.9-arm-linux-androideabi" />
Nothing the "project name" is the same, so this means we need to specify a BRANCH to get the proper toolchain
revision="linaro-4.9-arm-eabi"
revision="linaro-4.9-arm-linux-androideabi"
Notice! The "path" stays the same with same SOME_SPECIAL_NAME
path="prebuilts/gcc/linux-x86/arm/arm-eabi-Linaro-4.9.2"
path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-Linaro-4.9.2"
Now when you repo sync, your toolchains will be in your build environment
3) How to tell the build which toolchain to use
Locate the file: ~/android/system/core/combo/TARGET_linux-arm.mk
In this find the line that says:
Code:
TARGET_GCC_VERSION :=
After the " := " You're going to remove what was already there, probably "4.7" and change it to your SOME_SPECIAL_NAME, so:
Code:
TARGET_GCC_VERSION := SOME_SPECIAL_NAME
example:
TARGET_GCC_VERSION := Linaro-4.9.2
4) If you already made a build with the default toolchain
You should not build immediately after following these steps because you have pre-compiled packages in your build directory and you MUST clean it out whenever you switch toolchains so everything is compiled with the same toolchain. So you must use these commands after changing the toolchain and before making the build:
Code:
cd ~/android/system/
rm -rf ~/.ccache
make clean
make clobber
That's it! You can now brunch vibrantmtd and watch it compile!
Notes
You can mix and match toolchains, but your mileage may vary
Not every toolchain is guaranteed to work. You MAY run into some errors
Try to keep your ROM and kernel toolchains to the same type of toolchain (Linaro, SaberMod, Google)
I think I touched on everything I do with this post, if I missed something or if it doesn't work for you, let me know!
Synergy510 said:
Okay, I'm going to explain how to compile with different toolchains, namely SaberMod or Linaro.
Click to expand...
Click to collapse
Amazing man, thanks a lot for this guide when I have time I will try.
nirogu325 said:
@stinga11 - One question. I've read compiling with Linaro yields better results for performance. Are there any special steps in order to compile CM for Vibrant with that?
Click to expand...
Click to collapse
Now finally there is a guide on how to compile with the Linaro toolchain by Synergy510
http://forum.xda-developers.com/showpost.php?p=55416425&postcount=13
Amazing info, thanks!
hey i followed your guide and zip is ready but when i flashed it through cwm i got this error while flashing
Code:
set_metadata_recursive
here is my device tree https://github.com/Grace5921/device_samsung_kyleve
EDIT:I've haven't had the need to setup a recovery build environment in sometime now, as such, I'd no longer maintaining this, beginners and novice users are recommended to follow standard setup, while advanced users can probably adopt this to work for them.
So lately I broke my CM11 base which i use for kernel/recovery compiling,
trying nearly everything to fix it failed, So i took the lazy route, deleted it and started a new base,
So for the moment, I left it sync'ing and went to watch the TV, knowing it takes around 3 hours for a full sync,
came back few hours later and sync was complete and before anything I scrolled he terminal backup and realised there is alot of 'junk' that is of no use to kernel/recovery compiling, so I asked around and i was told Helicopter88 had a minimal setup just for that, but it's out of date,
and from one thing into another I came up with this.
This is a stripped down version of CM11 that allows you to compile recoveries from,
It's main feature is that all(most) of the 'junk' which isn't used in recovery build is removed not only saving you time in downloading but also space,
Sync'ing this setup took me 1 hour and 4 minutes and saved me alot of space and download bandwidth.
(for a bit of transparency, I'm running a slightly modified setup, so there can be some discrepancies in the steps, if that’s the case, post about it and hopefully I'll fix it, though looking through, everything seems correct, I'll also describe my setup in a new post below if you're interested)
1) setup your packages
For linux based systems (32bit & 64bit)
Code:
sudo apt-get install bison build-essential curl flex git gnupg gperf libesd0-dev liblz4-tool libncurses5-dev libsdl1.2-dev libwxgtk2.8-dev libxml2 libxml2-utils lzop openjdk-6-jdk openjdk-6-jre pngcrush schedtool squashfs-tools xsltproc zip zlib1g-dev
For Linux based System (64bits ONLY)
Code:
sudo apt-get install g++-multilib gcc-multilib lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev
2) Setup Repo
Change droid_root to whatever directory you prefer
Code:
mkdir -p ~/bin
PATH="$HOME/bin:$PATH"
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
droid_root="~/android/cm11"
mkdir -p ~/$droid_root
cd [I]droid_root[/I]
repo init -u https://github.com/Thunder07/minimal_android.git -b cm-11.0_min
3) Setup Up Environment
Now, you're almost done, just wait for the sync to finish and run these commands,
Which will setup your environment and download your device tree if required.
remove the {} and replace the content with actual device code name
Do also keep in-mind that you'd need to run these 2 lines every-time you start a new shell when building the recovery.
and that you're cd into your droid_root.
Note: calling breakfast the 1st time will through few error, call it again should throw a dependency error, which we will fix in the next step
Code:
source build/envsetup.sh
breakfast {DEVICE_CODE_NAME}
I'm using an htc one x, so my commands would look like this
DONT RUN THIS CODE, ITS FOR HTC ONE X ONLY
Code:
source build/envsetup.sh
breakfast endeavouru
4) Removing Android Build Requirements
the error should look something like this
Code:
build/core/product_config.mk:239: *** _nic.PRODUCTS.[[device/BRAND/DEVICE/cm.mk]]: "[B]hardware[/B]/ti/wlan/mac80211/wl128x-wlan-products.mk" does not exist. Stop.
and as you might have guessed from the word hardware, the build (CM) is expecting files assoicated with hardware, which are not required by the recovery.
Open $droid_root/device/BRAND/DEVICE/ preferably in file manager
Note: that DEVICE & BRAND refer to you device name and brand and not a directory called BRAND/DEVICE
open cm.mk and change this
Code:
# Inherit some common CM stuff.
$(call inherit-product, vendor/cm/config/common_full_phone.mk)
# Enhanced NFC
$(call inherit-product, vendor/cm/config/nfc_enhanced.mk)
# Inherit device configuration
$(call inherit-product, device/htc/endeavoru/full_endeavoru.mk)
To look like this.
Don't copy and paste as these file contains reference to my device (htc/endeavoru)
as you can see the highlighted bit is the changes you need to make.
Code:
# Inherit some common CM stuff.
$(call inherit-product, vendor/cm/config/[B][COLOR="Green"]common.mk[/COLOR][/B])
# Enhanced NFC
[B][COLOR="Green"]#[/COLOR][/B]$(call inherit-product, vendor/cm/config/nfc_enhanced.mk)
# Inherit device configuration
[B][COLOR="Green"]#[/COLOR][/B]$(call inherit-product, device/htc/endeavoru/full_endeavoru.mk)
Now, onto DEVICE.mk
is a bit more messy to desribe so i paste a diff to illustrate: http://pastebin.com/jNDGhSPe
Note you can probably get away with leaving PRODUCT_COPY_FILES alone and just removing the hardware related $(call inherit-product, hardware/*.mk)
but just as well, you've got no use for them in this current setup
5) Build
Bofore you start Building, make sure you're building the recovery you want TWRP/CWM/CWM_Phil/CM simple Recovery cloned into $droid_root/bootable/recovery/
Now for the building part itself, this will build the kernel & recovery and create a flashable image
Note:Make sure you're cd'ed to $droid_root and remember to do step 3 EVERYTIME you open a new shell
Code:
mka recoveryimage
Reserve: advance setup
To speed up the building process I've taken the process a step further, instead of building the kernel with the recovery,
I'd build both seperately and use the zImage as a prebuilt image, that way whenever I can "mka recoveryimage", I dont have to go through the process of building the zImage, even though it might already be built and fast enough, I'd rather just skip it all,
if you want to do the same, follow this.
For this part I'm assuming you know how to build a kernel, so i wont go through it.
so open $droid_root/device/BRAND/DEVICE/Boardconfig.mk
Code:
TARGET_KERNEL_SOURCE := kernel/BRAND/DEVICE
TARGET_KERNEL_CONFIG := cyanogenmod_endeavoru_defconfig
replace it with this
Code:
TARGET_PREBUILT_KERNEL := LOCATION_TO_PREBUILT_ZIMAGE
TARGET_PREBUILT_RECOVERY_KERNEL := LOCATION_TO_PREBUILT_ZIMAGE
open AndroidBoard.mk
Note: your AndroidBoard.mk may already have this, so be sure to check before replacing anything.
Code:
ALL_PREBUILT += $(INSTALLED_KERNEL_TARGET)
Replace With
Code:
file := $(INSTALLED_KERNEL_TARGET)
ALL_PREBUILT += $(file)
$(file): $(TARGET_PREBUILT_KERNEL) | $(ACP)
$(transform-prebuilt-to-target)
and you're done,
Now whenever you run "mka recoveryimage", a prebuilt zImage will be used,
and whenever you rebuild your kernel, "mka recoveryimage" would use that image.
reserve... just incase
Can I use Minimal set up for cm12.0 for building CWM recovery?
Thunder07 said:
reserve... just incase
Click to expand...
Click to collapse
Can I follow this guide for making a CWM recovery for compiling a CWM recovery for my android mobile(Celkon Q 500, android 4.4.2, Broadcom chip based), by replacing cm11.0 with cm 12.0? Please guide.
Eversmile23 said:
Can I follow this guide for making a CWM recovery for compiling a CWM recovery for my android mobile(Celkon Q 500, android 4.4.2, Broadcom chip based), by replacing cm11.0 with cm 12.0? Please guide.
Click to expand...
Click to collapse
Hi, sorry for the late reply, I'm buzy these days,
but I just updated the repo to allow for that.
though I didn't/dont have the time to test the changes myself.
Can youexplain a bit furher>
Thunder07 said:
Hi, sorry for the late reply, I'm buzy these days,
but I just updated the repo to allow for that.
though I didn't/dont have the time to test the changes myself.
Click to expand...
Click to collapse
As I am new to this 'building from source', I could not understand your statement ' I just updated the repo to allow for that'. What exactly, I will have to do to achieve my goal as I stated previously?
Eversmile23 said:
As I am new to this 'building from source', I could not understand your statement ' I just updated the repo to allow for that'. What exactly, I will have to do to achieve my goal as I stated previously?
Click to expand...
Click to collapse
You asked if you can use cm12 for the recovery building, before yesterday the answer was no, but I've updated the repo to use cm12 code... If you change cm11 to cm12 that is.
Also, if you're new to this, I'll avoid this particular guide as I won't be able to guide you through it if it doesn't work, as I'm busy for the next 2 weeks.
Sent from my A0001 using XDA Free mobile app
Good job
Gửi từ SM-G906K của tôi bằng cách sử dụng Tapatalk
Please help. I do not undertstand why 'repo sync' always fails at a particular stage, though I have 30+ GB of disk space available in my working folder named 'cm12'. Following is the last screen message :
Fetching project platform/external/ant-glob
Fetching projects: 8% (40/495) Receiving objects: 86% (2389/2771), 26.68 MiBerror: RPC failed; result=56, HTTP code = 200iB | 124.00 KiB/s
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
remote: Sending approximately 1.94 GiB ...
remote: Counting objects: 85, done
remote: Finding sources: 100% (85/85)
error: RPC failed; result=56, HTTP code = 200iB | 88.00 KiB/s
fatal: The remote end hung up unexpectedly
Now should I run 'repo sync' again or should I use 'repo sync -j1' ?
topic no support good
Gửi từ MX4 Pro của tôi bằng cách sử dụng Tapatalk
Eversmile23 said:
Please help. I do not undertstand why 'repo sync' always fails at a particular stage, though I have 30+ GB of disk space available in my working folder named 'cm12'. Following is the last screen message :
Fetching project platform/external/ant-glob
Fetching projects: 8% (40/495) Receiving objects: 86% (2389/2771), 26.68 MiBerror: RPC failed; result=56, HTTP code = 200iB | 124.00 KiB/s
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
remote: Sending approximately 1.94 GiB ...
remote: Counting objects: 85, done
remote: Finding sources: 100% (85/85)
error: RPC failed; result=56, HTTP code = 200iB | 88.00 KiB/s
fatal: The remote end hung up unexpectedly
Now should I run 'repo sync' again or should I use 'repo sync -j1' ?
Click to expand...
Click to collapse
No point in using j1, try sync, if it fails you might have to start fresh.
But the error at it reads is an error in the host and not your problem.
29y6145 said:
topic no support good
Gửi từ MX4 Pro của tôi bằng cách sử dụng Tapatalk
Click to expand...
Click to collapse
Sent from my A0001 using XDA Free mobile app
Thunder07 said:
So lately I broke my CM11 base which i use for kernel/recovery compiling,
trying nearly everything to fix it failed, So i took the lazy route, deleted it and started a new base,
So for the moment, I left it sync'ing and went to watch the TV, knowing it takes around 3 hours for a full sync,
came back few hours later and sync was complete and before anything I scrolled he terminal backup and realised there is alot of 'junk' that is of no use to kernel/recovery compiling, so I asked around and i was told Helicopter88 had a minimal setup just for that, but it's out of date,
and from one thing into another I came up with this.
This is a stripped down version of CM11 that allows you to compile recoveries from,
It's main feature is that all(most) of the 'junk' which isn't used in recovery build is removed not only saving you time in downloading but also space,
Sync'ing this setup took me 1 hour and 4 minutes and saved me alot of space and download bandwidth.
(for a bit of transparency, I'm running a slightly modified setup, so there can be some discrepancies in the steps, if that’s the case, post about it and hopefully I'll fix it, though looking through, everything seems correct, I'll also describe my setup in a new post below if you're interested)
1) setup your packages
For linux based systems (32bit & 64bit)
Code:
sudo apt-get install bison build-essential curl flex git gnupg gperf libesd0-dev liblz4-tool libncurses5-dev libsdl1.2-dev libwxgtk2.8-dev libxml2 libxml2-utils lzop openjdk-6-jdk openjdk-6-jre pngcrush schedtool squashfs-tools xsltproc zip zlib1g-dev
For Linux based System (64bits ONLY)
Code:
sudo apt-get install g++-multilib gcc-multilib lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev
2) Setup Repo
Change droid_root to whatever directory you prefer
Code:
mkdir -p ~/bin
PATH="$HOME/bin:$PATH"
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
droid_root="~/android/cm11"
mkdir -p ~/$droid_root
cd [I]droid_root[/I]
repo init -u https://github.com/Thunder07/minimal_android.git -b cm-11.0_min
3) Setup Up Environment
Now, you're almost done, just wait for the sync to finish and run these commands,
Which will setup your environment and download your device tree if required.
remove the {} and replace the content with actual device code name
Do also keep in-mind that you'd need to run these 2 lines every-time you start a new shell when building the recovery.
and that you're cd into your droid_root.
Note: calling breakfast the 1st time will through few error, call it again should throw a dependency error, which we will fix in the next step
Code:
source build/envsetup.sh
breakfast {DEVICE_CODE_NAME}
I'm using an htc one x, so my commands would look like this
DONT RUN THIS CODE, ITS FOR HTC ONE X ONLY
Code:
source build/envsetup.sh
breakfast endeavouru
4) Removing Android Build Requirements
the error should look something like this
Code:
build/core/product_config.mk:239: *** _nic.PRODUCTS.[[device/BRAND/DEVICE/cm.mk]]: "[B]hardware[/B]/ti/wlan/mac80211/wl128x-wlan-products.mk" does not exist. Stop.
and as you might have guessed from the word hardware, the build (CM) is expecting files assoicated with hardware, which are not required by the recovery.
Open $droid_root/device/BRAND/DEVICE/ preferably in file manager
Note: that DEVICE & BRAND refer to you device name and brand and not a directory called BRAND/DEVICE
open cm.mk and change this
Code:
# Inherit some common CM stuff.
$(call inherit-product, vendor/cm/config/common_full_phone.mk)
# Enhanced NFC
$(call inherit-product, vendor/cm/config/nfc_enhanced.mk)
# Inherit device configuration
$(call inherit-product, device/htc/endeavoru/full_endeavoru.mk)
To look like this.
Don't copy and paste as these file contains reference to my device (htc/endeavoru)
as you can see the highlighted bit is the changes you need to make.
Code:
# Inherit some common CM stuff.
$(call inherit-product, vendor/cm/config/[B][COLOR="Green"]common.mk[/COLOR][/B])
# Enhanced NFC
[B][COLOR="Green"]#[/COLOR][/B]$(call inherit-product, vendor/cm/config/nfc_enhanced.mk)
# Inherit device configuration
[B][COLOR="Green"]#[/COLOR][/B]$(call inherit-product, device/htc/endeavoru/full_endeavoru.mk)
Now, onto DEVICE.mk
is a bit more messy to desribe so i paste a diff to illustrate: http://pastebin.com/jNDGhSPe
Note you can probably get away with leaving PRODUCT_COPY_FILES alone and just removing the hardware related $(call inherit-product, hardware/*.mk)
but just as well, you've got no use for them in this current setup
5) Build
Bofore you start Building, make sure you're building the recovery you want TWRP/CWM/CWM_Phil/CM simple Recovery cloned into $droid_root/bootable/recovery/
Now for the building part itself, this will build the kernel & recovery and create a flashable image
Note:Make sure you're cd'ed to $droid_root and remember to do step 3 EVERYTIME you open a new shell
Code:
mka recoveryimage
Click to expand...
Click to collapse
i need to change endevoru to my device name and htc to n=my brand name everywhere.. right??
jackey31 said:
i need to change endevoru to my device name and htc to n=my brand name everywhere.. right??
Click to expand...
Click to collapse
basically, but each device tree is different, so this tutorial is to explain how and why to do it.
you probably need some basic knowledge of how to build the recovery using the proper way, before attempting this.
can you port for me??? please
Thunder07 said:
basically, but each device tree is different, so this tutorial is to explain how and why to do it.
you probably need some basic knowledge of how to build the recovery using the proper way, before attempting this.
Click to expand...
Click to collapse
thanks for writing such a great guide for compiling cwm..
but i can't do this bcause i don't know much abt it ..
i don't have linux based os..
very slow and limited internet connection, would probably take a week to download 4gb source.. ..
so can you port for my device.. i will upload..
recovery.img
boot.img
build.prop
and i have extracted recovery.fstab so know the mount points..
thanking you in advance..
syncing repo..
Thunder07 said:
basically, but each device tree is different, so this tutorial is to explain how and why to do it.
you probably need some basic knowledge of how to build the recovery using the proper way, before attempting this.
Click to expand...
Click to collapse
i installed linux mint in virtual box.. currently syncing repo...
my net gets disconnected after 40 minutes i don't know why... so i have run repo sync again every time i got disconnected.
has it started syncing from the begining?? or just picked up from the last point when my net got disconnected??
will i ever be able to sync it??..
jackey31 said:
i installed linux mint in virtual box.. currently syncing repo...
my net gets disconnected after 40 minutes i don't know why... so i have run repo sync again every time i got disconnected.
has it started syncing from the begining?? or just picked up from the last point when my net got disconnected??
will i ever be able to sync it??..
Click to expand...
Click to collapse
if you run "repo sync" after you're disconnected it will continue from where it left off.
can't sync
Thunder07 said:
if you run "repo sync" after you're disconnected it will continue from where it left off.
Click to expand...
Click to collapse
i can never sync this repo.. my connection drops after 400 mb so stuck at 70 % project 80/114 platform/prebuilts/tools 445mb..
i have run repo sync several time it starts downloading this project from the beginning.. :crying::crying:
i does not actually resume it restarts the project which was not completely downloaded.
Check out this script by @yuweng to auto(matically|magically) compile TWRP for your device!
Lately the TWRP Compiling guide, has been seeing a lot of newbies who were struggling with TWRP flags to ensure they compile a usable build. So without delay, here we go!
If no input has been suggested, assume true/false
CREDITS :
@Android-Andi for some explanations here
@SdtBarbarossa for some more explanations here
@yuweng for HUGE amount of explanations provided through PM!
# Automatically implies these:
BOARD_HAS_NO_REAL_SDCARD := true
TW_USE_TOOLBOX := true
TW_EXCLUDE_SUPERSU := true
TW_EXCLUDE_MTP := true
TW_OEM_BUILD := true
# Add EXT4 support
TARGET_USERIMAGES_USE_EXT4 := true
# Disable/enable SELinux. Only suggested when you want to enable SELinux support
TWHAVE_SELINUX := true
# Remove MTP support
TW_EXCLUDE_MTP := true
# No screen timeout
TW_NO_SCREEN_TIMEOUT := true
# disables things like sdcard partitioning and may save you some space if TWRP isn't fitting in your recovery patition
BOARD_HAS_NO_REAL_SDCARD := true
# this enables proper handling of /data/media on devices that have this folder for storage (most Honeycomb and devices that originally shipped with ICS like Galaxy Nexus
RECOVERY_SDCARD_ON_DATA := true
# HTC Dumlock for those devices which need it
TW_INCLUDE_DUMLOCK := true
Partition defines
Code:
TW_INTERNAL_STORAGE_PATH
TW_INTERNAL_STORAGE_MOUNT_POINT
TW_EXTERNAL_STORAGE_PATH
TW_EXTERNAL_STORAGE_MOUNT_POINT
# If your device has recovery as a second ramdisk of boot.img
TW_HAS_NO_RECOVERY_PARTITION := true
# To prevent /boot partition not found error
TW_HAS_NO_BOOT_PARTITION := true
# Removes the 'Reboot bootloader' button
TW_NO_REBOOT_BOOTLOADER := true
# Removes the 'Reboot recovery' button
TW_NO_REBOOT_RECOVERY := true
# Disable the battery percentage for devices where it doesn't work properly
TW_NO_BATT_PERCENT := true
# Same as above, for CPU Temperature
TW_NO_CPU_TEMP := true
# Allows you to map a custom keycode for power button, takes in a number, usually three digits
TW_CUSTOM_POWER_BUTTON := 107
# Always use rm -rf to wipe
TW_ALWAYS_RMRF := true
# Prevent TWRP from unmounting /system
TW_NEVER_UNMOUNT_SYSTEM := true
# Removes USB Storage capability
TW_NO_USB_STORAGE := true
# Inject TWRP as a second ramdisk for Samsung devices, which keep recoveries that way.
TW_INCLUDE_INJECTTWRP := true
TW_INCLUDE_BLOBPACK -- NEED HELP
# Specify a path to the lun file on device
TARGET_USE_CUSTOM_LUN_FILE_PATH := "/sys/class/android_usb/android0/f_mass_storage/lun0/file"
# Not very sure, I guess it allows you to simply pop in the lunfile itself
BOARD_UMS_LUNFILE :=
TW_HAS_DOWNLOAD_MODE -- For Samsung devices
TW_NO_SCREEN_BLANK -- NEED HELP
TW_SDEXT_NO_EXT4 -- Blocks EXT4 FS for SD-EXT partitions
# Forces use of /proc/cpuinfo for determining device id. Look here : https://github.com/omnirom/android_bootable_recovery/blob/android-6.0/data.cpp#l183-l184
TW_FORCE_CPUINFO_FOR_DEVICE_ID := true
# For older devices. See here :https://github.com/omnirom/android_bootable_recovery/blob/android-6.0/Android.mk#l383
TW_NO_EXFAT_FUSE := true
# Decryption support for /data
TW_INCLUDE_CRYPTO -- General decryption modules
# On some device, TWRP backup folder name will show 0000000000 bcos cpuinfo has no serial number. Using this flag then it will use ro.product.model as the folder name instead of all 0000000000
TW_USE_MODEL_HARDWARE_ID_FOR_DEVICE_ID := true
# Set the path to the sysfs entry which controls the brightness
TW_BRIGHTNESS_PATH := /sys/devices/platform/s3c24xx-pwm.0/pwm-backlight.0/backlight/pwm-backlight.0/backlight
# A seconday path for the above
TW_SECONDARY_BRIGHTNESS_PATH :=
# Max brightness to prevent display damage
TW_MAX_BRIGHTNESS := 255
# Default brightness for TWRP
TW_DEFAULT_BRIGHTNESS := 150
# Custom battery readout path, don't use the given path though, it is intended to be used for a full diagnostic.
TW_CUSTOM_BATTERY_PATH := /sys/class/power_supply/battery/batt_attr_text
# CPU temp sysfs path, if it is zero all the time.
TW_CUSTOM_CPU_TEMP_PATH := true
# Remove the ability to encrypt backups with a password
TW_EXCLUDE_ENCRYPTED_BACKUPS := true
# Timezone fixes for some Qcom devices.
TARGET_RECOVERY_QCOM_RTC_FIX
TW_NO_LEGACY_PROPS -- NEED HELP
# Supply a custom init.rc for the recovery
TARGET_RECOVERY_INITRC := device/htc/pico/ramdisk/recovery/init.recovery.rc
# Set the default language, if not english
TW_DEFAULT_LANGUAGE := en-US
# Specify architecture
TARGET_ARCH := arm
# For people who would want to have ToyBox rather than Busybox
TW_USE_TOOLBOX := true
# Remove exFAT formatting binaries
TW_NO_EXFAT := true
# Remove SuperSU and stop TWRP prompts to install it
TW_EXCLUDE_SUPERSU := true
# An awesome way to take screenshots. Back-end improvement, no noticeable user side changes. Screenshots work without it too
TW_INCLUDE_FB2PNG := true
BOARD_USES_BML_OVER_MTD -- NEED HELP
# include Logcat daemon for help in debugging
TWRP_INCLUDE_LOGCAT := true
# See here : https://github.com/omnirom/android_bootable_recovery/blob/android-6.0/Android.mk#L435
TARGET_RECOVERY_DEVICE_MODULES := true
TARGET_USERIMAGES_USE_F2FS -- Include mkfs.f2fs for formatting partitions as F2FS
# Include a custom hardwarekeyboard.cpp . Can't see the point though.
TWRP_CUSTOM_KEYBOARD := device/lge/hammerhead/recovery/hardwarekeyboard.cpp
# Log touch input
TWRP_EVENT_LOGGING := true
# @yuwneg :My experience on MTK tablet, typical is RECOVERY_TOUCHSCREEN_SWAP_XY & RECOVERY_TOUCHSCREEN_FLIP_Y is use is pair as MTK vendor tend to use landscape LCD but a normal portrait Touch Screen !
TW_X_OFFSET -- X-Axis offset for borked displays
TW_Y_OFFSET -- Y-Axis offset for borked displays
# Smartwatch optimisation
TW_ROUND_SCREEN := true
TW_THEME -- New flag, takes in the following : portrait_mdpi, landscape_mdpi, portrait_hdpi,landscape_hdpi,watch_mdpi . It should be caps but when I was compiling a minute ago, it threw me an error and asked to de-caps it. So, see for yourself what works
TW_CUSTOM_THEME -- Use a custom theme like materialised by @z31s1g . Give the path to the contents here.
TWRP_NEW_THEME -- Old is gold. Put false to use the old one.
TW_EXTRA_LANGUAGES -- Set to true and enable localisation
TW_MTP_DEVICE -- Specify a custom device name for MTP
TW_TARGET_USES_QCOM_BSP -- Qcom specific enhancements
TARGET_PREBUILT_KERNEL -- Use a prebuilt kernel rather than building from source
TARGET_RECOVERY_PIXEL_FORMAT -- Use RGBA,RGBX,ARGB and whatever, I don't remember, see the main thread for that info.
TARGET_RECOVERY_OVERSCAN_PERCENT -- Defines the padding to leave around the screen edges
BOARD_USE_CUSTOM_RECOVERY_FONT -- Specify a .ttf file to use as default font
BOARD_CUSTOM_GRAPHICS -- include customised graphics backends if 3.0.0-0 broke stuff for you
TARGET_CUSTOM_KERNEL_HEADERS -- NEED HELP
TW_NEW_ION_HEAP -- NEED HELP
Self Explanatory
Code:
RECOVERY_TOUCHSCREEN_SWAP_XY
RECOVERY_TOUCHSCREEN_FLIP_X
RECOVERY_TOUCHSCREEN_FLIP_Y
RECOVERY_GRAPHICS_FORCE_USE_LINELENGTH -- Fixes slanty graphics
TW_DISABLE_DOUBLE_BUFFERING -- NEED HELP
TARGET_RECOVERY_FORCE_PIXEL_FORMAT -- NEED HELP FOR POSSIBLE INPUTS
BOARD_HAS_FLIPPED_SCREEN -- For people whose screens were mounted the wrong side across
TW_IGNORE_MAJOR_AXIS_0 -- NEED HELP
TW_IGNORE_MT_POSITION_0 -- NEED HELP
TW_IGNORE_ABS_MT_TRACKING_ID -- NEED HELP
TW_INPUT_BLACKLIST -- NEED HELP
TW_WHITELIST_INPUT -- NEED HELP
TARGET_HW_DISK_ENCRYPTION -- NEED HELP
TW_HAVE_X86_ACCELERATED_PIXELFLINGER -- Improvements for x86 based devices
ARCH_ARM_HAVE_NEON -- Take advantage of ARM-NEON optimisations
# remove TrueType fonts
TW_DISABLE_TTF:= true
# building of an OEM friendly TWRP. excludes SuperSu, uses Toolbox instead busybox, disables themeing. MORE INFOS TO BE ADDED
TW_OEM_BUILD := true
# Adds EXT4 formatting binaries
TARGET_USERIMAGES_USE_EXT4 := true
# exclude mtp from twrp (disable if you are not able to fix it device/kernel side, safes some space)
TW_EXCLUDE_MTP := true
# screen will stay awake
TW_NO_SCREEN_TIMEOUT := true
# needed on devices without a recovery partition (some devices have recovery included im boot.img)
TW_HAS_NO_RECOVERY_PARTITION := true
# removes the reboot option to boot into boooader, needed e.g. on samsung devices which use Download mode instead
TW_NO_REBOOT_BOOTLOADER := true
# add an option in reboot menu to reboot into Download Mode
TW_HAS_DOWNLOAD_MODE := true
# some devices don't have a temp sensor, disable in such case to stop spamming recovery.log
TW_NO_CPU_TEMP := true
# recursive delete by default instead fotmatting (available optional inside recovery settings too)
TW_ALWAYS_RMRF := true
# system won't be unmounted,
TW_NEVER_UNMOUNT_SYSTEM := true
# don't blank screen (available optional inside recovery settings too)
TW_NO_SCREEN_BLANK := true
# deprecated, use TW_INCLUDE_CRYPTO instead
TW_INCLUDE_JB_CRYPTO := true
# add support for encryption
TW_INCLUDE_CRYPTO := true
# use a custom init.rc in recovery, add the path. Example:
TARGET_RECOVERY_INITRC := device/samsung/p3100/rootdir/init.twrp.rc
# ToyBox (disables busybox?)
TW_USE_TOOLBOX := true
# exclude SuperSu e.g. to save some space or for different other reasons (supersu still included bx default?)
TW_EXCLUDE_SUPERSU := true
# include f2fs support (make sure your kernel supports f2fs!)
TARGET_USERIMAGES_USE_F2FS := true
# device resolution - deprecated, use TW_THEME instead
DEVICE_RESOLUTION :=
# define the theme for your device resolution, note: you can also use smaller/bigger themes because the theme get scaled for your deviceresolution anyway):
# 240x240 280x280 320x320
TW_THEME := watch_mdpi
# 320x480 480x800 480x854 540x960
TW_THEME := portrait_mdpi
# 720x1280 800x1280 1080x1920 1200x1920 1440x2560 1600x2560
TW_THEME := portrait_hdpi
# 800x480 1024x600 1024x768
TW_THEME := landscape_mdpi
# 1280x800 1920x1200 2560x1600
TW_THEME := landscape_hdpi
# auto copy files placed in device/$VENDOR/$DEVICENAME/recovery/root inside recovery ramdisk (e.g. init.recivery*.rc which get removed from recoveryramdisk by default). example:
TARGET_RECOVERY_DEVICE_DIRS += device/samsung/espresso-common
# path to a prebuild kernel (can be used if you are unable to compile a kernel yourself, e.g. if no kernel source available)
TARGET_PREBUILT_KERNEL := $(LOCAL_PATH)/prebuilt/zImage
# swap x anf y axis for touch
RECOVERY_TOUCHSCREEN_SWAP_XY := true
# flip x axis for touch
RECOVERY_TOUCHSCREEN_FLIP_X := true
# flip y axis for touch,
RECOVERY_TOUCHSCREEN_FLIP_Y := true
Gesendet von meinem LG-H815 mit Tapatalk
---------- Post added at 05:23 PM ---------- Previous post was at 05:19 PM ----------
# don't include default init.recovery.usb.rc, provide your own or use needed defines inside init.recovery.$DEVICE.rc
TW_EXCLUDE_DEFAULT_USB_INIT := true
Gesendet von meinem LG-H815 mit Tapatalk
Android-Andi said:
...
Gesendet von meinem LG-H815 mit Tapatalk
Click to expand...
Click to collapse
Thanks sir for the suggestions. I can see I've included the descriptions for most of them already, but I'll be sure to attribute to and add the rest tomorrow. I would be grateful if you could shed some light on the ones I've marked "NEED HELP"
MSF Jarvis said:
Thanks sir for the suggestions. I can see I've included the descriptions for most of them already, but I'll be sure to attribute to and add the rest tomorrow. I would be grateful if you could shed some light on the ones I've marked "NEED HELP"
Click to expand...
Click to collapse
I've done those stuff offline from your gist[emoji14]have seen this thread after that but maybe you like the way i showed the defines as it's setup the way you would do in your BoardConfig.mk.
Haven't done those flags i am not sure about myself, maybe @_that or @Dees_Troy can bring light to some of them.
Gesendet von meinem LG-H815 mit Tapatalk
This thread is a great idea.
Especially with the update to twrp 3.0 with new flags.
I've been lucky enough to be able to guess/puzzle out/grab from other device trees enough to build and use the recovery on my personal devices, but information like this is very helpful to have consolidated.
Thanks for sharing.
Android-Andi said:
I've done those stuff offline from your gist[emoji14]have seen this thread after that but maybe you like the way i showed the defines as it's setup the way you would do in your BoardConfig.mk.
Haven't done those flags i am not sure about myself, maybe @_that or @Dees_Troy can bring light to some of them.
Gesendet von meinem LG-H815 mit Tapatalk
Click to expand...
Click to collapse
Yeah, I just didn't have enough time to beautify it. Will gradually do so.
TW_CUSTOM_THEME := /path/to/theme/
this one is used to replace the stocktheme with a different one (like material-play)
the theme will be directly in ramdisk
TW_INCLUDE_INJECTTWRP := true — adds ability to inject TWRP into some Samsung boot images for Samsung devices that have recovery as a second ramdisk in the boot image
the second flag is quotes by dees_troy!
TW_NEW_ION_HEAP
this has sonething to do with 3.10 kernels and a different naming in /include/linux/ion.h ... like a switch between old heap_mask and new heap_id_mask
Sent from my Xperia T using XDA Free mobile app
Nice initiative with this thread, this has been oh say 2 years too long in the making haha.
TARGET_RECOVERY_FORCE_PIXEL_FORMAT
Not sure but I would imagine it overrides what TWRP detects nor do I see the difference between it and TARGET_RECOVERY_PIXEL_FORMAT. The only possible varible right now is RGB_565. BGRA_8888, RGBA_8888 and RGBX_8888 are not yet implemented.
TW_INPUT_BLACKLIST
Black list input devices that interfere with touch. For multiple input devices the delimiter is \x0a. You would basically build a special TWRP with TWRP_EVENT_LOGGING := true. Put it on the device and read the more verbose log to see what inputs you want to blacklist.
EDIT: Ah here is a copy of the wording I had in one of my xda posts about the subject and the commit link https://github.com/omnirom/android_bootable_recovery/commit/5742a40b87dfdc26df3bd9fe94197ae414ece546
Usage:
TW_INPUT_BLACKLIST := accelerometer
TW_INPUT_BLACKLIST := "accelerometer\x0agyroscope"
This can be used to fix touch input on devices where an input
device is breaking touch processing in TWRP.
We are using new line chars to separate multiple devices and in
the make file you specify the new line character with \x0a which
is the hex code in ASCII for a new line.
The new line character might be a bit of a pain to use as a
delimeter, but it is highly unlikely that an OEM will ever name
an input device with a new line character in the name.
Change-Id: I255136b7a686909a23e649918c661843153c2853
Click to expand...
Click to collapse
and here is an example from my BoardConfig
TW_INPUT_BLACKLIST := "accelerometer\x0admard06\x0alis3dh_acc\x0alis3de_acc"
On a side note is there a link somewhere to fixing graphics issues induced in 3.0? I see a lot of talk about it but nothing substantial.
aicjofs said:
On a side note is there a link somewhere to fixing graphics issues induced in 3.0? I see a lot of talk about it but nothing substantial.
Click to expand...
Click to collapse
Not really. Slanty graphics can be fixed with linelength, but as such there's nothing on that front. You might wanna slap a recovery.log onto Dees_Troy at #twrp on webchat.freenode.net though.
Every version has new flags introduced & also flags deprecated...
TARGET_USES_LOGD => Source
TW_SCREEN_BLANK_ON_BOOT ( Deprecated on android-6.0 => Source, on some legacy devices, TWRP will not boot without this flag)
Dees_Troy said:
There are other build flags which you can locate by scanning the Android.mk files in the recovery source. Most of the other build flags are not often used and thus I won't document them all here.
Source
Click to expand...
Click to collapse
Use the_silver_searcher, its extremely fast ! :good:
Code:
cd ~/cm/bootable
ag -ia "[URL="https://gerrit.omnirom.org/#/c/16610/"]TW_INCLUDE_JPEG[/URL]" recovery/
recovery/minuitwrp/resources.cpp
34:#ifdef TW_INCLUDE_JPEG
256:#ifdef TW_INCLUDE_JPEG
361:#ifdef TW_INCLUDE_JPEG
367:#ifdef TW_INCLUDE_JPEG
recovery/minuitwrp/Android.mk
61:ifneq ($(TW_INCLUDE_JPEG),)
64: LOCAL_CFLAGS += -DTW_INCLUDE_JPEG
176:ifneq ($(TW_INCLUDE_JPEG),)
recovery/prebuilt/Android.mk
126:ifneq ($(TW_INCLUDE_JPEG),)
Code:
ag -ia "[COLOR="Blue"]TW_FLASH_FROM_STORAGE[/COLOR]" recovery/
recovery/Android.mk
262:#ifeq ($(TW_FLASH_FROM_STORAGE), true) [COLOR="Blue"]Making this the default behavior[/COLOR]
263: LOCAL_CFLAGS += -DTW_FLASH_FROM_STORAGE
As the code says, its already the default therefore you don't need to specify it again on BoardConfig.mk
Code:
ag -ia "[URL="https://gerrit.omnirom.org/#/c/14099/"]TW_INCLUDE_NTFS_3G[/URL]" recovery/
recovery/Android.mk
440:ifeq ($(TW_INCLUDE_NTFS_3G),true)
recovery/prebuilt/Android.mk
201:ifeq ($(TW_INCLUDE_NTFS_3G),true)
At the omnirom gerrit, you'll find all commits though you gotta search for it or try this or this for TWRP related
Code:
ag -ia "[COLOR="blue"]TW_BOARD_CUSTOM_GRAPHICS[/COLOR]" recovery/
recovery/minuitwrp/Android.mk
14:ifneq ($(TW_BOARD_CUSTOM_GRAPHICS),)
16: $(warning * TW_BOARD_CUSTOM_GRAPHICS support has been deprecated in TWRP. *)
Code:
ag -ia "[COLOR="Blue"]TW_DISABLE_TTF[/COLOR]" recovery/
recovery/minuitwrp/Android.mk
165:ifeq ($(TW_DISABLE_TTF), true)
167: $(warning * TW_DISABLE_TTF support has been deprecated in TWRP. *)
recovery/prebuilt/Android.mk
192:ifneq ($(TW_DISABLE_TTF), true)
Code:
BOARD_SUPPRESS_SECURE_ERASE := true
BOARD_SUPPRESS_EMMC_WIPE := true
Source, further explanation here
Code:
__bionic_open_tzdata: couldn't find any tzdata when looking for localtime!
__bionic_open_tzdata: couldn't find any tzdata when looking for GMT!
__bionic_open_tzdata: couldn't find any tzdata when looking for posixr!
Fix tzdata on recovery.log => Source
AIO-TWRP-Compiler on BBQLinux
First step
Refer to here on how to setup BBQLinux either native boot, dual-boot or on VBox... :good:
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
Download the script & extract it to your HOME or if you are 100% sure that you have already setup a fully working Build Environment on Ubuntu or any other linux distro then remark these lines.
Start Terminal => Edit => Profile Preferences => Colors => unchecked => Use colors from system theme => Built-in schemes => White on Black => Close
BBQLinux => Menu => Administration => BBQLinux Python Switcher => Python 2
BBQLinux => Menu => Administration => BBQLinux Java Switcher => OpenJDK 7
Start the script with below command
Code:
sh twrp
Menu 1
You can use either OmniROM or Cyanogenmod repo to build TWRP
Choose either to use TWRP branch android-5.1 or android-6.0. Typically, for legacy devices with ICS or JB doesn't support TTF so if TWRP android-6.0 doesn't boot then you'll have to use android-5.1 branch.
You can either choose to use Full-Source or Part-Source. Compiled out recovery.img will have exactly the same size & files on ramdisk.
Yes, Part-Source is only using 41 of the projects to build a fully working TWRP. Syncing in progress. After syncing, you can refer to ~/AIO-TWRP-Compiler/sync.log for any error
Typically, when you have already downloaded the base repo, re-syncing it will only take a few seconds
Menu 2
Copy either your boot or recovery.img to ~/AIO-TWRP-Compiler folder
Key-in your vendor name
Key-in your device name
This step is extracting the ro.product.device & ro.product.model from your device directly which is typically require for identification when flashing update.zip from your vendor
Credits to RD osm0sis, the script will auto download osm0sis's unpackbootimg for mkbootimg arguments required for repacking recovery.img . . . :good:
mkbootimg arguments will be display & auto updated to the BoardConfig.mk
Part of the original mkvendor.sh script is adapted for the extraction of boot or recovery.img which also does the git initialization. If the ramdisk can be unpack then the recovery.fstab will be copied to the device tree folder, if not then it will create a basic MTK recovery.fstab, boot.mk & also BOARD_CUSTOM_BOOTIMG_MK. If you're not building for MTK then remove that line from BoardConfig.mk
You will need to add/ remove TWRP flags accordingly & manual edit on the TARGET_CPU_VARIANT either cortex-a7 or cortex-a9 for older MTK, refer to your device spec. Possible values are cortex-a5, cortex-a7, cortex-a8, cortex-a9, cortex-a15, krait, scorpion. Use generic for devices that do not have a CPU similar to any of the supported cpu variants
You will need to manual edit on the recovery.fstab to suit your device or TWRP-ify the extracted stock recovery.fstab
Menu 3
omni.dependencies is only a warning, will continue to build when you choose OmniROM repo
Make 4.1 is only a warning, will continue to build
Java 1.7 is only a warning, will continue to build
When you have build earlier, subsequent build will only take few minutes bcos of CCACHE... :good:
Menu 4
Updated Menu 4 support for Others. Or you can use Flashify or Rashr or above Others to install compiled recovery.img to your device, do check if they are compatible or it will brick your recovery or worse, whole device !
Key-in your device recovery partition path. Above is typical for LG
Done, test TWRP on your device to make sure it is working properly if not then add or remove flags accordingly & use Menu 3 to build again
Menu 5
Choose either Option 1 or 2, Option 2 is recommended & it won't take long if you are using Part-Source.
Menu 6
The script will auto open up a new browser for you to register a new account on github
Your device tree on github
AIO-TWRP-Compiler
bash script itself is self-explanatory. Thanks to the OP, he has offer to take over the maintenance of this script so hit your Thanks button to him... :good: If you found any error/ bug or have any new ideas/ features for this script then pm the OP or do a git pull request... :good:
Above is the detail explanation on the script GUI front-end, here i'll explained what the script actually does.
Menu 1
This menu will create a local_manifest.xml to remove unwanted projects based on your selection. When select Full-Source, it will also create local_manifest.xml to remove existing recovery & replace it with TWRP based on your selection.
Code:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remove-project name="android_bootable_recovery" />
<project path="bootable/recovery" name="omnirom/android_bootable_recovery" revision="[COLOR="Blue"]android-6.0[/COLOR]" />
</manifest>
Part-Source
It is normal that OmniROM & CM will consistently add new projects to their repo when they introduce new features or functions to it. The beauty of this Part-Source is that even when projects grows, this script will grep -v only the needed projects for building TWRP on any base repo.
This Part-Source is the extreme minimal for building TWRP therefore some of the additional projects are needed when you use particular TWRP flags. As of today ( March 2016 ), it will build a fully working TWRP with only 44 projects on both OmniROM 4.4 & CM 11 base repo. In the future, Teamwin may also add a new feature or function then you will also need to add additional projects to it too or OP will update it based on your feedback. Refer to compile.log for details.
Code:
# Optional => TARGET_USERIMAGES_USE_F2FS := true
[COLOR="Red"]#[/COLOR]grep -v f2fs-tools ~/x > ~/x.tmp;mv ~/x.tmp ~/x
If you use TARGET_USERIMAGES_USE_F2FS := true then remove the remark #
Code:
# Optional => TW_INCLUDE_NTFS_3G := true
[COLOR="Red"]#[/COLOR]grep -v external/ntfs-3g ~/x > ~/x.tmp;mv ~/x.tmp ~/x
if you use TW_INCLUDE_NTFS_3G := true then remove the remark #
Code:
# Optional => TW_USE_TOOLBOX := true
[COLOR="red"][B]#[/B][/COLOR]grep -v external/toybox ~/x > ~/x.tmp;mv ~/x.tmp ~/x
[COLOR="Red"]#[/COLOR]grep -v external/mksh ~/x > ~/x.tmp;mv ~/x.tmp ~/x
If you use TW_USE_TOOLBOX := true then remove the remark #. toybox available on android-6.0/ cm-13.0 only, don't have such projects on android-4.4 but it'll work, refer to the end for more info.
Code:
# un-remark the below required for x64
[COLOR="Red"]#[/COLOR]grep -v linux-x86/aarch64/aarch64-linux-android-4.8 ~/x > ~/x.tmp;mv ~/x.tmp ~/x
[COLOR="red"]#[/COLOR]grep -v linux-x86/aarch64/aarch64-linux-android-4.9 ~/x > ~/x.tmp;mv ~/x.tmp ~/x
Code:
TARGET_ARCH := arm64
TARGET_CPU_ABI := arm64-v8a
TARGET_CPU_ABI2 := armeabi-v7a
TARGET_ARCH_VARIANT := armv8-a
TARGET_CPU_VARIANT := generic
TARGET_2ND_ARCH := arm
TARGET_2ND_ARCH_VARIANT := armv7-a-neon
TARGET_2ND_CPU_ABI := armeabi-v7a
TARGET_2ND_CPU_ABI2 := armeabi
TARGET_2ND_CPU_VARIANT := cortex-a7
If you are building x64 TWRP then remove the remark # & update BoardConfig.mk accordingly. Take note, not available on android-4.4/ cm-11.0 base repo, use later base repo.
Code:
# un-remark the below required for kernel compiling if not using TARGET_PREBUILT_KERNEL
[COLOR="red"]#[/COLOR]grep -v linux-x86/arm/arm-eabi-4.6 ~/x > ~/x.tmp;mv ~/x.tmp ~/x
[COLOR="red"]#[/COLOR]grep -v linux-x86/arm/arm-eabi-4.7 ~/x > ~/x.tmp;mv ~/x.tmp ~/x
[COLOR="red"]#[/COLOR]grep -v linux-x86/arm/arm-eabi-4.8 ~/x > ~/x.tmp;mv ~/x.tmp ~/x
if you are building your own kernel then remove the remark #
Code:
# Optional for x86 SoC
[COLOR="Red"]#[/COLOR]grep -v linux-x86/x86/i686-linux-android-4.7 ~/x > ~/x.tmp;mv ~/x.tmp ~/x
[COLOR="red"]#[/COLOR]grep -v linux-x86/x86/x86_64-linux-android-4.8 ~/x > ~/x.tmp;mv ~/x.tmp ~/x
[COLOR="red"]#[/COLOR]grep -v linux-x86/x86/x86_64-linux-android-4.9 ~/x > ~/x.tmp;mv ~/x.tmp ~/x
Code:
TARGET_ARCH := [COLOR="blue"]x86[/COLOR]
TARGET_CPU_ABI := armeabi
TARGET_ARCH_VARIANT := [COLOR="blue"]x86[/COLOR]
TARGET_CPU_VARIANT := [COLOR="blue"]x86[/COLOR]
if you are building for Intel SoC then remove the remark # & edit the BoardConfig.mk accordingly
This script has been tested & it works on any base repo from OmniROM android-4.4, 5.0, 5.1 & 6.0 & Cyanogenmod cm-11.0, cm-12.0, cm12.1 & cm13.0 using Full-Source or Part-Source but why use Full-Source to build TWRP when Part-Source works, most importantly, you are not building OmniROM or Cyanogenmod but TWRP.... Using android-4.4/ cm-11.0 base repo has its advantage, compiled TWRP size will be smaller & it can build all version.
If you use android-6.0/ cm-13.0 then obviously you can only build TWRP android-6.0 only, just edit the line 62, 63 for OmniROM or 72, 73 for CM accordingly. Building TWRP android-4.4 on cm-13.0 or on OmniROM android-6.0 will result in a build error ! Later base repo won't build TWRP older version !
Many newbies doesn't know that OmniROM/ CM repo are incremental updates & they create a separate cm11, cm12, cm12.1, cm13 each & sync individually to each of these folders.
Above syncing cm-13.0 & as you can see, it is also using source from cm-10.1, 10.2 & 11. Syncing all to the same ~/omni or ~/cm folder will do.
Sometimes on certain devices, OmniROM android-4.4 or Cyanogenmod cm-11.0 base repo just won't boot then you can try by editing this line to android-5.0 or cm-12.0 & updating it will only take a very short time if you use Part-Source.
Menu 2
Device tree
This script will create a barebone minimal device tree for building TWRP. Anything less will result in a build error. It will create five files which is just sufficient to build a fully working TWRP using prebuilt kernel. It will build kernels too, just update the correct kernel config to BoardConfig.mk & remove the remark # needed projects for building kernels. However, i don't see the needs to build the same kernel with every TWRP new build, it will take a longer time to build, most importantly, you are not building a ROM.
Code:
PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/cm_[COLOR="blue"]device name that you have key-in[/COLOR].mk
AndroidProduct.mk
Code:
TARGET_ARCH := arm
TARGET_CPU_ABI := armeabi
TARGET_ARCH_VARIANT := armv7-a-neon
TARGET_CPU_VARIANT := [COLOR="blue"]cortex-a9[/COLOR] [COLOR="Red"]<= You only need to change this to suit your device[/COLOR]
BOARD_RECOVERYIMAGE_PARTITION_SIZE := [COLOR="Red"]0x105c0000[/COLOR] [COLOR="red"]<= You need to update this so that build will error out when the size exceed your recovery partition size[/COLOR]
BOARD_FLASH_BLOCK_SIZE := 131072
TARGET_PREBUILT_KERNEL := device/TD2/9300/kernel
BOARD_MKBOOTIMG_ARGS := --base 10000000 --pagesize 2048 --kernel_offset 00008000 --ramdisk_offset 01000000 --tags_offset 00000100
[COLOR="Blue"]#MTK common twrp flags[/COLOR] [COLOR="Red"]<= You only need to change the below flags to suit your device[/COLOR]
TW_NO_EXFAT := true
TWHAVE_SELINUX := true
TW_DISABLE_TTF := true [COLOR="red"]<= Will error out on TWRP android-6.0[/COLOR]
[COLOR="red"]#[/COLOR]TW_USE_TOOLBOX := true [COLOR="red"]<= You'll need extra projects for this flag, edit the script accordingly[/COLOR]
TW_NO_EXFAT_FUSE := true
TW_THEME := [URL="https://github.com/omnirom/android_bootable_recovery/blob/android-6.0/gui/Android.mk#l96-L100"]portrait_mdpi[/URL]
[COLOR="red"]#[/COLOR]RECOVERY_SDCARD_ON_DATA := true [COLOR="red"]<= For [URL="https://twrp.me/faq/datamedia.html"]data/media[/URL] device[/COLOR]
TW_USE_MODEL_HARDWARE_ID_FOR_DEVICE_ID := true
TARGET_USE_CUSTOM_LUN_FILE_PATH := "/sys/devices/platform/mt_usb/gadget/lun%d/file"
BoardConfig.mk
Code:
# Inherit device configuration
$(call inherit-product, device/[COLOR="blue"]TD2[/COLOR]/[COLOR="blue"]9300[/COLOR]/device_[COLOR="blue"]9300[/COLOR].mk)
## Device identifier. This must come after all inclusions
PRODUCT_DEVICE := [COLOR="blue"]9300[/COLOR]
PRODUCT_NAME := cm_[COLOR="blue"]9300[/COLOR]
PRODUCT_BRAND := [COLOR="blue"]TD2[/COLOR]
PRODUCT_MODEL := [COLOR="blue"]9300[/COLOR]
PRODUCT_MANUFACTURER := TD2
Code:
$(call inherit-product, build/target/product/[URL="https://github.com/CyanogenMod/android_build/blob/cm-11.0/target/product/full_base_telephony.mk"]full_base_telephony.mk[/URL])
# Time Zone data [COLOR="red"]<= This have been disable as some device will not boot, to enable it just remove the remark [B]#[/B] below[/COLOR]
[COLOR="red"]#[/COLOR]PRODUCT_COPY_FILES += \
[COLOR="Red"]#[/COLOR]bionic/libc/zoneinfo/tzdata:recovery/root/system/usr/share/zoneinfo/tzdata
PRODUCT_BUILD_PROP_OVERRIDES += \
PRODUCT_MODEL="i9300" \ [COLOR="Red"]<= This is where Menu 2 will get the ro.product.device & ro.product.model info[/COLOR]
TARGET_DEVICE="bird77_a_cu_ics2"
PRODUCT_NAME := full_[COLOR="Blue"]9300[/COLOR]
PRODUCT_DEVICE := [COLOR="blue"]9300[/COLOR]
device_(device-name).mk & cm.mk will be auto-created based on what you have key-in for the vendor & device name at Menu 2
For building recovery, you don't need to use full.mk, using it will result in need of extra projects on the Part-Source & it will also copy the extra fstab.goldfish & ueventd.goldfish.rc to the root of the ramdisk
Code:
# mount point fstype device [device2]
/boot emmc /dev/bootimg
/recovery emmc /dev/recovery
/system ext4 /dev/block/mmcblk0p3
/cache ext4 /dev/block/mmcblk0p4
/data ext4 /dev/block/mmcblk0p5
/emmc vfat /dev/block/mmcblk0p6 flags=display="Phone Storage";settingsstorage
/sdcard vfat /dev/block/mmcblk1p1 flags=display="SD Card";storage;removable
/sd-ext auto /dev/block/mmcblk1p2
/nvram emmc /dev/nvram flags=display="Nvram";backup=1
/uboot emmc /dev/uboot flags=display="Uboot";backup=1
#/boot emmc /dev/block/platform/mtk-msdc.0/by-name/boot flags=display="Boot";backup=1
#/recovery emmc /dev/block/platform/mtk-msdc.0/by-name/recovery flags=display="Recovery";backup=1
#/system ext4 /dev/block/platform/mtk-msdc.0/by-name/system flags=display="System";backup=1
#/cache ext4 /dev/block/platform/mtk-msdc.0/by-name/cache flags=display="Cache"
#/data ext4 /dev/block/platform/mtk-msdc.0/by-name/userdata flags=encryptable=/dev/block/platform/mtk-msdc.0/by-name/metadata
#/nvram emmc /dev/block/platform/mtk-msdc.0/by-name/nvram flags=display="Nvram";backup=1;flashimg=1
#/external_sd auto /dev/block/mmcblk1p1 flags=display="External SDcard";storage;wipeingui;removable;backup=0
#/usbotg auto /dev/block/sda1 flags=display="Usb-Otg";storage;removable;backup=0
#/boot mtd boot
#/recovery mtd recovery
#/cache yaffs2 cache
#/data yaffs2 userdata
#/misc mtd misc
#/system yaffs2 system
#/sdcard vfat /dev/block/mmcblk0p1
#/sd-ext ext4 /dev/block/mmcblk0p2
recovery.fstab - Edit or delete whatever that is not relevant to your device. Use osm0sis AIK to unpack your stock recovery.img & TWRP-ify the recovery.fstab... :good:
Code:
#
# Copyright (C) 2013 Intel Mobile Communications GmbH
#
# Sec Class: Intel Confidential (IC)
#
# Android fstab file.
#<src> <mnt_point> <type> <mnt_flags and options> <fs_mgr_flags>
# The filesystem that contains the filesystem checker binary (typically /system) cannot
# specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK
#
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID068 /system ext4 defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID069 /data ext4 defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID070 /cache ext4 defaults defaults
/dev/block/mmcblk1p1 /sdcard vfat defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID076 /nvm_fs_partition ext4 defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID074 /misc emmc defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID071 /boot emmc defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID119 /recovery emmc defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID120 /recoverym emmc defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID001 /mobilevisor emmc defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID013 /splash_screen emmc defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID115 /mvconfig emmc defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID118 /secvm emmc defaults defaults
Most latest Android devices are using fstab version 2 AKA fstab 2 while TWRP is using fstab 1. Eg. Above is my Intel X3 stock recovery.fstab
Code:
# mount point fstype device [device2]
/boot emmc /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID071
/recovery emmc /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID119 flags=display=recovery;backup=1
/imei emmc /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID022 flags=display=imei;backup=1
/mobilevisor emmc /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID001 flags=display=mobilevisor;backup=1
/mvconfig emmc /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID115 flags=display=mvconfig;backup=1
/secvm emmc /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID118 flags=display=secvm;backup=1
/system ext4 /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID068
/data ext4 /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID069
/cache ext4 /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID070
/nvm_fs_partition ext4 /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID076
/external_sd vfat /dev/block/mmcblk1p1 flags=display="Micro SDCard";storage;removable
/usbotg auto /dev/block/sda1 flags=display=USB-OTG;storage;removable
My TWRP-ify recovery.fstab. Typically, for ext4 partition, you don't need to specify flags=display= & backup=1, it will be taken care of by TWRP, for more info regarding fstab flags then refer to Main Thread for *RECOVERY.FSTAB*... :good:
RD osm0sis's unpackbootimg is able to extract --second <2ndbootloader-filename> & also --second_offset <address>
The repack arguments will be auto-updated to the BoardConfig.mk Thanks to RD osm0sis. Some TWRP flags ref taken from here... :good:
osm0sis's unpackbootimg also support --dt <filename> :good:
Some devices require additional info for factory update.zip then add it accordingly to the device tree, typically is your device_(device-name).mk. Look at other device tree here & here & here for reference. On CM base repo, you can also use mkvendor.sh... :good: However, you will need to manually edit certain files as no DEV has been updating it, currently it will result in a build error even when using Full-Source !
Do take note that even an extra space on some of the lines at BoardConfig.mk will result in a build error !
Menu 3
Below are the commands to build TWRP, thats it !
Code:
cd ~/omni
[COLOR="blue"]OR[/COLOR]
cd ~/cm
prebuilts/misc/linux-x86/ccache/ccache -M 25G
export USE_CCACHE=1
export LC_ALL=C
source build/envsetup.sh
lunch [COLOR="blue"]omni[/COLOR]_S939-eng [COLOR="blue"]<= S939 is the device name[/COLOR]
[COLOR="Blue"]OR[/COLOR]
lunch [COLOR="blue"]cm[/COLOR]_S939-eng
make -j4 recoveryimage
Menu 4
Below command generically will work on most Android devices. Updates : Has updated this menu to support this, just key-in /path-to-your-device-recovery-partition
Code:
adb push [COLOR="blue"]$OUT[/COLOR]/recovery.img /data/local/tmp
adb shell su -c "dd if=/data/local/tmp/recovery.img of=/[COLOR="blue"]path-to-your-device-recovery-partition[/COLOR]"
To use the $OUT path, you must first source it then lunch your device name, refer to previous Menu 3 for info.
Menu 5
Option 1 is make clean
Option 2 is wipe the whole repo base folder except the hidden .repo folder. As mention on the script GUI front-end, after that, use Menu 1 will have all the files extracted out.
Menu 6
This menu is using curl to create github repo.
It is for you to publish your device tree either for diagnostic & debugging when you ask for help. It is also for you to share a working build so that others can refer to it when they make a build of their own or git clone yours & build it themselves.
Preface & Credits
Many newbies make mistake by using other DEV's device tree which is normally meant for building ROMs, using it to build TWRP therefore will result in alot of build errors !
Above script can also be use to build TWRP for any Android devices that uses standard Android header, except for Menu 4 which is specifically for MTK devices only. Just edit the script to add support for your device... :good: Updated support for other devices
This project was actually started way back at 2013 & this is the main reason why TWRP doesn't build is bcos of the tedious, confusing & wrong Build Environment setup, it is all so different on so many different linux distros & OSes version, i went on to developed Easy Magic TWRP.... Now i use Intel device & this script did build a working TWRP for it too.... :laugh:
That's why i strongly recommends BBQLinux for beginners, Thanks to RD codeworkx, i can guarantee that any Build Error is not cause by wrong BE setup as its already built-in on BBQLinux... :good:
The other reason TWRP doesn't boot is bcos of wrong mkbootimg repack arguments, Thanks to RD osm0sis for his awesome unpackbootimg... :good:
Since many newbies are having problems with building TWRP & flooding the TWRP thread here
Dees_Troy said:
This guide isn't going to be a step-by-step, word-for-word type of guide. If you're not familiar with basic Linux commands and/or building in AOSP then you probably won't be able to do this.
Click to expand...
Click to collapse
Which is actually meant for intermediate users, i've offered to share this script when OP decided to open up a new thread here for TWRP flags.... :good:
Credits Updates
Hacker432 for testing & feedbacks on this script, now it uses the ATC folder so that it'll support other languages other than English & TWRP will boot now when build on cm-12.1 base repo... :good:
OP for giving this script a glamour name ATC aka AIO-TWRP-Compiler... :laugh: :highfive: :good:
My TWRP doesn't boot
Try unpack/ repack your stock 3e recovery.img with AIK, push it to your device & if it doesn't boot then obviously your device is not using standard Android header & so does this script will not build a bootable TWRP. Try google your device info on how they did it, Eg. Sony devices uses BOARD_CUSTOM_BOOTIMG_MK for repacking boot & recovery.img & update it accordingly to your BoardConfig.mk
Code:
adb shell cat /proc/last_kmsg
[COLOR="Blue"]OR[/COLOR]
adb shell cat /proc/last_kmsg > kmsg.txt
[U][COLOR="blue"]On Android-6.0 Marshmallow[/COLOR][/U]
adb shell cat /sys/fs/pstore/console-ramoops
[COLOR="blue"]OR[/COLOR]
adb shell cat /sys/fs/pstore/console-ramoops > kmsg.txt
Source
Extreme minimal, TWRP require this only one flag TW_THEME := to build or it will error out. You will also need other flags as well, refer to the OP. Some devices won't boot when certain TWRP flag is used or not used bcos its not compatible with your device kernel ! Most legacy device doesn't support TTF & TWRP won't boot so you have to build with TWRP android-5.1 with TW_DISABLE_TTF := true flag
Code:
[URL="https://github.com/TeamWin/android_device_kazam_thunder_q45/blob/cm-10.2/BoardConfig.mk#l49"]TW_NO_EXFAT := true[/URL] [COLOR="Red"]<= To disable exfat[/COLOR]
[URL="https://github.com/TeamWin/android_device_kazam_tornado_348/blob/android-4.4/BoardConfig.mk#l50"]TW_NO_EXFAT_FUSE := true[/URL] [COLOR="Red"]<= To disable exfat[/COLOR]
[URL="https://github.com/carliv/device_elephone_p6000/blob/cm-11.0/BoardConfig.mk#l110"]TW_USE_TOOLBOX := true[/URL] [COLOR="red"]<= Using this flag will use toolbox instead of busybox[/COLOR]
Above are some of the flags that can cause TWRP not to boot up. If you are using Part-Source then you need to add additional projects to support these flags as most of them are disabled on the script. Just remove the remarks # from the script for that particular projects. More detail info refer to above post #11 Part-Source.
Refer to the most bottom Bug Report on how to obtain recovery.log, without it nobody is able to help you.
Code:
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-6.0/minuitwrp/Android.mk#l122-l130"]TARGET_RECOVERY_PIXEL_FORMAT := ABGR_8888[/URL]
TARGET_RECOVERY_PIXEL_FORMAT := RGBX_8888
TARGET_RECOVERY_PIXEL_FORMAT := BGRA_8888
The other reason it doesn't boot is that it actually does boot up but the screen is blank ! Try adb shell & it should work on this scenario.
Try different pixel format one at a time, one of them should work.
Code:
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-6.0/minuitwrp/Android.mk#l114-l116"]TARGET_RECOVERY_FORCE_PIXEL_FORMAT := RGB_565[/URL]
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-6.0/minuitwrp/Android.mk#l79"]RECOVERY_GRAPHICS_FORCE_USE_LINELENGTH := true[/URL]
[URL="https://gerrit.omnirom.org/#/c/13948/"]TW_DISABLE_DOUBLE_BUFFERING := true[/URL]
When not setting any pixel format, the default is RGB565 & it should work on most Android devices. You can also try the above when non of them works.
Code:
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-6.0/minuitwrp/Android.mk#L14-L19"]TW_BOARD_CUSTOM_GRAPHICS[/URL]
If your existing device tree uses this & all the above doesn't work then drop by at TWRP IRC channel to get further help.
Source
Miscellaneous Tips
As mentioned many times, most of the time build error is bcos of wrong BE setup, use BBQLinux & you'll get over it. If you have already build on other distro then refer to here on how to use this script or migrate the source code .repo to BBQLinux.
Code:
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/variables.h#l173"]TARGET_USE_CUSTOM_LUN_FILE_PATH[/URL]
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l828"]TW_BRIGHTNESS_PATH[/URL] [COLOR="blue"]<= If not define, TWRP will look for it [URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l840-l841"]here[/URL][/COLOR]
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l855"]TW_SECONDARY_BRIGHTNESS_PATH[/URL]
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l1076"]TW_MAX_BRIGHTNESS[/URL] [COLOR="blue"]<= If not define, TWRP will [URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l56-l58"]set it[/URL][/COLOR]
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l967"]TW_CUSTOM_BATTERY_PATH[/URL] [COLOR="Blue"]<= If not define, TWRP will use [URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l972"]this[/URL] or [URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l986"]this[/URL] [/COLOR]
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l937"]TW_CUSTOM_CPU_TEMP_PATH[/URL] [COLOR="blue"]<= if not define, TWRP will use [URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l942"]this[/URL][/COLOR]
TWRP has everything specified to standard Android path unless when it doesn't work then you'll need to find that out yourself. Do take note that some device doesn't support certain feature such as CPU temperature, battery level, mount USB storage & etc then refer to the OP for flags to disable it.
Code:
adb shell su -c "ls -R" > [COLOR="Blue"]myAndroid.txt[/COLOR]
Above command will list out everything on your device.
Code:
adb shell su -c cat /sys/class/power_supply/battery/capacity
[COLOR="blue"]88[/COLOR]
Eg. Say the battery capacity doesn't work then look for that path at myAndroid.txt for something that says battery/capacity & specify it at BoardConfig.mk
Code:
adb shell cat /sys/class/thermal/thermal_zone0/temp
[COLOR="Blue"]27516[/COLOR]
If CPU temperature doesn't work then look for thermal/temp
Code:
adb shell
su
echo 0 > /sys/devices/platform/i2c-gpio.24/i2c-24/24-002c/backlight/lcd-backlight/brightness
echo 255 > /sys/devices/platform/i2c-gpio.24/i2c-24/24-002c/backlight/lcd-backlight/brightness
If brightness doesn't work, look for lcd-backlight/brightness, Eg. above command should be able to change the level of brightness if that is the correct path as indicated at myAndroid.txt.
Sync corruption
git & repo is like a Super Intelligent Source Code Auto-Resume Downloader when working together . . . :good:
You can stop it at any time, restart it back & it will auto-resume. cm repo & source code is located at ~/cm/.repo, omni at ~/omni/.repo it is a hidden folder & to view hidden folder via File Manager, you need to press Ctrl + h
Sometimes you have corruption then repo sync wouldn't work & normally you just need to delete manifests, manifests.git, manifests.xml with a repo init & repo sync then you'll be back to normal.
If still this doesn't solve the problem then delete everything EXCEPT the folder project-objects & projects, both of this is the actual source code folder.
After this a repo init then repo sync & everything will be back to normal, i guarantee, done this many times, no worries . . . :laugh:
Sometimes when you have severe data corruption, above technique will not work then manually cd ~/cm or ~/omni then repo init then repo sync & see what repo & git has to say then follow the on-screen instructions to remove the corrupted projects.
Scroll back up & see what the error was, remove the corrupted project then repo sync. In this case is rm -rf ~/cm/.repo/projects/prebuilts/clang/linux-x86/host/3.5.git
Subsequent sync show above error. rm -rf ~/cm/.repo/project-objects/CyanogenMod/android_external_icu.git
rm -rf ~/cm/.repo/projects/external/jemalloc.git
rm -rf ~/cm/.repo/projects/system/extras/su.git
rm -rf ~/cm/.repo/projects/external/libcxx.git
rm -rf ~/cm/.repo/projects/external/libcxxabi.git
rm -rf ~/cm/.repo/projects/external/libunwind.git
rm -rf ~/cm/.repo/project-objects/CyanogenMod/android_external_busybox.git
And finally all corrupted projects has been removed, subsequent repo sync & all files will be auto-extracted out.
Corrupted .repo folder
i've make a back up of my .repo folder using tar.gz compression years ago & when extracting out, normally will end with data corruptions except if you use lrzip... :good: You will need to manually remove all the text files such as hooks, pre-auto-gc & commit-msg which is supposed to be a symlink files.
After you force overwrite extraction, a repo init & repo sync will end with above message.
You will need to manually delete all the hooks.txt file found at .repo folder
You will need to manually delete all the commit-msg.txt file
You will need to manually delete all the pre-auto-gc.txt file. You might need to repo sync --force-sync many times to overwrite all the corrupted projects & after that, you won't be getting any of these error messages again.
Syncing work tree error - Doesn't check out all files
This operation must be run in a work tree
Run the below command will give you hint
Code:
repo --trace sync -l
Above hints the corrupted projects so remove it => rm -rf /home/yuweng/cm/.repo/projects/frameworks/ex.git
repo sync still it doesn't extract out all the files so you need to run repo --trace sync -l again. Delete the hinted project => rm -rf /home/yuweng/cm/.repo/projects/frameworks/webview.git
When all error has been fixed, a repo sync & all the files will be extracted out correctly
Source
Bug report
Zip & attach the ~/AIO-TWRP-Compiler/compile.log to your post when replying.
Refer to here on how to submit a proper TWRP bug report . . . :good:
How to obtain recovery log
adb pull /tmp/recovery.log -> Attach to your post
At TWRP -> BackUp -> After Backup go to Advanced -> Copy Log to SDCard
Typically you will find the recovery.log at
Typical Internal SdCard
/emmc/TWRP/BACKUPS/ [Your Device Name] / [Backup date] [ro.mediatek.version.release]
/data/media
/data/media/0
or
Typical External SdCard
/sdcard/TWRP/BACKUPS/ [Your Device Name] / [Backup date] [ro.mediatek.version.release]
Attach it to your post.
At TWRP console (Square button at button) -> You can view the log
If TWRP crash when executing certain menu/ function/ feature then you can use My Master Shifu _that gdb technique for debugging & submit the back trace to Teamwin so that they can fix it... :good:
Try IRC channel to get help directly, prepare all required info such as recovery.log, compile.log & android log, refer to here for the best timing . . .
TWRP FAQ
@yuweng the script has really been thought over for a long time and you also have put in tons of work in it. Thanks for it man!
Thanks bro... :highfive: The script initially includes BE setup for Ubuntu that includes setting up of Python, Java, Make, Git, build packages, adb rules & etc, now its half the size bcos we don't need to do all that on BBQLinux... It has went thru alot of revision, i lost track, one has PhilZ Touch on it, one revision will detect the device info such as graphics resolution, emmc or /data/media device & etc, you can actually do wonders with adb shell, automated alot of stuff for BoardConfig.mk, all in all, this script has about 4 years of work in it...
yuweng said:
Thanks bro... :highfive: The script initially includes BE setup for Ubuntu that includes setting up of Python, Java, Make, Git, build packages, adb rules & etc, now its half the size bcos we don't need to do all that on BBQLinux... It has went thru alot of revision, i lost track, one has PhilZ Touch on it, one revision will detect the device info such as graphics resolution, emmc or /data/media device & etc, you can actually do wonders with adb shell, automated alot of stuff for BoardConfig.mk, all in all, this script has about 4 years of work in it...
Click to expand...
Click to collapse
4 YEARS!!!! @Dees_Troy, @bigbiff, @_that this guy deserves a medal! And about the BE Setup, my good friend @thewisenerd had made an Android compiler which included a rather fancy dependencies check in a python program. I'll include it into AIO-TWRP-COMPILER as soon as I finish my school work for the week
Haha, they are all my Master Shifu's & they all have more experience than me on TWRP... :laugh: You are most welcome to add-in new features to it... :good:
yuweng said:
Haha, they are all my Master Shifu's & they all have more experience than me on TWRP... :laugh: You are most welcome to add-in new features to it... :good:
Click to expand...
Click to collapse
Experience?? They're encyclopedias on TWRP. But it's worthless if every humbug on the planet wants to compile it and doesn't even know what "ls -R " is supposed to do You're being a great help to everyone. I'll try and get them to try this when I can make it compatible for people who have already downloaded the source
Actually its quite easy but then again any wrong BE setup will result in build error that's why i strongly recommends BBQLinux for starters, its as easy as Ubuntu to setup, i can guarantee many will like the UI, Thanks to RD codeworkx.... :good:
Code:
mkdir ~/omni
cp -[COLOR="Blue"]R[/COLOR]f /path-to-your-existing-omnirom-folder/.repo ~/omni
[COLOR="blue"]OR[/COLOR]
mkdir ~/cm
cp -[COLOR="blue"]R[/COLOR]f /path-to-your-existing-cm-folder/.repo ~/cm
Remark or delete these lines & it'll work...
Updates - Migrating source code .repo to BBQLinux
So far my experience is that only lrzip is able to compress & extract source code .repo folder without data corruption... :good: Just open Ubuntu Nautilus File Manager & delete everything on your cm or omnirom except the hidden folder .repo
This hidden .repo folder is where the actual source code are, zipping it will be enough for migration, a repo init & repo sync will have all the files extracted out on BBQLinux ...
Code:
sudo apt-get install lrzip
cd /path-to-your-existing-[COLOR="Blue"]omnirom[/COLOR]-or-[COLOR="blue"]cm[/COLOR]-folder
lrztar -l .repo [COLOR="Blue"]<= Will take 10 to 20 minutes depending on your PC CPU, RAM & HDD[/COLOR]
[COLOR="blue"][U]To unzip it[/U][/COLOR]
copy [COLOR="Blue"].repo.tar.lrz[/COLOR] to [COLOR="Blue"]~/omni[/COLOR] or [COLOR="blue"]~/cm[/COLOR] folder accordingly
cd [COLOR="Blue"]~/omni[/COLOR] or [COLOR="blue"]~/cm[/COLOR]
lrzuntar .repo.tar.lrz
MSF Jarvis said:
Experience?? They're encyclopedias on TWRP. But it's worthless if every humbug on the planet wants to compile it and doesn't even know what "ls -R " is supposed to do[emoji14]You're being a great help to everyone. I'll try and get them to try this when I can make it compatible for people who have already downloaded the source
Click to expand...
Click to collapse
I don't know what it does but I compiled twrp(2.8.7.0 because twrp 3 doesn't want to work with my phone)In one month of work xD
yuweng said:
Actually its quite easy but then again any wrong BE setup will result in build error that's why i strongly recommends BBQLinux for starters, its as easy as Ubuntu to setup, i can guarantee many will like the UI, Thanks to RD codeworkx.... :good:
Code:
mkdir ~/omni
cp -rf /path-to-your-existing-omnirom-repo/.repo ~/omni
[COLOR="blue"]OR[/COLOR]
mkdir ~/cm
cp -rf /path-to-your-existing-cm-repo/.repo ~/cm
Remark or delete these lines & it'll work...
Click to expand...
Click to collapse
I use Ubuntu and I had several issues
Luckily I can compile without problems now
Thanks for your work
Inviato dal mio HUAWEI Y550-L03 utilizzando Tapatalk
AIO TWRP Compiler wiki
@yuweng, I have started writing down the wiki for this script at the Github repository. Would be grateful if you started writing the things you have mentioned here in that as well, and I'll proof-read it later on and also keep writing things myself
Dear friends,
I really need your help compiling PureNexus for Manta. Here is what I did:
1) set up the environment. I'm fairly sure that I did this right, on Ubuntu 16.04. I installed the required libs, openjdk7, android sdk, set the PATH, installed repo ofc.
2) created a folder for the project, did the repo init as specified in the github manifest:
Code:
repo init -u https://github.com/PureNexusProject/manifest.git -b mm2
Next, before doing a repo sync, I added a local manifest in .repo/local_manifests/local_manifest.xml, with the following content:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="gh" fetch="git://github.com/" />
<project path="kernel/samsung/manta" name="CyanogenMod/android_kernel_samsung_manta" remote="gh" revision="cm-13.0" />
<project path="device/samsung/manta" name="CyanogenMod/android_device_samsung_manta" remote="gh" revision="cm-13.0" />
<project path="vendor/samsung/manta" name="TheMuppets/proprietary_vendor_samsung" remote="gh" revision="cm-13.0" />
</manifest>
This is what I was able to find regarding manta. I added the device tree and kernel from Cyanogen's, and the vendor stuff from TheMuppets.
3) repo sync -j5 successfully downloaded everything, so it was build time!
4) As manta is not officially supported, I had to add and edit a few things here and there:
4.1) in vendor/nexus/products/AndroidProducts.mk I added this code:
Code:
ifeq (nexus_manta,$(TARGET_PRODUCT))
PRODUCT_MAKEFILES += $(LOCAL_DIR)/nexus_manta.mk
endif
4.2) next I actually created the nexus_manta.mk. I copied and adapted the flounder one, it ended up like this:
Code:
#Include Pure Nexus tablet configuration
include vendor/nexus/configs/nexus_tablet.mk
# Inherit AOSP device configuration for flounder
$(call inherit-product, device/samsung/manta/aosp_manta.mk)
# Override AOSP build properties
PRODUCT_NAME := nexus_manta
PRODUCT_BRAND := Google
PRODUCT_DEVICE := manta
PRODUCT_MODEL := Nexus 10
PRODUCT_MANUFACTURER := Samsung
# Device Fingerprint
PRODUCT_BUILD_PROP_OVERRIDES += \
PRODUCT_NAME=mantaray \
BUILD_FINGERPRINT=google/mantaray/manta:6.0.1/MOB30P/2960889:user/release-keys \
PRIVATE_BUILD_DESC="mantaray-user 6.0.1 MOB30P 2960889 release-keys"
4.3) finally i edited vendor/nexus/vendorsetup.sh to add this line at the end:
Code:
add_lunch_combo nexus_manta-user
5) After this I did:
Code:
. build/envsetup.sh
lunch
picked number 31, nexus_manta-user, all seemed fine.
6) Time to build, "brunch manta". This won't end up well, the current issue is:
Code:
make: * No rule to make target '/home/android/android/system/out/target/product/manta/obj/SHARED_LIBRARIES/libinvensense_hal_intermediates/export_includes', needed by '/home/android/android/system/out/target/product/manta/obj/SHARED_LIBRARIES//import_includes'. Stop.
make: * Waiting for unfinished jobs....
I must admit that manta and exynos 5 arent really popular, cause I often never found anything useful.
Anyway, I'm stuck there, but in the next post I'll add something that I tried to get started again, but didn't work out.
Thank you so much everyone,
TD
The error told you the issue
manta make file requested libinvensense_hal and your build has no Android.mk claiming to build such a thing
i published instructions a while go to build manta M, try following those to start with
dmitrygr said:
The error told you the issue
manta make file requested libinvensense_hal and your build has no Android.mk claiming to build such a thing
i published instructions a while go to build manta M, try following those to start with
Click to expand...
Click to collapse
Wow that is a completely different execution step by step.... Hopefully the mix of the two will produce something.... Thanks man!
dmitrygr said:
The error told you the issue
manta make file requested libinvensense_hal and your build has no Android.mk claiming to build such a thing
i published instructions a while go to build manta M, try following those to start with
Click to expand...
Click to collapse
Mate do you think that you can help me with this new error?
I can't really understand how it can happen, since it's not really on a part of code that is related to Manta, isn't it?
Code:
frameworks/av/media/libstagefright/codecs/mp3dec/SoftMP3.cpp:268:17: error: format specifies type 'unsigned long' but the argument has type 'OMX_U32'
(aka 'unsigned int') [-Werror,-Wformat]
Thank you so much,
TD
tylerdurden83 said:
Mate do you think that you can help me with this new error?
I can't really understand how it can happen, since it's not really on a part of code that is related to Manta, isn't it?
Code:
frameworks/av/media/libstagefright/codecs/mp3dec/SoftMP3.cpp:268:17: error: format specifies type 'unsigned long' but the argument has type 'OMX_U32'
(aka 'unsigned int') [-Werror,-Wformat]
Thank you so much,
TD
Click to expand...
Click to collapse
Did you ever manage to fix this? I'm having the same error trying to build AOSP6 for a different device (lt03wifi, Galaxy Note 10.1 2014).
it is just a type mismatch. this particular one is harmless on a 32-bit arm device (sizes are same)
fix it in source code (cast to int)
Below are some guides on how to build your very own ROMs and Kernels for the Samsung Galaxy Note Edge gsm versions.
XDA is a great community that has taught me so much that I want to share what little I know with you, so you may also build roms and kernels on your own. As a long time follower of XDA, last year I decided to gen an account so I could start contributing and also so I could start thanking people for thier great work.
I started out on the Motorola Flipside, and quickly moved on to the Samsung Captivate Glide, where guys like @bubor and @steadfasterX were not only doing great work, but were willing to share thier knowledge. By God's grace, I made some roms and kernels for the Samsung Galaxy S4, and now for the Note Edge.
All of my work can also be seen in more detail at https://thealaskalinuxuser.wordpress.com/
These guides are specifically built for the Note Edge, but in principle are applicable in any phone/rom/kernel.
In this guide, I am using Ubuntu 14.04. You can use virtual box, virtual machine, or any other method, but I used it installed on the computer.
Post #1. Introduction and table of contents.
Post #2. Rom - How to build AOKP 6.0 for the Galaxy Note Edge (TBLTEXX).
Post #3. Rom - How to add apps to your rom.
Post #4. Rom - How to change the default background in your source.
Post #5. kernel - How to build just a kernel from a rom source.
Post #6. kernel - How to build just a kernel stand alone.
Post #7. Kernel - How to break down and make boot images.
Post #8. kernel - How to add CPU/GPU Governors.
Post #9. kernel - How to Overclock/Undervolt.
Post #10. kernel - "How to" on special projects like sound mods.
Post #2. Rom - How to build AOKP 6.0 for the Galaxy Note Edge (TBLTEXX).
Post #2. Rom - How to build AOKP 6.0 for the Galaxy Note Edge (TBLTEXX).
Step by step instructions for building AOKP 6.0 for the international variant of the Samsung Galaxy Note Edge
This is adapted from my previous writeup on building AOKP 6.0 for the T-Mobile variant of the Samsung Galaxy S4:
http://forum.xda-developers.com/gal...uide-step-step-instructions-building-t3402637
I have noticed that the build instructions on the AOKP website are a bit outdated. They date back to JellyBean. I would like to encourage other users to build more custom roms, and I thought that it would help if I show how to build one of the roms wich compiled successfully for me (Praise God!). It is my hope that these instructions are clear and easy to follow. Hey, if I can do it, anybody can do it!
<<<<< Step 1: Setup your system. >>>>>
To be honest, this can be the most daunting part, because if you do not set this up properly, it just will not work. I use Ubuntu 14.04 on a HP Compaq 6715b laptop. I know, not a very ideal compiler, but it is what I've got. Here are the suggested packages, just open a terminal and paste this in:
Code:
$ sudo apt-get install bison build-essential bzip2 curl dpkg-dev flex g++-multilib git git-review gnupg gperf lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev openjdk-7-jdk libbz2-1.0 libbz2-dev libc6-dev libghc-bzlib-dev libgl1-mesa-dev libgl1-mesa-glx:i386 libncurses5-dev libreadline6-dev libreadline6-dev:i386 libx11-dev:i386 libxml2-utils lzop maven pngcrush pngquant python-markdown schedtool squashfs-tools tofrodos x11proto-core-dev xsltproc zip zlib1g-dev zlib1g-dev:i386
This will take a while. Once it is done, do this:
Code:
$ mkdir ~/bin && curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo && chmod a+x ~/bin/repo
$ gedit ~/.bashrc
Now you should see gedit open up your .bashrc file, to which you should add this at the very end, and save it:
Code:
export PATH=~/bin:$PATH
Now you need to close your terminal and open a new one to get the PATH variables to stick. Actually, it wouldn't hurt to reboot your system after installing all of those programs we just installed. Your computer should now be primed and ready to go.
<<<<< Step 2: Download the source. >>>>>
Here is a very short project for you that takes the computer a long time to complete. Open a terminal and start typing:
Code:
$ cd ~
$ mkdir aokp6
$ cd aokp6
$ repo init -u https://github.com/AOKP/platform_manifest.git -b mm
$ repo sync
You can now go outside, play with the kids, phone a friend, and then go to bed. When you awake the next morning, this might be done, depending on your internet connection!
<<<<< Step 3: Adding the device, kernel, and vendor trees. >>>>>
In some cases, you can simply type the command
Code:
$ breakfast
and just choose your device, but at this time, the AOKP repository did not include a current device tree for the TBLTEXX phone, so we need to download one. Later, perhaps we can learn about adding them as dependencies or in your manifests, but for now, here are the links to download them, which will help you understand how this works, follow the link, and click the download button to download the zips. Yes some of these are from AOKP for other files you need. Be sure to grap the MM branch for this guide. There are now newer Nougat branches, which works the same as well, but this guide was written from MM.
https://github.com/alaskalinuxuser/device_samsung_tbltexx
https://github.com/alaskalinuxuser/kernel_samsung_tblte
https://github.com/alaskalinuxuser/device_samsung_tblte-common
https://github.com/alaskalinuxuser/device_samsung_qcom-common
https://github.com/AOKP/device_qcom_common
https://github.com/alaskalinuxuser/tblte_vendor_samsung
Once you have downloaded them, unzip each one and rename them:
aokp_device_samsung_tbltexx --> "tbltexx" (Place in aokp/device/samsung/ )
aokp_device_samsung_tblte-common --> "tblte-common" (Place in aokp/device/samsung/ )
aokp_device_samsung_qcom-common --> "qcom-common" (Place in aokp/device/samsung/ )
device_qcom_common --> "common" (Place in aokp/device/qcom/ )
tblte_vendor_samsung --> "samsung" (Place in aokp/device/samsung/ )
kernel_samsung_tblte --> "tblte" (Place in aokp/kernel/samsung/ )
You may have to make the folders that they go into.
Now you should probably take a break before going on to the next step!
<<<<< Step 4: Editing the device, kernel, and vendor trees. >>>>>
Now, go to the device/samsung/tblte-common folder and make any edits you want. It should work just the way that it is currently. This is where you could add apps, change features of your phone, etc. See the following posts for guides on doing that.
Note: Because repositories are constantly updated, I can only garuntee that this will work based on the files as they were the day of this writing. However, with all of this in place, if you follow this guide, it should work realatively the same as it did for me.
Now that all of the hard work is done, it is time to actually build something!
<<<<< Step 5: Start your build! >>>>>
Phew! You have invested a lot of hours into this project, now it is time to actually put those files and time to use! Open up a terminal in your aokp6 folder and start typing:
Code:
$ . build/envsetup.sh
Which will output something like this:
Code:
including vendor/aokp/vendorsetup.sh
including sdk/bash_completion/adb.bash
including vendor/aokp/bash_completion/git.bash
including vendor/aokp/bash_completion/repo.bash
Now type:
Code:
$ brunch tbltexx
Which will start the long build process, it will output this:
Code:
including vendor/aokp/vendorsetup.sh
Got local manifest
Got local manifest
Checked dependency tree over :
NO_DEPS: device/*/tbltexx
============================================
PLATFORM_VERSION_CODENAME = REL
PLATFORM_VERSION = 6.0.1
AOKP_VERSION = aokp_tbltexx_mm_unofficial_2016-10-27_1015
TARGET_PRODUCT = aokp_tbltexx
TARGET_BUILD_VARIANT = userdebug
TARGET_BUILD_TYPE = release
TARGET_BUILD_APPS =
TARGET_ARCH = arm
TARGET_ARCH_VARIANT = armv7-a-neon
TARGET_CPU_VARIANT = krait
TARGET_2ND_ARCH =
TARGET_2ND_ARCH_VARIANT =
TARGET_2ND_CPU_VARIANT =
HOST_ARCH = x86_64
HOST_OS = linux
HOST_OS_EXTRA = Linux-3.16.0-73-generic-x86_64-with-Ubuntu-14.04-trusty
HOST_BUILD_TYPE = release
BUILD_ID = MOB30J
OUT_DIR = /home/alaskalinuxuser/Documents/projects/phones/compile/aokp6/out
============================================
And this:
Code:
.....edited for space.....
Import includes file: /home/alaskalinuxuser/Documents/projects/phones/compile/aokp6/out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/import_includes
host C: libhost <= build/libs/host/CopyFile.c
build/libs/host/CopyFile.c:86:43: warning: unused parameter 'pSrcStat' [-Wunused-parameter]
static bool isSameFile(const struct stat* pSrcStat, const struct stat* pDstStat)
^
build/libs/host/CopyFile.c:86:72: warning: unused parameter 'pDstStat' [-Wunused-parameter]
static bool isSameFile(const struct stat* pSrcStat, const struct stat* pDstStat)
^
build/libs/host/CopyFile.c:104:42: warning: unused parameter 'src' [-Wunused-parameter]
static void printNotNewerMsg(const char* src, const char* dst, unsigned int options)
^
build/libs/host/CopyFile.c:531:69: warning: unused parameter 'isCmdLine' [-Wunused-parameter]
static int copyFileRecursive(const char* src, const char* dst, bool isCmdLine, unsigned int options)
.....edited for space..... Stuff like this will scroll by .....
Copy: /home/alaskalinuxuser/Documents/projects/phones/compile/aokp6/out/target/product/tbltexx/obj/STATIC_LIBRARIES/libext4_intermediates/libipt_LOG.c
Copy: /home/alaskalinuxuser/Documents/projects/phones/compile/aokp6/out/target/product/tbltexx/obj/STATIC_LIBRARIES/libext4_intermediates/libipt_MASQUERADE.c
Copy: /home/alaskalinuxuser/Documents/projects/phones/compile/aokp6/out/target/product/tbltexx/obj/STATIC_LIBRARIES/libext4_intermediates/libipt_MIRROR.c
Copy: /home/alaskalinuxuser/Documents/projects/phones/compile/aokp6/out/target/product/tbltexx/obj/STATIC_LIBRARIES/libext4_intermediates/libipt_NETMAP.c
target StaticLib: libip4tc (/home/alaskalinuxuser/Documents/projects/phones/compile/aokp6/out/target/product/tbltexx/obj/STATIC_LIBRARIES/libip4tc_intermediates/libip4tc.a)
target thumb C++: keystore <= system/security/keystore/keystore.cpp
target thumb C++: keystore <= system/security/keystore/keyblob_utils.cpp
target thumb C++: keystore <= system/security/keystore/operation.cpp
.....edited for space.....
Notice that there were some "warning" flags in there. Warnings are not all bad, but they can be. In this case it works out okay. Hopefully, after many hours, you should see this:
Code:
______ _____ __ __ _____
/\ _ \/\ __`\/\ \/\ \ /\ _ `\
\ \ \L\ \ \ \/\ \ \ \/'/'\ \ \L\ \
\ \ __ \ \ \ \ \ \ , < \ \ ,__/
\ \ \/\ \ \ \_\ \ \ \\`\ \ \ \/
\ \_\ \_\ \_____\ \_\ \_\\ \_\
\/_/\/_/\/_____/\/_/\/_/ \/_/
===========-Package complete-===========
zip: /home/alaskalinuxuser/Documents/projects/phones/compile/aokp6/out/target/product/tbltexx/aokp_tbltexx_mm_unofficial_2016-10-27_0149.zip
md5: 46bc18249c61988e75aba813464692a3
size: 324M
========================================
Success! Praise God! Now you can put this on your phone and test it out! Hopefully everything will be working! For future use, now you can start making changes or edits, from backgrounds to kernels! Have fun and make lots of backups. Remember, sometimes it is really hard to undo a change that you make.
Hopefully we learned how to set up our system, get the source, add devices and kernels that are not in the source, and run the compiler. Like I said, this works on my machine, as of this writing. You may notice, that if you make this build, it will not be identical to the one that I have posted on XDA. That is because I have made a few edits, additions, and/or subtractions here and there. That is the great thing about Android and open source! It is now up to you to make it better, to make it unique, or to make it you. Good luck with those builds, and be sure to share and help the next guy or gal with their projects too!
Post #3. Rom - How to add apps to your rom.
Post #3. Rom - How to add apps to your rom.
Here is the commit for when I did this to aokp_device_samsung_tblte-common:
https://github.com/alaskalinuxuser/...mmit/1ee34d6a1d5323a5ffb83eeeae7a87625f0eb130
I like to add the Kernel Adiutor app to my TBLTE (Samsung Galaxy Note Edge) builds. I used to put it in the vendor directory. What I realized though, is that I can simply add it to my tblte-common repository under the devices. For my device, I have a tbltexx repository, which essentially sets a few flags and passes the buck to the tblte-common repository for building. So, I actually added the app to my tblte-common repository. Now, when I sync, it updates my tblte-common directory, and keeps my prebuilt app!
Here is what I did.
Added some folders:
In my tblte-common repository (dev/samsung/tblte-common) I added a directory called "prebuilt". In keeping with Android's common structures, I then created these two folders: "common" and in that folder, one called "app".
When you are done making directories, it should have a path like this:
Code:
tblte-common/prebuilt/common/app
Now, in the "app" folder, I placed my prebuilt app, the Kernel Adiutor app, which I named "ka.apk". I then made an Android.mk file in the "prebuilt" folder that looks like this:
Code:
# Copyright (C) 2012 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
LOCAL_PATH := $(call my-dir)
#
# Prebuilt APKs
#
include $(CLEAR_VARS)
LOCAL_MODULE := ka
LOCAL_MODULE_OWNER := aokp
LOCAL_SRC_FILES := common/app/$(LOCAL_MODULE).apk
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := .apk
LOCAL_MODULE_CLASS := APPS
LOCAL_CERTIFICATE := PRESIGNED
include $(BUILD_PREBUILT)
You can add as many prebuilt apps as you want this way, just make the above block for each app. Then you simply add them to your tblte.mk file in the tblte-common directory. You can substitute your device name here, it should work the same. Notice that the lines which have more than one app have the "" denoting that there are more files to add. Then the last app line does not have a "". Pretty simple, right?
Code:
# WJH adding kernel adiutor apk and selinux plugin apk.
# These are found in tblte-common/prebuilt/common/app
PRODUCT_PACKAGES += \
ka \
selinuxplugin
Now, when you run your build, it will include the apps that you have added to the list and placed in your folder!
Post #4. Rom - How to change the default background in your source.
Post #4. Rom - How to change the default background in your source.
Sometimes you just want to change the background. So, download a custom background and edit the jpg until it was the right shape and size. I typically use Gimp for that. Then:
After making the jpg into a 1920x1280 jpg file, I then used my home built script to make all of the "default_wallpaper.jpg" files. Here is the script:
Code:
#!/bin/bash
echo "Changing name of jpg file."
mv *.jpg 1920x1280.jpg
echo "Converting to 1080x960"
convert -resize 1080x960 1920x1280.jpg 1080x960.jpg
echo "Converting to 960x800"
convert -resize 960x800 1920x1280.jpg 960x800.jpg
echo "Converting to 1440x1280"
convert -resize 1440x1280 1920x1280.jpg 1440x1280.jpg
echo "Converting to 2160x1920"
convert -resize 2160x1920 1920x1280.jpg 2160x1920.jpg
echo "Converting to 2880x2560"
convert -resize 2880x2560 1920x1280.jpg 2880x2560.jpg
echo "making folders"
mkdir ./drawable-hdpi
mkdir ./drawable-nodpi
mkdir ./drawable-sw600dp-nodpi
mkdir ./drawable-sw720dp-nodpi
mkdir ./drawable-xhdpi
mkdir ./drawable-xxhdpi
mkdir ./drawable-xxxhdpi
echo "copying and renaming pictures"
cp ./1080x960.jpg ./drawable-hdpi/default_wallpaper.jpg
cp ./960x800.jpg ./drawable-nodpi/default_wallpaper.jpg
cp ./1920x1280.jpg ./drawable-sw600dp-nodpi/default_wallpaper.jpg
cp ./1920x1280.jpg ./drawable-sw720dp-nodpi/default_wallpaper.jpg
cp ./1440x1280.jpg ./drawable-xhdpi/default_wallpaper.jpg
cp ./2160x1920.jpg ./drawable-xxhdpi/default_wallpaper.jpg
cp ./2880x2560.jpg ./drawable-xxxhdpi/default_wallpaper.jpg
echo "Complete."
echo "Move the drawable* folders to 'vendor/pac/overlay/common/frameworks/base/core/res/res' folder."
You have to have imagemagic installed on your machine to use this script. Then, simply place your jpg file in a folder by itself, and then put this script into the folder, and run it! Here is the output:
Code:
[email protected]:~/Documents/projects/phones/wallpapers/aokp/images$ ls
aokp.jpg picscriptphones.sh
[email protected]:~/Documents/projects/phones/wallpapers/aokp/images$ ./picscriptphones.sh
Changing name of jpg file.
Converting to 1080x960
Converting to 960x800
Converting to 1440x1280
Converting to 2160x1920
Converting to 2880x2560
making folders
copying and renaming pictures
Complete.
Move the drawable* folders to 'vendor/aokp/overlay/common/frameworks/base/core/res/res' folder.
[email protected]:~/Documents/projects/phones/wallpapers/aokp/images$ ls
1080x960.jpg 2160x1920.jpg drawable-hdpi drawable-sw720dp-nodpi drawable-xxxhdpi
1440x1280.jpg 2880x2560.jpg drawable-nodpi drawable-xhdpi picscriptphones.sh
1920x1280.jpg 960x800.jpg drawable-sw600dp-nodpi drawable-xxhdpi
[email protected]:~/Documents/projects/phones/wallpapers/aokp/images$ ls drawable-hdpi/
default_wallpaper.jpg
[email protected]:~/Documents/projects/phones/wallpapers/aokp/images$
Once I moved the drawable folders to the vendor/aokp/overlay/common/frameworks/base/core/res/res folder mentioned above, I simply re-ran the compiler. Viola! Changed default background!
Post #5. kernel - How to build just a kernel from a rom source.
Post #5. kernel - How to build just a kernel from a rom source.
This is the easiest way to build a kernel for your roms, as it will create the bootimage file for you after making the kernel.
Make the kernel and boot image:
If you followed Post #2 to download all of the source, and even built a rom from it, you can now build just the kernel very quickly with only a few commands.
You can go to the aokp/kernel/samsung/tblte/arch/arm/config folder and edit your defconfig, in this case apq8084_sec_defconfig and apq8084_sec_tblte_eur_defconfig to make changes if needed.
Then, go to your aokp folder and open a terminal:
Code:
$ . build/envsetup
$ breakfast tbltexx
$ make clean
$ mka bootimage
Each one of those commands will create a lot of output, but the mka bootimage command will run the compiler, make your kernel, and your boot image. Now they are in the aokp/out/target/product/tbltexx/ folder as kernel and boot.img.
Make it a flashable zip:
Make a new folder and put this file in it:
http://www.mediafire.com/file/x3cn41c1ucjs33x/makekernelzip.zip
Unzip that file and you will have everything you need. Simply put your boot.img file in this folder, and follow the included instructions to run zip.sh and make your boot.img flashable on any tblte phone.
Post #6. kernel - How to build just a kernel stand alone.
Post #6. kernel - How to build just a kernel stand alone, without Rom source...
For the record, I do not recommend building kernels this way, I recommend that you build them within your ROM source. This method will work, but is far more labor intensive.
Part 1 - The setup:
Go to
Code:
$ sudo apt-get install -y build-essential kernel-package libncurses5-dev bzip2 git make -y
This will take a while. Then:
Code:
$ cd ~
$ mkdir playground
$ cd playground/
$ mkdir toolchain
$ cd toolchain
Now type this for 4.9:
Code:
$ git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9
OR this for 4.8, but for this I recommend 4.8.
Code:
$ git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8
The output either way should look like this:
Code:
Cloning into 'arm-linux-androideabi-4.8'...
remote: Sending approximately 170.26 MiB ...
remote: Counting objects: 124, done
remote: Finding sources: 100% (124/124)
.........EDITED FOR SPACE..................
Resolving deltas: 100% (652/652), done.
Checking connectivity... done.
That will take a few minutes. Then:
Code:
$ mkdir kernel
$ cd kernel
$ git clone https://github.com/alaskalinuxuser/kernel_samsung_tblte.git
Cloning into 'kernel_samsung_tblte'...
remote: Counting objects: 49082, done.
remote: Compressing objects: 100% (32/32), done.
.........EDITED FOR SPACE..................
Checking connectivity... done.
Checking out files: 100% (46422/46422), done.
This will take another few minutes, maybe longer, depending on your internet connection.
Part 2 - The kernel modifications
Before going further, this is when you can edit the files of the kernel, add things, remove things from the kernel itself. See the other posts here for how to do that. When you are ready, you can move onto the build.
Part 3 - The build
Open ~/playground/toolchain/kernel/kernel_samsung_tblte/Makefile, and go to line 195, it should say ARCH, edit it as such:
Code:
ARCH =arm
CROSS_COMPILE =/home/{YOURUSERNAME}/playground/toolchain/arm-linux-androideabi-4.8/bin/arm-linux-androideabi-
Code:
$ cd ~/playground/toolchain/kernel/kernel_samsung_tblte/
$ make clean
$ make mrproper
You will likely see an error about TARGET, that is okay, just ignore it.
Code:
$ make menuconfig apq8084_sec_defconfig
OR
Code:
$ make menuconfig apq8084_sec_tblte_eur_defconfig
After some scrolling text, you will see a menu option. Use the arrow keys and the space bar to make selections. Make any changes you want. Remember, not all changes are good. With this setup, you will need to make changes to make this function.
Once you are done, select exit. Then select yes to save your config.
Now that you are back at the command line, all you have to do is type one more command:
Code:
$ make
You will see a lot of scrolling text, like this:
Code:
arch/arm/kernel/return_address.c:63:2: warning: #warning "TODO: return_address should use unwind tables" [-Wcpp]
#warning "TODO: return_address should use unwind tables"
^
CC arch/arm/kernel/sched_clock.o
CC arch/arm/kernel/setup.o
CC arch/arm/kernel/signal.o
CC arch/arm/kernel/stacktrace.o
CC arch/arm/kernel/sys_arm.o
CC arch/arm/kernel/time.o
CC arch/arm/kernel/traps.o
CC arch/arm/kernel/atags_parse.o
CC arch/arm/kernel/cpuidle.o
This is good. Make is making your kernel.
If you are good, or lucky, then it will compile successfully, if not, it will error. Check your changes and use Google to search for errors if you need help. Again, I recommend to build kernels within the backdrop of ROM source, as I mentioned in the other post, it is much, much easier. This method will work, but you may have to add or change a lot of options in your config to make it happen.
Good luck!
Make it a flashable zip:
You will need to follow Post #7 and break down another boot image, insert your kernel, then re-pack that boot image with all of the proper arguments. This is the main reason I do not recommend building a kernel for Android outside of rom source.
Post #7. Kernel - How to break down and make boot images.
Post #7. Kernel - How to break down and make boot images.
Breaking down a boot image:
Okay, so first things first, STEP 1: downloads!
Download these things:
http://www.mediafire.com/download/zl80gh0t310trla/unpack-bootimg.pl
http://www.mediafire.com/download/xdmd278n17gm58h/unmkbootimg
http://www.mediafire.com/download/byf0tw4ga2mqtw0/repack-bootimg.pl
http://www.mediafire.com/download/7cmi548pzetc6c4/mkbootimg
And download your boot image that you want to break down, if you have not already.
I am using Linux, Ubuntu 14.04. I did this previously from Debian Wheezy, so any Linux should work. You can also use a VM, virtualbox, etc. if you are on a Windows computer.
STEP 2: Unzip!
Go ahead and unzip the zipfile if you are breaking down a flashable kernel zip that you downloaded. Preferably in its very own folder. For my work, I made a folder called "playground" in my home directory to play around in. I will reference the "playground" meaning the main folder with everything in it. Now, in the playground, make a new folder called "bootimage". In the playground folder, copy the boot.img file to the bootimage folder.
STEP 3: Tools setup!
Copy the downloaded above tools into a new folder called "tools" in the playground folder. Open a terminal here and give these files executable permissions and copy them again to the bootimage folder:
Code:
$ cd ~/playground/tools
$ chmod 777 ./*
$ cp ./ ../bootimage
We copy this twice so we have backups of the tools in case we delete them accidentally.
STEP 4: Unpack the boot image!
Open a terminal and go to the bootimage folder, and start typing:
Code:
$ cd ~/playground/boot.img
$ ./unmkbootimg ./boot.img
You will see some output in the terminal that looks *kind of* like this:
Code:
$ ./unmkbootimg ./boot.img
unmkbootimg version 1.2 - Mikael Q Kuisma <[email protected]>
Kernel size 2992704
Kernel address 0x10008000
Ramdisk size 2196028
Ramdisk address 0x11000000
Secondary size 0
Secondary address 0x10f00000
Kernel tags address 0x10000100
Flash page size 2048
Board name is ""
Command line ""
This image is built using standard mkbootimg
Extracting kernel to file zImage ...
Extracting root filesystem to file initramfs.cpio.gz ...
All done.
---------------
To recompile this image, use:
mkbootimg --kernel zImage --ramdisk initramfs.cpio.gz -o new_boot.img
---------------
Whatever it says, copy and paste it, hand type it, screenshot, whatever it takes, write the output down, because this is the key to re-making your boot image!
Then, you can unpack it like so:
Code:
$ ./unpack-bootimg.pl ./boot.img
You should see something *like* this:
Code:
$ ./unpack-bootimg.pl ./boot.img
kernel written to ./boot.img-kernel.gz
ramdisk written to ./boot.img-ramdisk.cpio.gz
7607 blocks
extracted ramdisk contents to directory ./boot.img-ramdisk/
You will now have folders and files to play with!
Make changes to your boot image:
Now is the time to change any files you want, such as delete the kernel and put yours in instead, etc. I can not tell you much about this, since I don't know what you are doing in your boot image. Here is an example of me turning a Captivate glide cell phone into a Debian "laptop":
http://forum.xda-developers.com/cap...msung-captivate-glide-debian-chatter-t3233807
Re-pack the boot.img:
Okay, so you have made your changes, now it is time to put it back together. Go back to your playground folder.
Code:
$ cd ~/playground/bootimage
$ rm initramfs.cpio.gz
$ cd ./boot.img-ramdisk/
$ sudo su
<enter your password>
# find . | cpio --quiet -H newc -o | gzip > ../initramfs.cpio.gz
# cd ..
# mkbootimg --kernel zImage --ramdisk initramfs.cpio.gz --base 0x0 --cmdline 'console=ttyS1,115200n8 androidboot.selinux=permissive' -o new_boot.img
Note that the last part, "mkbootimg" needs to be all the stuff I told you to write down when you broke down your boot image, or it needs to be the new command line you want your boot image to use. The new_boot.img is your newly created boot image file, which you should rename boot.img, after you remove your old boot.img file from the folder.
-With heimdall, heimdall-frontend, or Odin, flash the new_boot.img to the boot partition of your phone, or make it flashable per Post #5 or Post #6.
Post #8. kernel - How to add CPU/GPU Governors.
Post #8. kernel - How to add CPU/GPU Governors.
Where to get CPU and GPU governors:
That is a really great question. Essentially, for CPU governors, you can pull them from any kernel by searching github. However, I recommend you pull from a kernel from either the same phone and/or kernel version. If you are using 3.10.40, but you pull from a kernel that is 3.10.84, there may be dependencies that are missing from your older kernel. In the case of the Nightmare example, I had to edit the governor itself to make it work with the kernel I was using.
For sure, if you follow this guide, you can always borrow mine
https://github.com/alaskalinuxuser/kernel_samsung_tblte
They will come from the drivers/cpufreq/ folder, and should be named cpufreq_{governor_name.c}. So, if you are looking for Nightmare, you can search github for cpufreq_nightmare.c, or use Google with "github cpufreq_nightmare.c".
GPU governors are a bit more complicated, see below for how to implement one, and then you can better see where to get one.
The non-technical guide to understanding CPU/GPU governors:
http://forum.xda-developers.com/gal...technical-guide-to-understanding-cpu-t3440156
Adding CPU Governors:
Adding a kernel governor can be a Nightmare!
You can read the commit here: https://github.com/alaskalinuxuser/...mmit/19ba1b4f94d04877a5a783843a01c2494ecb1d5c
Okay, so a little play on words, especially since I am adding the Nightmare governor to the kernel, but it did turn out to be a bit of a problem child, fortunately, it was quickly corrected. As you can see, I did the standard additions, as well as adding the cpufreq_nightmare.c file: https://github.com/alaskalinuxuser/...94ecb1d5c/drivers/cpufreq/cpufreq_nightmare.c You can download it there.
The CPU Governor files are in the drivers/cpufreq/ folder, and all start with cpufreq_{DRIVERNAME}.
Added to drivers/cpufreq/Makefile, where the other cpufreq_*'s are:
Code:
.............EDITED FOR SPACE.......................
obj-$(CONFIG_CPU_FREQ_GOV_NIGHTMARE) += cpufreq_nightmare.o
.............EDITED FOR SPACE.......................
Added to drivers/cpufreq/Kconfig, where the other CPU_FREQ_DEFAULT_GOV_*'s are:
Code:
.............EDITED FOR SPACE.......................
config CPU_FREQ_DEFAULT_GOV_NIGHTMARE
bool "nightmare"
select CPU_FREQ_GOV_NIGHTMARE
help
Use the CPUFreq governor 'nightmare' as default. -WJH
Also added to drivers/cpufreq/Kconfig, where the other CPU_FREQ_GOV_*'s are:
Code:
.............EDITED FOR SPACE.......................
config CPU_FREQ_GOV_NIGHTMARE
tristate "'nightmare' cpufreq policy governor"
help
'nightmare' - This driver is a modified PegasusQ.
To compile this driver as a module, choose M here: the
module will be called cpufreq_nightmare.
For details, take a look at linux/Documentation/cpu-freq.
If in doubt, say N. -WJH
.............EDITED FOR SPACE.......................
Added to include/linux/cpufreq.h, right where the other CONFIG_CPU_FREQ_DEFAULT_GOV_*'s were :
Code:
.............EDITED FOR SPACE.......................
#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_NIGHTMARE)
extern struct cpufreq_governor cpufreq_gov_nightmare;
#define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_nightmare)
.............EDITED FOR SPACE.......................
Added to arch/arm/configs/apq8084_sec_defconfig, right under "CONFIG_CPU_FREQ_GOV_POWERSAVE":
Code:
.............EDITED FOR SPACE.......................
CONFIG_CPU_FREQ_GOV_NIGHTMARE=y
.............EDITED FOR SPACE.......................
Adding GPU governors:
Comming soon.
Post #9. kernel - How to Overclock/Undervolt.
Post #9. kernel - How to Overclock/Undervolt.
Overclock an apq8084 Samsung Galaxy Note Edge!
You can see the commit on github here:
https://github.com/alaskalinuxuser/...mmit/9bb23d0d9cc805bf7e1b8e3fe829fcbb0542af31
In my continuing quest to make a better kernel for the Samsung Galaxy Note Edge (TBLTE, N915T), I decided to tackle overclocking the kernel. There are already some overclocked kernels out there, but I decided to do something slightly different with mine. The distinguishing feature of my overclocked kernel is that it doesn't use any more power than it did before, and to God be the glory, it worked!
I also feel that when you overclock a chip, you are increasing the rate of failure, and the induced heat load. So I like to keep my overclocking light, less than 10% of the overall capacity that the chip was designed for. It is my hope that this will reduce wear and tear on the device while still providing superior performance.
Editing the tables for this chip was a lot simpler than for other chips I have worked on.
It all took place within the kernel/samsung/tblte/arch/arm/boot/dts/qcom/apq8084.dtsi file. Here is how it used to look:
Code:
.............EDITED FOR SPACE................
/* 2.7GHz RC1 */
qcom,speed2-pvs0-bin-v1 =
< 0 0 0 >,
< 300000000 810000 76 >,
< 345600000 820000 88 >,
.............EDITED FOR SPACE................
< 2496000000 1120000 813 >,
< 2572800000 1135000 849 >,
< 2649600000 1150000 886 >;
And here was my change, from 2649600000 to 2688000000:
Code:
.............EDITED FOR SPACE................
/* 2.7GHz RC1 */
qcom,speed2-pvs0-bin-v1 =
< 0 0 0 >,
< 300000000 810000 76 >,
< 345600000 820000 88 >,
.............EDITED FOR SPACE................
< 2496000000 1120000 813 >,
< 2572800000 1135000 849 >,
< 2688000000 1150000 886 >;
That's right, I only made a 39MHz change. I feel this was appropriate to keep the device cool and continue to use the same voltages. So it is essentially a 39MHz boost with no noticable consequences. Of course, I had to do the above to each speed and pvs table in that file.
Then, I needed to edit this portion:
Code:
.............EDITED FOR SPACE................
qcom,[email protected] {
reg = <0 4>;
compatible = "qcom,msm-cpufreq";
qcom,cpu-mem-ports = <1 512>;
qcom,cpufreq-table =
< 300000 300000 1144 800 >,
< 422400 422400 2288 800 >,
.............EDITED FOR SPACE................
< 2572800 1728000 16250 10101 >,
< 2649600 1728000 16250 10101 >;
.............EDITED FOR SPACE................
To this:
Code:
.............EDITED FOR SPACE................
qcom,[email protected] {
reg = <0 4>;
compatible = "qcom,msm-cpufreq";
qcom,cpu-mem-ports = <1 512>;
qcom,cpufreq-table =
< 300000 300000 1144 800 >,
< 422400 422400 2288 800 >,
.............EDITED FOR SPACE................
< 2572800 1728000 16250 10101 >,
< 2688000 1728000 16250 10101 >;
.............EDITED FOR SPACE................
It actually was the only time I have overclocked a kernel on the second try. Don't think too highly of me, though, I spent hours reviewing kernel edits for overclocking by various other kernel developers on GitHub. If you are looking to do the same, you should spend some time looking at working code for others, and then make your own tables.
If you try this on your own, you may have multiple tries where the phone will not even boot, or crashes while you use it, so be careful, make small changes, and be courageous, because this is usually not a simple one stop process.
If you were to compare my tables with everyone elses, you would see that I have done it differently than my contemporaries, even though we reached similar, or in some cases, identical results. I like to keep the code clean, short, and sweet. Often when overclocking, most kernel developers will add more lines to the tables. I have found that while that may be the best to maximize use, my method is much simpler and easy to implement, as well as follow, and that is what Linux should be all about, keeping it simple. It also makes it easier for "stock" kernel hot-plug controllers like MPDecision.
Under-volt a Samsung Galaxy Note Edge:
So, back to our ealier example of the overclocked chip, now we want to change the voltage. Doing that is easy, getting viable, stable, working results is much harder. Consider our code from the kernel/samsung/tblte/arch/arm/boot/dts/qcom/apq8084.dtsi file:
Code:
.............EDITED FOR SPACE................
/* 2.7GHz RC1 */
qcom,speed2-pvs0-bin-v1 =
< 0 0 0 >,
< 300000000 810000 76 >,
< 345600000 820000 88 >,
.............EDITED FOR SPACE................
< 2496000000 1120000 813 >,
< 2572800000 1135000 849 >,
< 2649600000 1150000 886 >;
To change the voltage, one only has to edit these multiple pvs trees.
Consider this line:
Code:
< 2572800000 1135000 849 >
It means:
Code:
< Frequency Voltage Amperage (? or cycles) >
So, in the above table, the 2572 MHz frequency uses 113.5 mv.
And, in the above table, the 2649 MHz frequency uses 115 mv.
So, to under-volt you could edit it like so:
Code:
< 2572800000 1120000 849 >,
< 2649600000 1135000 886 >;
This would cut down the voltage used on each of these frequencies. The problem is, however, if you go too low, you may cause the kernel to crash. Notice that in my overclocked kernel, I under-volted it to the same as the 2649 MHz frequency, even though I am using it at 2688 MHz. So, use with caution, and have fun making adjustments! I recommend only small changes or even only one change at a time.
Post #10. kernel - "How to" on special projects like sound mods and I/O schedulers.
Post #10. kernel - "How to" on special projects like sound mods and I/O schedulers.
How to add an I/O Scheduler to your kernel:
Praise God, another great addition to the TBLTE kernel was that of adding the FIOPS I/O scheduler to the kernel. What is an I/O scheduler? Well it is the part of the kernel that handles, or schedules, input and output. Particularly, this has to do with writing and reading to and from media, like your hard drive, flash drive, etc.
So, how do we do that? How do we add I/O schedulers to our kernel?
Well, for the TBLTE kernel, I will show you what I did, and you can add to your kernel similarly.
Go to the block folder in your kernel source. The first thing that you need to do is add the fiops-iosched.c file. Whatever I/O scheduler you want to add will be named like this: {NAME-iosched.c} you can search Google or github for them, or take them from my source if you would like.
Once you put your fiops-iosched.c file in your kernel's ./block/ folder, you can now edit two other files in that folder. You need to add the new scheduler to the make file, so it knows to make it, you can do that like so:
Open ./block/Makefile and add this line after the other *-iosched.o lines:
Code:
obj-$(CONFIG_IOSCHED_FIOPS) += fiops-iosched.o
Notice that it just uses the name of the iosched file, but with an ".o" extension instead of a ".c" extension. The ".c" file you added earlier will create a ".o" (object) file that the Kernel needs to use to "make" the kernel.
Now edit the ./block/Kconfig.iosched file like so:
Code:
config IOSCHED_FIOPS
tristate "FIOPS I/O scheduler"
default y
---help---
The FIOPS I/O scheduler. WJH.
This way, when you are moddifying your configuration, you can select to build it. Notice that it is a "default y", essentially, I am telling the config file creator to allways assume I want to build this, unless I choose not to. You can also eddit the "---help---" portion to say anything you want. I put my initials in there so I can find it easily with the search tool.
Now open your configuration file. For the stock builds, that would be ./arch/arm/configs/ap88084_sec_defconfig, and add this line:
Code:
CONFIG_IOSCHED_FIOPS=y
Note that you could also do this through
Code:
$ make menuconfig
.
You may also note, since we gave it a "default y" in the Kconfig.iosched file, we don't actually need to add this to our configs, as it will be built by default, but I like to declare what I am building in my configs so I remember what I am doing.
There you go! Now when you build your kernel again, the FIOPS I/O scheduler will be added in. It is remarkably simple, just the way I like it. You can read the commit here: https://github.com/alaskalinuxuser/...mmit/f80320a895612bd1379ca789f88f1d6dfd6e68f9
@DaKillaz98
I will teach you to build Nougat roms here also, if you are interested.
@AlaskaLinuxUser
I appreciate the help with teaching me what I need to do with our Note Edge. As far as I know, I need Linux, latest OpenJDK for building with Nougat and beyond. I have read up some basics, but I don't know all the particulars that go into the Note Edge.
---------- Post added at 07:18 PM ---------- Previous post was at 07:12 PM ----------
[/COLOR @AlaskaLinuxUser
I would also like to ask, you mentioned earlier in the guide that you had an HP Compaq 6715b. How long were compile times? I have an HP Elitebook 8540w with an Intel i5 520m, so I am assuming that compile would probably take about 6 hours?
DaKillaz98 said:
I appreciate the help with teaching me what I need to do with our Note Edge. As far as I know, I need Linux, latest OpenJDK for building with Nougat and beyond. I have read up some basics, but I don't know all the particulars that go into the Note Edge.
I would also like to ask, you mentioned earlier in the guide that you had an HP Compaq 6715b. How long were compile times? I have an HP Elitebook 8540w with an Intel i5 520m, so I am assuming that compile would probably take about 6 hours?
Click to expand...
Click to collapse
No problem.
Your laptop should work. It took me 11 hours to compile on my old laptop. Now I use a server with 24 GB of ram, 8 cores (2x4 core 2.0 GHz) and it takes 3 hours to compile. I can only guess, but it will likely take 6 hours on your machine. The great thing is, starting with Nougat, the builds now use Ninja, so you can see the progress in percentage. Before, in MM and down, we just had to wait, without knowing how far along it was. We could guess by looking at the files, but it is not always built in the same order.
Okay, to get started. If that laptop is your machine, you can't set up a virtual box, because you need all 8 GB of ram (unless you have more than that). So, I recommend installing Ubuntu 14.04, 64 bit. 14.04 is still Google's preferred OS for building Android, but you can do it on other systems. I recommend for now that you do install 14.04 or 16.04 as your build environment. Once you get good at the builds, then you can experiment with other OS' for the builds.
After you install that, follow post #2, with these changes for Nougat:
I am only listing the changes, otherwise, follow the steps as is.
<<<<< Step 1: Setup your system. >>>>>
Code:
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip bzip2 dpkg-dev git git-review lib32readline-gplv2-dev lib32z1-dev libbz2-1.0 libbz2-dev libghc-bzlib-dev libncurses5-dev libreadline6-dev lzop maven pngcrush pngquant python-markdown schedtool squashfs-tools tofrodos
After you install that, but before you install the "curl repo" part, install openjdk-8-jdk per here:
https://source.android.com/source/initializing#installing-the-jdk
Now continue by curling the repo per the instructions.
<<<<< Step 2: Download the source. >>>>>
Code:
$ cd ~
$ mkdir aokp7
$ cd aokp7
$ repo init -u https://github.com/AOKP/platform_manifest.git -b nougat
$ repo sync
<<<<< Step 3: Adding the device, kernel, and vendor trees. >>>>>
For each of these download links (t-mobile added and links updated):
https://github.com/alaskalinuxuser/device_samsung_tbltexx/tree/AOKP_N
https://github.com/alaskalinuxuser/kernel_samsung_tblte/tree/NOUGAT
https://github.com/alaskalinuxuser/device_samsung_tblte-common/tree/AOKP_N
https://github.com/alaskalinuxuser/device_samsung_qcom-common/tree/AOKP_N
https://github.com/AOKP/device_qcom_common --> Yes, this is a little old, but so is your phone.
https://github.com/alaskalinuxuser/tblte_vendor_samsung/tree/Nougat
https://github.com/alaskalinuxuser/device_samsung_tbltetmo/tree/AOKP_N
And the only change for renaming:
aokp_device_samsung_tbltetmo --> "tbltetmo" (Place in aokp7/device/samsung/ )
<<<<< Step 4: Editing the device, kernel, and vendor trees. >>>>>
No changes.
<<<<< Step 5: Start your build! >>>>>
No changes. But....
Not required, but if you want the capacitive buttons to work correctly, before you compile, do this from the aokp7 directory:
$ sh device/samsung/tblte-common/run_before_compiling.sh
It runs a little script that overwrites the generic keyboard layout.
Now you can continue with the
$ . build/envsetup.sh
When you get to brunch tbltexx:
$ brunch tbltexx
-- OR --
$ brunch tbltetmo
To build for the international or T-mobile versions.
Okay, that should get you started. I will gladly assist once you get rolling.
I guess I should have asked: Are you planning to build MM or Nougat? I figured Nougat, so do the above to build Nougat. For learning purposes, you could follow the guide as written to build MM instead.
@AlaskaLinuxUser
For some reason, my post didn't go through. Anyways, I tried to mention I am building Nougat, and waiting until I go up to my Grandparents where they have an HP Workstation with an Intel Core 2 Quad q9600 and 6gb ram, their computer is more dedicated for the job. But for bow, I have been running new LineageOS builds with Micky387's RR kernel and his Key Layout files, so I may build kernels only on my laptop. If will probably post up a zip including the keylayout files and my own built lineageos kernel for now so people can have new builds until I start building explicitly for the Note Edge.
DaKillaz98 said:
@AlaskaLinuxUser
For some reason, my post didn't go through. Anyways, I tried to mention I am building Nougat, and waiting until I go up to my Grandparents where they have an HP Workstation with an Intel Core 2 Quad q9600 and 6gb ram, their computer is more dedicated for the job. But for bow, I have been running new LineageOS builds with Micky387's RR kernel and his Key Layout files, so I may build kernels only on my laptop. If will probably post up a zip including the keylayout files and my own built lineageos kernel for now so people can have new builds until I start building explicitly for the Note Edge.
Click to expand...
Click to collapse
Sure. Good luck.
Sent from my LG-H811 using XDA-Developers Legacy app
@AlaskaLinuxUser
Thanks for the help and support on this. It is highly appreciated.
AlaskaLinuxUser said:
Sure. Good luck.
Sent from my LG-H811 using XDA-Developers Legacy app
Click to expand...
Click to collapse
Sorry about my large absence from this ROM build. My computer had broken down, so I worked on fixing it, also found a cheap PC on eBay which will serve builds much better. Intel i5 2400 with 8gb ram and 500gb hdd, so I should have a lot more room and power for builds. I had also started my own TouchWiz project called Slaughtered ROM and was busy with that, I will soon set up the build environment and get that going, thank you again for the guide and sorry for how long I had been busy.
I will start with AOKP, but probably push towards Resurrection Remix and possibly seeing if I can build AOSP O on the Edge.
DaKillaz98 said:
Sorry about my large absence from this ROM build. My computer had broken down, so I worked on fixing it, also found a cheap PC on eBay which will serve builds much better. Intel i5 2400 with 8gb ram and 500gb hdd, so I should have a lot more room and power for builds. I had also started my own TouchWiz project called Slaughtered ROM and was busy with that, I will soon set up the build environment and get that going, thank you again for the guide and sorry for how long I had been busy.
I will start with AOKP, but probably push towards Resurrection Remix and possibly seeing if I can build AOSP O on the Edge.
Click to expand...
Click to collapse
No problem, I hope the guide will help you as you get started. I can't answer every question, but if you have problems let me know, I'd be glad to help if I can.
Sent from my LG-H811 using XDA-Developers Legacy app
AlaskaLinuxUser said:
No problem, I hope the guide will help you as you get started. I can't answer every question, but if you have problems let me know, I'd be glad to help if I can.
Sent from my LG-H811 using XDA-Developers Legacy app
Click to expand...
Click to collapse
Thanks for your help! I have synced RR repo's, I wanted to try building RR, and am in the process of setting it up with the device-specific stuff, afterwards I will start building.