FORUMS
Remove All Ads from XDA

[GUIDE] Build AOSP ROMs and Kernels for the Note Edge.

1,817 posts
Thanks Meter: 3,878
 
Post Reply Email Thread
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.
The Following 10 Users Say Thank You to AlaskaLinuxUser For This Useful Post: [ View ] Gift AlaskaLinuxUser Ad-Free
 
 
27th October 2016, 07:03 PM |#2  
AlaskaLinuxUser's Avatar
OP Senior Member
Flag Fairbanks
Thanks Meter: 3,878
 
Donate to Me
More
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/gala...lding-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/d...amsung_tbltexx
https://github.com/alaskalinuxuser/kernel_samsung_tblte
https://github.com/alaskalinuxuser/d...g_tblte-common
https://github.com/alaskalinuxuser/d...ng_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!
The Following 6 Users Say Thank You to AlaskaLinuxUser For This Useful Post: [ View ] Gift AlaskaLinuxUser Ad-Free
27th October 2016, 07:05 PM |#3  
AlaskaLinuxUser's Avatar
OP Senior Member
Flag Fairbanks
Thanks Meter: 3,878
 
Donate to Me
More
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/a...7a87625f0eb130

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!
The Following 4 Users Say Thank You to AlaskaLinuxUser For This Useful Post: [ View ] Gift AlaskaLinuxUser Ad-Free
27th October 2016, 07:06 PM |#4  
AlaskaLinuxUser's Avatar
OP Senior Member
Flag Fairbanks
Thanks Meter: 3,878
 
Donate to Me
More
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!
The Following 4 Users Say Thank You to AlaskaLinuxUser For This Useful Post: [ View ] Gift AlaskaLinuxUser Ad-Free
27th October 2016, 07:07 PM |#5  
AlaskaLinuxUser's Avatar
OP Senior Member
Flag Fairbanks
Thanks Meter: 3,878
 
Donate to Me
More
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/x3cn41...ekernelzip.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.
The Following 3 Users Say Thank You to AlaskaLinuxUser For This Useful Post: [ View ] Gift AlaskaLinuxUser Ad-Free
27th October 2016, 07:08 PM |#6  
AlaskaLinuxUser's Avatar
OP Senior Member
Flag Fairbanks
Thanks Meter: 3,878
 
Donate to Me
More
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.
Attached Thumbnails
Click image for larger version

Name:	kernelconfig.png
Views:	164
Size:	69.7 KB
ID:	3917924  
The Following 5 Users Say Thank You to AlaskaLinuxUser For This Useful Post: [ View ] Gift AlaskaLinuxUser Ad-Free
27th October 2016, 07:09 PM |#7  
AlaskaLinuxUser's Avatar
OP Senior Member
Flag Fairbanks
Thanks Meter: 3,878
 
Donate to Me
More
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/zl...ack-bootimg.pl

http://www.mediafire.com/download/xd...8h/unmkbootimg

http://www.mediafire.com/download/by...ack-bootimg.pl

http://www.mediafire.com/download/7c...c6c4/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/capt...atter-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.

The Following 4 Users Say Thank You to AlaskaLinuxUser For This Useful Post: [ View ] Gift AlaskaLinuxUser Ad-Free
27th October 2016, 07:10 PM |#8  
AlaskaLinuxUser's Avatar
OP Senior Member
Flag Fairbanks
Thanks Meter: 3,878
 
Donate to Me
More
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/gala...g-cpu-t3440156

Adding CPU Governors:

Adding a kernel governor can be a Nightmare!
You can read the commit here: https://github.com/alaskalinuxuser/k...01c2494ecb1d5c

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/k...eq_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.
The Following 3 Users Say Thank You to AlaskaLinuxUser For This Useful Post: [ View ] Gift AlaskaLinuxUser Ad-Free
27th October 2016, 07:11 PM |#9  
AlaskaLinuxUser's Avatar
OP Senior Member
Flag Fairbanks
Thanks Meter: 3,878
 
Donate to Me
More
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/k...29fcbb0542af31

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.

The Following User Says Thank You to AlaskaLinuxUser For This Useful Post: [ View ] Gift AlaskaLinuxUser Ad-Free
27th October 2016, 07:12 PM |#10  
AlaskaLinuxUser's Avatar
OP Senior Member
Flag Fairbanks
Thanks Meter: 3,878
 
Donate to Me
More
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/k...8f1d6dfd6e68f9
The Following User Says Thank You to AlaskaLinuxUser For This Useful Post: [ View ] Gift AlaskaLinuxUser Ad-Free
13th July 2017, 04:37 PM |#11  
AlaskaLinuxUser's Avatar
OP Senior Member
Flag Fairbanks
Thanks Meter: 3,878
 
Donate to Me
More
@DaKillaz98

I will teach you to build Nougat roms here also, if you are interested.
The Following User Says Thank You to AlaskaLinuxUser For This Useful Post: [ View ] Gift AlaskaLinuxUser Ad-Free
Post Reply Subscribe to Thread

Guest Quick Reply (no urls or BBcode)
Message:
Previous Thread Next Thread
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes