[Guide][Compile][Patching]A Kernel From Source For Newbies[Any Device]

Search This thread

Saumitra Yadav

Senior Member
Feb 25, 2013
309
490
Bangalore
Hey Guys,
With All the awesome development going on in the Android world. There Are Many newbies who want to strat development but they exactly Dont Know How To begin with or from where to strat with. So I will Write a guide on how to compile your own kernel from source :)


=================
What Is A Kernel???
=================

The operating system of a device is the part of the device responsible for basic use and administration. This includes the kernel and device drivers, boot loader, command shell or other user interface, and basic file and system utilities. Whereas the user interface is the outermost portition of the operating system, kernel is the innermost. It is the core internals, the software that provides basic services for all other parts of the system, manages hardware and distributes system resources.

============================
Prerequisites To Compile A kernel
============================
1.A Unix Based Os(Ubuntu Recommended Both 32-bit and 64-bit are good to compile a kernel)
2.A few packages, to let the system know that we are compiling a kernel :p
3. The Source Code of kernel for your Device :p


Ok, So Now Lets Begin :)

==================
Packages Required:
==================
Ok So Now Open The Terminal And Copy Paste This Code:
Code:
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 git

Okay SO Now If You Are using Ubuntu12.04 , you need to create links of certain files
Code:
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
Okay now we are done with installing packages :)


SO Now we need java

Open a terminal and Run This Code:
sudo add-apt-repository ppa:ferramroberto/java
Then Run This:
Then Type This:
sudo apt-get-install sun-java6-jdk

So Now You Have all the needed packages to compile a kernel :)

Next you need the bootimagetools,source code of kernel and Androidtoolchainsto compile a kernel :)

Bootimagetools:https://github.com/SaumitraYadav/Boot-Image-tools

AndroidToolchains:https://github.com/SaumitraYadav/Android_Toolchains

Okay once you have Downloaded everything ... now Lets Start Compiling A Kernel :)

Ok So Fireup A Terminal :
Code:
mkdir kernel
This Will Create a Directory named kernel in your Home Folder
Now extract your kernel Source in this directory

Then Run This:
Code:
cd kernel

Now You Have To Edit the Make File:
Code:
gedit Makefile
The Make file will open.........look out for this and change CROSS_COMPILE= "your toolchain path"

EXAMPLE:
Code:
CROSS_COMPILE?= /home/saumitra/Downloads/Toolchains/arm-eabi-4.4.3/bin/arm-eabi-

this will open up Makefile in gedit, now set the path where youn have downloaded and extracted the toolchains :)

Now, make the kernel config
Code:
make pico_defconfig
Note: I have a Htc Explorer and my device codename is pico. So i run pico_defconfig
Now Other device users have to look for codename or config names in arch/arm/configs


This Will Make a working kernel config according to the source :)

Now, if You Wanna Make Some Changes In Your Source Do so , and run this command to start compiling:
Code:
make -jX

The X can be replaced by the maximum number of jobs your computer can handle simultaneously.. The higher this number, the faster the compiling will get.. But do not enter a number too high, your computer may explode due to overheating.

Okay if all goes well your kernel will be compiled in 15mins :)

The resulting kernel will be in Kernel/arch/arm/boot/zImage

Now We also need modules for wifi and BT to work. So,
find . -name '*ko' -exec cp '{}' modules \;

Okay So Now The Moules will be in kernel/modules :)

So Now We will pack the kernel to be flashed on the target Device :)

-Okay So Now Get A Working Boot.img Of THe Rom on which Wanna Test Your Kernel
-Download and extract The Bootimagetools From The Link Given Above :)
-place the boot.img in source_img folder inside the boot.img-tools
-enter the bootimagetools Directory

-unpack(This Will extract the boot.img)
$ mkdir -p unpack
$ tools/unpackbootimg -i source_img/boot.img -o unpack

-Extracting boot.img-ramdisk.gz(This Will Extract The ramdisk From the boot.img)
$ mkdir -p boot
$ cd boot
$ gzip -dc ../unpack/boot.img-ramdisk.gz | cpio -i
$ cd ../

-Packing a new ramdisk(This Will Pack A new ramdisk which will be used in your kernel)
$ tools/mkbootfs boot | gzip > unpack/boot.img-ramdisk-new.gz

Now As we want to create a boot.img from the zImage you made so copy the zImage from arch/arm/boot
Then goto the folder unpack in bootimagetools directory and delete boot.img-zImage
now paste the zImage You copied from arch/arm/boot and paste it in unpack folder and rename it to boot.img-zImage

-Create a new boot.img:
$ mkdir -p target_img
$ tools/mkbootimg --kernel unpack/boot.img-zImage --ramdisk unpack/boot.img-ramdisk-new.gz -o target_img/boot.img --base `cat unpack/boot.img-base`

Done :)

Now Take The boot.img for target_img folder and flash it via fastboot and dont forget to push modules else wifi will not work :)

=============================
Patching The kernel[The Easy Way]
=============================

This will Show You How to Patch your kernel to the latest version.
All The Patches are Available on kernel.org.
So If you apply the patches manually, then your source code will be messed up and you will face compiling errors+ it's time consuming to allow every patch as yes :p
So I am going to use a program called interdiff to
generate a patch representing the differences between two patches and then
apply the result.

Download:
Code:
http://cyberelk.net/tim/data/patchutils/stable/patchutils-0.3.3.tar.xz

SO Now Setting up the program to work :
1. Download the given file and extract it somewhere ,you swill get a folder named patchutils-0.3.3
2. First Install these Two Packages:
Code:
sudo apt-get install gcc
sudo apt-get install g++
3. Now cd to the folder patchutils-0.3.3
4. Now Type this in terminal
Code:
./configure
5.Now type this
Code:
make
6. Then this
Code:
sudo make install

Now You have setup the program 'interdiff' for applying the patches

To Apply The patches:
Code:
interdiff -z patch-xy patch-yx | patch -p1
Code:
patch-xy: The current kernel version ( for example= patch-3.0.97)
patch-yx: The version to be patched ( for example=patch-3.0.98)

Note: Both the patches should be in your kernel source directory
Credits:
@Red Devil :D (For Teaching me how to compile a kernel)
 
Last edited:

#define

Senior Member
May 1, 2012
2,025
2,180
Brother.. At least change it a little eh??
Or if you want, I can have the original guide thread handed over to you..

ғг๏๓ ҭђє ғเรђ!
 

lozohcum

Senior Member
Jan 14, 2013
1,919
1,745
Internety
How to solve this?

Code:
 LD      drivers/hid/built-in.o
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1408: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1408: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1409: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1409: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1410: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1410: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1415: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1415: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1416: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1416: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1417: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1417: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1418: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1418: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1419: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1419: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1423: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1423: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1424: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1424: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1425: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1425: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1426: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1426: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1427: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1427: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1431: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1431: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1432: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1432: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1433: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1433: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1434: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1434: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1435: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-tamsui-jlo.c:1435: error: (near initialization for 'ion_pdata.heaps')
make[3]: *** [arch/arm/mach-msm/board-tamsui-jlo.o] Błąd 1
make[3]: *** Oczekiwanie na niezakończone zadania....
  CC      net/core/utils.o
  CC      drivers/hwmon/hwmon.o
  CC      fs/fat/fatent.o
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:862: error: 'KGSL_3D0_REG_MEMORY' undeclared here (not in a function)
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:868: error: 'KGSL_3D0_IRQ' undeclared here (not in a function)
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:875: error: variable 'kgsl_3d0_pdata' has initializer but incomplete type
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:876: error: unknown field 'pwrlevel' specified in initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:876: error: extra brace group at end of initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:876: error: (near initialization for 'kgsl_3d0_pdata')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:877: error: extra brace group at end of initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:877: error: (near initialization for 'kgsl_3d0_pdata')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:881: error: extra brace group at end of initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:881: error: (near initialization for 'kgsl_3d0_pdata')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:885: error: extra brace group at end of initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:885: error: (near initialization for 'kgsl_3d0_pdata')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:890: error: unknown field 'init_level' specified in initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:891: error: unknown field 'num_levels' specified in initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:892: error: unknown field 'set_grp_async' specified in initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:893: error: unknown field 'idle_timeout' specified in initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:894: error: unknown field 'strtstp_sleepwake' specified in initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:895: error: unknown field 'nap_allowed' specified in initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:896: error: unknown field 'clk_map' specified in initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c: In function 'msm7x25a_kgsl_3d0_init':
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:912: error: invalid use of undefined type 'struct kgsl_device_platform_data'
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:913: error: invalid use of undefined type 'struct kgsl_device_platform_data'
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:913: error: 'struct resource' has no member named 'gpu_freq'
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:914: error: invalid use of undefined type 'struct kgsl_device_platform_data'
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:914: error: 'struct resource' has no member named 'bus_freq'
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:915: error: invalid use of undefined type 'struct kgsl_device_platform_data'
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:915: error: 'struct resource' has no member named 'gpu_freq'
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:916: error: invalid use of undefined type 'struct kgsl_device_platform_data'
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:916: error: 'struct resource' has no member named 'bus_freq'
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c: In function 'msm8x25_kgsl_3d0_init':
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:923: error: invalid use of undefined type 'struct kgsl_device_platform_data'
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:924: error: invalid use of undefined type 'struct kgsl_device_platform_data'
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:928: error: invalid use of undefined type 'struct kgsl_device_platform_data'
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:928: error: 'struct resource' has no member named 'gpu_freq'
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:930: error: invalid use of undefined type 'struct kgsl_device_platform_data'
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:930: error: 'struct resource' has no member named 'gpu_freq'
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:932: error: invalid use of undefined type 'struct kgsl_device_platform_data'
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:932: error: 'struct resource' has no member named 'bus_freq'
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c: At top level:
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:1581: error: initializer element is not constant
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:1581: error: (near initialization for 'msm8625_kgsl_3d0_resources[0].name')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:1587: error: initializer element is not constant
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/devices-tamsui-jlo.c:1587: error: (near initialization for 'msm8625_kgsl_3d0_resources[1].name')
make[3]: *** [arch/arm/mach-msm/devices-tamsui-jlo.o] Błąd 1
  CC      fs/fat/file.o
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:664: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:664: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:665: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:665: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:666: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:666: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:671: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:671: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:672: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:672: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:673: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:673: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:674: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:674: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:675: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:675: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:679: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:679: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:680: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:680: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:681: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:681: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:682: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:682: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:683: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:683: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:687: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:687: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:688: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:688: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:689: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:689: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:690: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:690: error: (near initialization for 'ion_pdata.heaps')
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:691: error: field name not in record or union initializer
/home/lozohcum/CM/kernel/sony/msm7x27a-3.4/arch/arm/mach-msm/board-qrd7627a.c:691: error: (near initialization for 'ion_pdata.heaps')
make[3]: *** [arch/arm/mach-msm/board-qrd7627a.o] Błąd 1
make[2]: *** [arch/arm/mach-msm] Błąd 2
make[2]: *** Oczekiwanie na niezakończone zadania....

do I have to add -w to more flags?

This is part of my makefile

Code:
CFLAGS_MODULE   = -w
AFLAGS_MODULE   = -w
LDFLAGS_MODULE  =
CFLAGS_KERNEL	= -w
AFLAGS_KERNEL	= -w
CFLAGS_GCOV	= -fprofile-arcs -ftest-coverage
 

ManthanRB

Senior Member
Mar 23, 2012
915
101
London
@Saumitra Yadav can you help me with this?
stuck because of this from 2 days.
Xperia mini | Stock GB kernel Source | ndk 9b

Code:
SYSMAP  System.map
  SYSMAP  .tmp_System.map
  OBJCOPY arch/arm/boot/Image
  Kernel: arch/arm/boot/Image is ready
  AS      arch/arm/boot/compressed/head.o
arch/arm/boot/compressed/head.S: Assembler messages:
arch/arm/boot/compressed/head.S:363: Warning: (null)
arch/arm/boot/compressed/head.S:444: Warning: (null)
arch/arm/boot/compressed/head.S:465: Warning: (null)
arch/arm/boot/compressed/head.S:484: Warning: (null)
arch/arm/boot/compressed/head.S:492: Warning: (null)
arch/arm/boot/compressed/head.S:783: Warning: (null)
arch/arm/boot/compressed/head.S:822: Warning: (null)
arch/arm/boot/compressed/head.S:823: Warning: (null)
arch/arm/boot/compressed/head.S:870: Warning: (null)
arch/arm/boot/compressed/head.S:877: Warning: (null)
arch/arm/boot/compressed/head.S:885: Warning: (null)
arch/arm/boot/compressed/head.S:896: Warning: (null)
arch/arm/boot/compressed/head.S:910: Warning: (null)
arch/arm/boot/compressed/head.S:942: Warning: (null)
arch/arm/boot/compressed/head.S:944: Warning: (null)
arch/arm/boot/compressed/head.S:945: Warning: (null)
arch/arm/boot/compressed/head.S:952: Warning: (null)
arch/arm/boot/compressed/head.S:984: Warning: (null)
  GZIP    arch/arm/boot/compressed/piggy.gz
  AS      arch/arm/boot/compressed/piggy.o
  CC      arch/arm/boot/compressed/misc.o
  LD      arch/arm/boot/compressed/vmlinux
arm-linux-androideabi-ld: error: arch/arm/boot/compressed/piggy.o: unknown CPU architecture
make[2]: *** [arch/arm/boot/compressed/vmlinux] Error 1
make[1]: *** [arch/arm/boot/compressed/vmlinux] Error 2
make: *** [zImage] Error 2
manthanrb@ubuntu:~/android/kernel/4.0.2.A.0.84/kernel$
 
Last edited:

Saumitra Yadav

Senior Member
Feb 25, 2013
309
490
Bangalore
Wrong Toolchain :p Try This Toolchain
git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7
 

Vivek_Neel

Inactive Recognized Contributor / Themer
Dec 23, 2012
10,372
23,696
32
Chennai
Any idea how much time would it take to download all the neccesary things except the packages used for setting up build envi?

Sent from my GT-I9100 using xda premium
 

Top Liked Posts

  • There are no posts matching your filters.
  • 20
    Hey Guys,
    With All the awesome development going on in the Android world. There Are Many newbies who want to strat development but they exactly Dont Know How To begin with or from where to strat with. So I will Write a guide on how to compile your own kernel from source :)


    =================
    What Is A Kernel???
    =================

    The operating system of a device is the part of the device responsible for basic use and administration. This includes the kernel and device drivers, boot loader, command shell or other user interface, and basic file and system utilities. Whereas the user interface is the outermost portition of the operating system, kernel is the innermost. It is the core internals, the software that provides basic services for all other parts of the system, manages hardware and distributes system resources.

    ============================
    Prerequisites To Compile A kernel
    ============================
    1.A Unix Based Os(Ubuntu Recommended Both 32-bit and 64-bit are good to compile a kernel)
    2.A few packages, to let the system know that we are compiling a kernel :p
    3. The Source Code of kernel for your Device :p


    Ok, So Now Lets Begin :)

    ==================
    Packages Required:
    ==================
    Ok So Now Open The Terminal And Copy Paste This Code:
    Code:
    sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 git

    Okay SO Now If You Are using Ubuntu12.04 , you need to create links of certain files
    Code:
    sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
    Okay now we are done with installing packages :)


    SO Now we need java

    Open a terminal and Run This Code:
    sudo add-apt-repository ppa:ferramroberto/java
    Then Run This:
    Then Type This:
    sudo apt-get-install sun-java6-jdk

    So Now You Have all the needed packages to compile a kernel :)

    Next you need the bootimagetools,source code of kernel and Androidtoolchainsto compile a kernel :)

    Bootimagetools:https://github.com/SaumitraYadav/Boot-Image-tools

    AndroidToolchains:https://github.com/SaumitraYadav/Android_Toolchains

    Okay once you have Downloaded everything ... now Lets Start Compiling A Kernel :)

    Ok So Fireup A Terminal :
    Code:
    mkdir kernel
    This Will Create a Directory named kernel in your Home Folder
    Now extract your kernel Source in this directory

    Then Run This:
    Code:
    cd kernel

    Now You Have To Edit the Make File:
    Code:
    gedit Makefile
    The Make file will open.........look out for this and change CROSS_COMPILE= "your toolchain path"

    EXAMPLE:
    Code:
    CROSS_COMPILE?= /home/saumitra/Downloads/Toolchains/arm-eabi-4.4.3/bin/arm-eabi-

    this will open up Makefile in gedit, now set the path where youn have downloaded and extracted the toolchains :)

    Now, make the kernel config
    Code:
    make pico_defconfig
    Note: I have a Htc Explorer and my device codename is pico. So i run pico_defconfig
    Now Other device users have to look for codename or config names in arch/arm/configs


    This Will Make a working kernel config according to the source :)

    Now, if You Wanna Make Some Changes In Your Source Do so , and run this command to start compiling:
    Code:
    make -jX

    The X can be replaced by the maximum number of jobs your computer can handle simultaneously.. The higher this number, the faster the compiling will get.. But do not enter a number too high, your computer may explode due to overheating.

    Okay if all goes well your kernel will be compiled in 15mins :)

    The resulting kernel will be in Kernel/arch/arm/boot/zImage

    Now We also need modules for wifi and BT to work. So,
    find . -name '*ko' -exec cp '{}' modules \;

    Okay So Now The Moules will be in kernel/modules :)

    So Now We will pack the kernel to be flashed on the target Device :)

    -Okay So Now Get A Working Boot.img Of THe Rom on which Wanna Test Your Kernel
    -Download and extract The Bootimagetools From The Link Given Above :)
    -place the boot.img in source_img folder inside the boot.img-tools
    -enter the bootimagetools Directory

    -unpack(This Will extract the boot.img)
    $ mkdir -p unpack
    $ tools/unpackbootimg -i source_img/boot.img -o unpack

    -Extracting boot.img-ramdisk.gz(This Will Extract The ramdisk From the boot.img)
    $ mkdir -p boot
    $ cd boot
    $ gzip -dc ../unpack/boot.img-ramdisk.gz | cpio -i
    $ cd ../

    -Packing a new ramdisk(This Will Pack A new ramdisk which will be used in your kernel)
    $ tools/mkbootfs boot | gzip > unpack/boot.img-ramdisk-new.gz

    Now As we want to create a boot.img from the zImage you made so copy the zImage from arch/arm/boot
    Then goto the folder unpack in bootimagetools directory and delete boot.img-zImage
    now paste the zImage You copied from arch/arm/boot and paste it in unpack folder and rename it to boot.img-zImage

    -Create a new boot.img:
    $ mkdir -p target_img
    $ tools/mkbootimg --kernel unpack/boot.img-zImage --ramdisk unpack/boot.img-ramdisk-new.gz -o target_img/boot.img --base `cat unpack/boot.img-base`

    Done :)

    Now Take The boot.img for target_img folder and flash it via fastboot and dont forget to push modules else wifi will not work :)

    =============================
    Patching The kernel[The Easy Way]
    =============================

    This will Show You How to Patch your kernel to the latest version.
    All The Patches are Available on kernel.org.
    So If you apply the patches manually, then your source code will be messed up and you will face compiling errors+ it's time consuming to allow every patch as yes :p
    So I am going to use a program called interdiff to
    generate a patch representing the differences between two patches and then
    apply the result.

    Download:
    Code:
    http://cyberelk.net/tim/data/patchutils/stable/patchutils-0.3.3.tar.xz

    SO Now Setting up the program to work :
    1. Download the given file and extract it somewhere ,you swill get a folder named patchutils-0.3.3
    2. First Install these Two Packages:
    Code:
    sudo apt-get install gcc
    sudo apt-get install g++
    3. Now cd to the folder patchutils-0.3.3
    4. Now Type this in terminal
    Code:
    ./configure
    5.Now type this
    Code:
    make
    6. Then this
    Code:
    sudo make install

    Now You have setup the program 'interdiff' for applying the patches

    To Apply The patches:
    Code:
    interdiff -z patch-xy patch-yx | patch -p1
    Code:
    patch-xy: The current kernel version ( for example= patch-3.0.97)
    patch-yx: The version to be patched ( for example=patch-3.0.98)

    Note: Both the patches should be in your kernel source directory
    Credits:
    @Red Devil :D (For Teaching me how to compile a kernel)
    1
    Great Guide For Noobs Like Me :D
    1
    Added Guide on How to Patch the Kernel :D Happy compiling :D
    1
    Added Guide on How to Patch the Kernel :D Happy compiling :D

    i need a easy way for patching kernel ...thnxx man u helped a lot ..>!!:laugh: