[ Guide ] [ Tutorial ] Compiling 64 bit Android Kernel [ Yureka ] [ NOOB Friendly ] - YU Yureka Q&A, Help & Troubleshooting

This is My first post on XDA
From the day I owned YUreka I always wished to compile my own kernel. I searched on the web for compiling 64bit android kernel but didn't get satisfying results. So I did some research and asked some android developers, I got help from some developers but some of the developer refused may be due to their attitude or may be they didn't want to share their ideas / knowledge. Anyways here's a guide for compiling 64 bit kernel. I have also made a video tutorial check that out [ status == uploaded ].
What will YU need :
1. Ubuntu 64 Bit OS
2. Good Internet Connection.
3. Usable Brain.
4. Basic Knowledge of Linux.
Lets Start
First we need to get some important stuff / tools / software .
1. Open Ubuntu Software center and install JDK 7 or JDK 8
2. Open terminal and run the following command
Code:
sudo apt-get install libncurses5-dev
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 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
Code:
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
Code:
sudo apt-get install -y ccache &&echo 'export PATH="/usr/lib/ccache:$PATH"' | tee -a ~/.bashrc &&source ~/.bashrc && echo $PATH
Code:
export USE_CCACHE=1
Code:
mkdir ~/bin
Code:
export PATH=~/bin:$PATH
Code:
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
Code:
chmod a+x ~/bin/repo
Now YU'r Linux machine is all set to compile kernel.
3. Now YU need to download a toolchain. I have uploaded the toolchain that i used for compiling the kernel. Click from here > h t t p s ://drive.google.com/open?id=0B9D4jOdpRzZHOURMTS1VaXplc0U
4. Time to download Kernel sources. For this tutorial I am using Varun Chitre's Thunderzap kernel. Here is the link for thunderzap's sources > h t t p s ://github.com/varunchitre15/thunderzap_tomato
.Select branch as cm 12.1 from left and press download on the right.
5. Make a directory "android-kernel" under "/Home" and place both the zips in "android-kernel" directory.
6. Extract both the zips. Now YU will have two folders one of toolchain and other of kernel source.
7. YU no more need the zip files just delete both the zips.
8. Open the kernel source folder and type the following code.
9. Run the following command to point the variable to toolchains path :
Code:
export CROSS_COMPILE=/home/r0h4n/android-kernel/aarch64-linux-android-4.9-uber-master/bin/aarch64-linux-android-
If YU followed along with me YU will just have to change the name of the user ( replace <r0h4n> with <YU'r username> )
10. Time to Compile your kernel :
Code:
export ARCH=arm64
Code:
export SUBARCH=arm64
Code:
export USE_CCACHE=1
Code:
make cyanogenmod_tomato-64_defconfig
The name of defconfig file may be different check it in "kernel_source/arch/arm64/defconfig/"
Code:
make menuconfig
Here YU can explore various options. I'll not explain everything in detail here.
Now the final command make. It takes a parameter -jn. Where ( n = # of threads per core + 1 )
I have a Dual core processor with 2 thread per processor so for me it is " make -j3 ".
Code:
make -j3
Now sit back and relax.......let the kernel compile
Got a compilation error ?
Post it here.
Now we need to create a flashable zip. Download this kernel flash zip from here > h t t p s : //drive.google.com/open?id=0B9D4jOdpRzZHdTJibndqQzhVdFk
1. Extract kernel.zip.
2. Navigate to tools in "/kernel".
3. Open "kernel_source/arch/arm64/boot/".
4. Copy "Image".
5. Replace it with the "Image" in "/kernel/tools/Image".
6. Copy "kernel_source/driver/stagging/prima/wlan.ko" and replace it with "kernel/system/lib/modules/wlan.ko".
7. Goto "/kernel" select all the three folders "META-INF", "system", "tools" and rezip it.
8. Flash the zip via recovery and now YU'r Phone rocks YU'r own compile kernel.

Rohan459 said:
This is My first post on XDA
Click to expand...
Click to collapse
Life saver for the 64bit part, thank you very much! :good::good::good:

some issues
Hello, i'm trying to compile this kernel (for xiaomi redmi note 3 "kenzo") https://github.com/cyanogenmod/android_kernel_xiaomi_msm8956/tree/stable/cm-13.0-ZNH5Y, and get the flashable zip.
I made a few tries and i can't do it, i going to tell you my problems and how i could fix some of them.
Error 1:
when i try to compile i get this error:
scripts/Makefile.build:455: recipe for target 'drivers/video/msm' failed
make[2]: *** [drivers/video/msm] Error 2
scripts/Makefile.build:455: recipe for target 'drivers/video' failed
make[1]: *** [drivers/video] Error 2
make[1]: *** Waiting for unfinished jobs....
I solved it changing a line in /home/user/Desktop/android_kernel_xiaomi_msm8956-stable-cm-13.0-ZNH5Y/drivers/video/msm/msm_dba/msm_dba.c
I changed #include <msm_dba_internal.h> for rhis #include "msm_dba_internal.h"
After that i get another error.
Error 2:
After solve Error 1, when i try to compile i get this error:
make[1]: *** No rule to make target 'arch/arm64/boot/dts/msm8956-mtp.dtb', needed by 'arch/arm64/boot/Image.gz-dtb'. Stop.
make[1]: *** Waiting for unfinished jobs....
OBJCOPY arch/arm64/boot/Image
/home/guille/Desktop/android_kernel_xiaomi_msm8956-stable-cm-13.0-ZNH5Y/arch/arm64/Makefile:84: recipe for target 'Image.gz-dtb' failed
make: *** [Image.gz-dtb] Error 2
make: *** Waiting for unfinished jobs....
This error i solved disabling this line #CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE=y in cyanogenmod_kenzo_defconfig, but i don't know if this is the correct way.
After that changes i get finally the image (used in the tutorial) and image.gz, then i proced to put the image and wlan.ko in in kernel.zip, but when i flash it the phone don't boot.
What can i do?
P.S.: Sorry my bad english.

Hello the friend really super guide and especially the only one or with whom I managed to compile my own kernel.
Is especially as said in the OP I contact a lot of kernel dev and nobody answered so I will have only one person to thank lol.

omega691 said:
Hello, i'm trying to compile this kernel (for xiaomi redmi note 3 "kenzo") https://github.com/cyanogenmod/android_kernel_xiaomi_msm8956/tree/stable/cm-13.0-ZNH5Y, and get the flashable zip.
I made a few tries and i can't do it, i going to tell you my problems and how i could fix some of them.
Error 1:
when i try to compile i get this error:
scripts/Makefile.build:455: recipe for target 'drivers/video/msm' failed
make[2]: *** [drivers/video/msm] Error 2
scripts/Makefile.build:455: recipe for target 'drivers/video' failed
make[1]: *** [drivers/video] Error 2
make[1]: *** Waiting for unfinished jobs....
I solved it changing a line in /home/user/Desktop/android_kernel_xiaomi_msm8956-stable-cm-13.0-ZNH5Y/drivers/video/msm/msm_dba/msm_dba.c
I changed #include <msm_dba_internal.h> for rhis #include "msm_dba_internal.h"
After that i get another error.
Error 2:
After solve Error 1, when i try to compile i get this error:
make[1]: *** No rule to make target 'arch/arm64/boot/dts/msm8956-mtp.dtb', needed by 'arch/arm64/boot/Image.gz-dtb'. Stop.
make[1]: *** Waiting for unfinished jobs....
OBJCOPY arch/arm64/boot/Image
/home/guille/Desktop/android_kernel_xiaomi_msm8956-stable-cm-13.0-ZNH5Y/arch/arm64/Makefile:84: recipe for target 'Image.gz-dtb' failed
make: *** [Image.gz-dtb] Error 2
make: *** Waiting for unfinished jobs....
This error i solved disabling this line #CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE=y in cyanogenmod_kenzo_defconfig, but i don't know if this is the correct way.
After that changes i get finally the image (used in the tutorial) and image.gz, then i proced to put the image and wlan.ko in in kernel.zip, but when i flash it the phone don't boot.
What can i do?
P.S.: Sorry my bad english.
Click to expand...
Click to collapse
Change directory and try again
Sent from my Redmi 3S using Tapatalk

i have this error:
sound/soc/msm/msm8996.c:34:26: fatal error: device_event.h: No such file or directory
#include <device_event.h>
^
compilation terminated.
i'm on ubuntu 16.04.02 x64
i think the problem is the library "libevent-dev" but i don't understand how to fix it because libevent-dev is installed

problem in yureka
i rooted my phone long back.. but i didnt used it...lots of problems in it it is in boot loop amd when ever it is luckily on wifi is not working ...it is not even displaying near by wifi and not even data connection ,i thought of new cm12 rom and flashed it stiill same issue. and more over after flashing stock cm12 and it is still in boot loop..please help

Hello there,
i am having this said problem when i follow your tutorial on how to build a 64bit kernel.
Code:
In file included from include/linux/compiler.h:54:0,
from include/uapi/linux/stddef.h:1,
from include/linux/stddef.h:4,
from /home/protox/android/berlin_kernel/include/uapi/linux/posix_types.h:4,
from include/uapi/linux/types.h:13,
from include/linux/types.h:5,
from include/linux/mod_devicetable.h:11,
from scripts/mod/devicetable-offsets.c:2:
include/linux/compiler-gcc.h:106:30: fatal error: linux/compiler-gcc7.h: No such file or directory
#include gcc_header(__GNUC__)
^
compilation terminated.
/home/protox/android/berlin_kernel/scripts/mod/Makefile:34: recipe for target 'scripts/mod/devicetable-offsets.s' failed
make[2]: *** [scripts/mod/devicetable-offsets.s] Error 1
scripts/Makefile.build:468: recipe for target 'scripts/mod' failed
make[1]: *** [scripts/mod] Error 2
make[1]: *** Waiting for unfinished jobs....
HOSTCC scripts/dtc/livetree.o
HOSTCC scripts/dtc/srcpos.o
HOSTCC scripts/dtc/treesource.o
HOSTCC scripts/dtc/util.o
HOSTCC scripts/dtc/dtc-lexer.lex.o
HOSTCC scripts/dtc/dtc-parser.tab.o
HOSTLD scripts/dtc/dtc
Makefile:559: recipe for target 'scripts' failed
make: *** [scripts] Error 2
make: *** Waiting for unfinished jobs....
Can you please help me out mate
Thanks

hello sir can you help me please??
my device is redmi note 4x ( mido ) snapdragon 625 64 bit i build kernel without error but when i want to flash it on my device
device not boot to system but to fastboot mod and need to flash other kernel to make it boot ?? any idea about that ?

Compiling kernrl
I need some help if any body is out there .after months of trying and trying i am finally able to compli my kernel .after is completes with no error i go to arch/arm64/boot and all i have is am image.gz and and image no ziamge or nothing ive goigle it but i cant figure out whats the next step

akino553 said:
hello sir can you help me please??
my device is redmi note 4x ( mido ) snapdragon 625 64 bit i build kernel without error but when i want to flash it on my device
device not boot to system but to fastboot mod and need to flash other kernel to make it boot ?? any idea about that ?
Click to expand...
Click to collapse
The kernel has not compiled properly...

fowler82 said:
I need some help if any body is out there .after months of trying and trying i am finally able to compli my kernel .after is completes with no error i go to arch/arm64/boot and all i have is am image.gz and and image no ziamge or nothing ive goigle it but i cant figure out whats the next step
Click to expand...
Click to collapse
Find a zip with the image.gz and image file and replace the files with ur compiled files.

Rohan459 said:
Find a zip with the image.gz and image file and replace the files with ur compiled files.
Click to expand...
Click to collapse
Once I build the kernel and I build the modules how do i find them to load them does anybody no

Toolchains

fowler82 said:
Once I build the kernel and I build the modules how do i find them to load them does anybody no
Click to expand...
Click to collapse
go in kernel root directory and within search box look for .ko files. It will give you a list of modules from where you can copy them and paste in your new ROM system/lib/modules directory.

can any device use the kernel.zip to flash the boot.img after replacing wlan.ko ?

Rohan459 said:
This is My first post on XDA
From the day I owned YUreka I always wished to compile my own kernel. I searched on the web for compiling 64bit android kernel but didn't get satisfying results. So I did some research and asked some android developers, I got help from some developers but some of the developer refused may be due to their attitude or may be they didn't want to share their ideas / knowledge. Anyways here's a guide for compiling 64 bit kernel. I have also made a video tutorial check that out [ status == uploaded ].
What will YU need :
1. Ubuntu 64 Bit OS
2. Good Internet Connection.
3. Usable Brain.
4. Basic Knowledge of Linux.
Lets Start
First we need to get some important stuff / tools / software .
1. Open Ubuntu Software center and install JDK 7 or JDK 8
2. Open terminal and run the following command
Code:
sudo apt-get install libncurses5-dev
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 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
Code:
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
Code:
sudo apt-get install -y ccache &&echo 'export PATH="/usr/lib/ccache:$PATH"' | tee -a ~/.bashrc &&source ~/.bashrc && echo $PATH
Code:
export USE_CCACHE=1
Code:
mkdir ~/bin
Code:
export PATH=~/bin:$PATH
Code:
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
Code:
chmod a+x ~/bin/repo
Now YU'r Linux machine is all set to compile kernel.
3. Now YU need to download a toolchain. I have uploaded the toolchain that i used for compiling the kernel. Click from here > h t t p s ://drive.google.com/open?id=0B9D4jOdpRzZHOURMTS1VaXplc0U
4. Time to download Kernel sources. For this tutorial I am using Varun Chitre's Thunderzap kernel. Here is the link for thunderzap's sources > h t t p s ://github.com/varunchitre15/thunderzap_tomato
.Select branch as cm 12.1 from left and press download on the right.
5. Make a directory "android-kernel" under "/Home" and place both the zips in "android-kernel" directory.
6. Extract both the zips. Now YU will have two folders one of toolchain and other of kernel source.
7. YU no more need the zip files just delete both the zips.
8. Open the kernel source folder and type the following code.
9. Run the following command to point the variable to toolchains path :
Code:
export CROSS_COMPILE=/home/r0h4n/android-kernel/aarch64-linux-android-4.9-uber-master/bin/aarch64-linux-android-
If YU followed along with me YU will just have to change the name of the user ( replace <r0h4n> with <YU'r username> )
10. Time to Compile your kernel :
Code:
export ARCH=arm64
Code:
export SUBARCH=arm64
Code:
export USE_CCACHE=1
Code:
make cyanogenmod_tomato-64_defconfig
The name of defconfig file may be different check it in "kernel_source/arch/arm64/defconfig/"
Code:
make menuconfig
Here YU can explore various options. I'll not explain everything in detail here.
Now the final command make. It takes a parameter -jn. Where ( n = # of threads per core + 1 )
I have a Dual core processor with 2 thread per processor so for me it is " make -j3 ".
Code:
make -j3
Now sit back and relax.......let the kernel compile
Got a compilation error ?
Post it here.
Now we need to create a flashable zip. Download this kernel flash zip from here > h t t p s : //drive.google.com/open?id=0B9D4jOdpRzZHdTJibndqQzhVdFk
1. Extract kernel.zip.
2. Navigate to tools in "/kernel".
3. Open "kernel_source/arch/arm64/boot/".
4. Copy "Image".
5. Replace it with the "Image" in "/kernel/tools/Image".
6. Copy "kernel_source/driver/stagging/prima/wlan.ko" and replace it with "kernel/system/lib/modules/wlan.ko".
7. Goto "/kernel" select all the three folders "META-INF", "system", "tools" and rezip it.
8. Flash the zip via recovery and now YU'r Phone rocks YU'r own compile kernel.
Click to expand...
Click to collapse
created kernel using tutorial,,,but this kernel boots in fastboot mode only..
dont know why..
device is lenovo k6 note(sd430 msm8937)
please help

i am facing this error and can not resolve the problem.
property '#gpio-cells' in node /soc/msm_cdc_pinctrl_us_euro_sw or bad phandle (referred from /soc/sound:qcom,cdc-us-eu-gpios[0])
arch/arm64/boot/dts/qcom/msm8953-pmi8937.dtb: Warning (gpios_property): Missing property '#gpio-cells' in node /soc/cdc_comp_pinctrl or bad phandle (referred from /soc/sound:qcom,cdc-comp-gpios[0])
arch/arm64/boot/dts/qcom/msm8953-pmi8937.dtb: Warning (gpios_property): Missing property '#gpio-cells' in node /soc/msm_cdc_pinctrl_pri or bad phandle (referred from /soc/sound:qcom,pri-mi2s-gpios[0])
arch/arm64/boot/dts/qcom/msm8953-pmi8937.dtb: Warning (gpios_property): Missing property '#gpio-cells' in node /soc/msm_cdc_pinctrl_quin or bad phandle (referred from /soc/sound:qcom,quin-mi2s-gpios[0])
arch/arm64/boot/dts/qcom/msm8953-pmi8937.dtb: Warning (gpios_property): Missing property '#gpio-cells' in node /soc/msm_cdc_pinctrl_us_euro_sw or bad phandle (referred from /soc/sound-9335:qcom,cdc-us-eu-gpios[0])
arch/arm64/boot/dts/qcom/msm8953-pmi8937.dtb: Warning (gpios_property): Missing property '#gpio-cells' in node /soc/msm_cdc_pinctrl_quin or bad phandle (referred from /soc/sound-9335:qcom,quin-mi2s-gpios[0])
arch/arm64/boot/dts/qcom/msm8953-pmi8937.dtb: Warning (interrupts_property): interrupts size is (12), expected multiple of 8 in /soc/[email protected]
CC lib/mpi/generic_mpih-lshift.o
DTC arch/arm64/boot/dts/qcom/msm8953-ext-codec-rcm-overlay.dtbo
Error: ../arch/arm64/boot/dts/qcom/msm8953-audio-cdp.dtsi:14.1-11 syntax error
FATAL ERROR: Unable to parse input tree
scripts/Makefile.dtbo:24: recipe for target 'arch/arm64/boot/dts/qcom/msm8953-ext-codec-rcm-overlay.dtbo' failed
make[3]: *** [arch/arm64/boot/dts/qcom/msm8953-ext-codec-rcm-overlay.dtbo] Error 1
../scripts/Makefile.build:653: recipe for target 'arch/arm64/boot/dts/qcom' failed
make[2]: *** [arch/arm64/boot/dts/qcom] Error 2
arch/arm64/Makefile:194: recipe for target 'dtbs' failed
make[1]: *** [dtbs] Error 2
make[1]: *** Waiting for unfinished jobs..

Related

[Q] Help Compiling the source

Trying to compile the source for the archos gen 8s. If I can compile it, I might be able to add in root support, but I have hit a snag. When I compile I get this:
Code:
make[4]: Leaving directory `/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/build_arm/glib-2.16.5/gthread'
make[3]: Leaving directory `/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/build_arm/glib-2.16.5/gthread'
Making install in gobject
make[3]: Entering directory `/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/build_arm/glib-2.16.5/gobject'
/usr/bin/make glib-genmarshal
make[4]: Entering directory `/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/build_arm/glib-2.16.5/gobject'
make[4]: `glib-genmarshal' is up to date.
make[4]: Leaving directory `/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/build_arm/glib-2.16.5/gobject'
echo "#ifndef __G_MARSHAL_H__" > xgen-gmh \
&& echo "#define __G_MARSHAL_H__" >> xgen-gmh \
&& --nostdinc --prefix=g_cclosure_marshal ./gmarshal.list --header >> xgen-gmh \
&& echo "#endif /* __G_MARSHAL_H__ */" >> xgen-gmh \
&& (cmp -s xgen-gmh gmarshal.h 2>/dev/null || cp xgen-gmh gmarshal.h) \
&& rm -f xgen-gmh xgen-gmh~ \
&& echo timestamp > stamp-gmarshal.h
[COLOR="Red"]/bin/bash: line 2: --nostdinc: command not found[/COLOR]
make[3]: *** [stamp-gmarshal.h] Error 127
make[3]: Leaving directory `/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/build_arm/glib-2.16.5/gobject'
make[2]: *** [install-recursive] Error 1
make[2]: Leaving directory `/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/build_arm/glib-2.16.5'
make[1]: *** [install] Error 2
make[1]: Leaving directory `/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/build_arm/glib-2.16.5'
make: *** [/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/build_arm/staging_dir/lib/libglib-2.0.a] Error 2
I googled around and was unable to figure out what is going on there. --nostdinc should be a command for GCC, but doesn't seem to be working correctly. When I run gcc -v I get:
Code:
Using built-in specs.
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.4.4-14ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
Thread model: posix
gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5)
PS If you do get it compiled I found where you can override user for certain applications: /buildroot/package/dbus/archos.conf
It looks like this:
Code:
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<!-- ../system.conf have denied everything, so we just punch some holes -->
<policy user="root">
<allow own="com.archos.emaild"/>
</policy>
<!-- Add your service name
<policy user="root">
<allow own="com.archos.Service"/>
</policy>
-->
</busconfig>
the whole build process seems to be buggy as hell
# make menuconfig
results in
Code:
package/Config.in:443: can't open file "package/apdf/Config.in"
# make clean
results in
Code:
/data/temp/archos/gen8-gpl-froyo/buildroot/project_build_arm/uclibc/root/usr/share/info/dir: could not read (No such file or directory) and could not create (No such file or directory)
make[2]: *** [uninstall-info-am] Error 1
make[2]: Leaving directory `/data/temp/archos/gen8-gpl-froyo/buildroot/build_arm/diffutils-2.8.7/doc'
make[1]: *** [uninstall-recursive] Error 1
make[1]: Leaving directory `/data/temp/archos/gen8-gpl-froyo/buildroot/build_arm/diffutils-2.8.7'
make: *** [diffutils-clean] Error 2
How long did yours compile for? Mine compiled for over an hour before failing.
I'll start all over again and measure it.
Code:
/data/temp/archos/gen8-gpl-froyo/buildroot/build_arm/staging_dir/usr/bin/arm-linux-uclibcgnueabi-gcc -shared .libs/libgphoto2_la-gphoto2-abilities-list.o .libs/libgphoto2_la-ahd_bayer.o .libs/libgphoto2_la-bayer.o .libs/libgphoto2_la-gphoto2-camera.o .libs/libgphoto2_la-gphoto2-context.o .libs/libgphoto2_la-exif.o .libs/libgphoto2_la-gphoto2-file.o .libs/libgphoto2_la-gphoto2-filesys.o .libs/libgphoto2_la-gamma.o .libs/libgphoto2_la-jpeg.o .libs/libgphoto2_la-gphoto2-list.o .libs/libgphoto2_la-gphoto2-result.o .libs/libgphoto2_la-gphoto2-version.o .libs/libgphoto2_la-gphoto2-setting.o .libs/libgphoto2_la-gphoto2-widget.o -Wl,--rpath -Wl,/data/temp/archos/gen8-gpl-froyo/buildroot/project_build_arm/uclibc/root/usr/lib -L/data/temp/archos/gen8-gpl-froyo/buildroot/build_arm/staging_dir/lib -L/data/temp/archos/gen8-gpl-froyo/buildroot/build_arm/staging_dir/usr/lib -L/usr/lib -lgphoto2_port -L/data/temp/archos/gen8-gpl-froyo/buildroot/project_build_arm/uclibc/root/usr/lib -L/data/temp/archos/gen8-gpl-froyo/buildroot/build_arm/staging_dir/data/temp/archos/gen8-gpl-froyo/buildroot/project_build_arm/uclibc/root/usr/lib -lltdl -lm -isysroot /data/temp/archos/gen8-gpl-froyo/buildroot/build_arm/staging_dir -mtune=cortex-a8 -isysroot /data/temp/archos/gen8-gpl-froyo/buildroot/build_arm/staging_dir -mtune=cortex-a8 -Wl,-soname -Wl,libgphoto2.so.2 -Wl,-version-script -Wl,.libs/libgphoto2.ver -o .libs/libgphoto2.so.2.4.0
/usr/lib/libltdl.so: file not recognized: File format not recognized
collect2: ld returned 1 exit status
libtool: install: error: relink `libgphoto2.la' with the above command before installing it
make[3]: *** [install-libLTLIBRARIES] Error 1
make[3]: Leaving directory `/data/temp/archos/gen8-gpl-froyo/buildroot/build_arm/libgphoto2-2.4.9.1/libgphoto2'
make[2]: *** [install-am] Error 2
make[2]: Leaving directory `/data/temp/archos/gen8-gpl-froyo/buildroot/build_arm/libgphoto2-2.4.9.1/libgphoto2'
make[1]: *** [install-recursive] Error 1
make[1]: Leaving directory `/data/temp/archos/gen8-gpl-froyo/buildroot/build_arm/libgphoto2-2.4.9.1'
make: *** [/data/temp/archos/gen8-gpl-froyo/buildroot/build_arm/staging_dir/usr/lib/libgphoto2.so] Error 2
real 38m3.275s
user 50m36.129s
sys 6m27.836s
I don't know why it's referring to /usr/lib/libltdl.so because this would be a 64bit lib of my linux machine. bug?
You two realise that you can't just use a PC version of gcc to compile an arm version of sw?
You need the crosscompile toolchain to do this, and than its working correctly.
the toolchain is inside the xxx.tgz archive and it is used for building. no need for extra toolchain
But laptopfeak is using something that does:
Target: i686-linux-gnu
wrong. he just typed gcc -v in his shell. this uses of course his very own gcc and not the one served by the archos toolchain.
when I type gcc -v using the archos toolchain it looks like this:
# gen8-gpl-froyo/buildroot/build_arm/staging_dir/usr/bin/arm-linux-gcc -v
Using built-in specs.
Target: arm-linux-uclibcgnueabi
Configured with: /data/temp/archos/gen8-gpl-froyo/buildroot/toolchain_build_arm/gcc-4.4.1/configure --prefix=/usr --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --target=arm-linux-uclibcgnueabi --enable-languages=c,c++ --with-sysroot=/data/temp/archos/gen8-gpl-froyo/buildroot/build_arm/staging_dir --with-build-time-tools=/data/temp/archos/gen8-gpl-froyo/buildroot/build_arm/staging_dir/usr/arm-linux-uclibcgnueabi/bin --disable-__cxa_atexit --enable-target-optspace --with-gnu-ld --enable-shared --with-gmp=/data/temp/archos/gen8-gpl-froyo/buildroot/toolchain_build_arm/gmp --with-mpfr=/data/temp/archos/gen8-gpl-froyo/buildroot/toolchain_build_arm/mpfr --disable-nls --enable-threads --disable-multilib --with-tune=cortex-a8 --with-cpu=cortex-a8 --with-arch=armv7-a --with-fpu=vfp3 --with-float=softfp
Thread model: posix
gcc version 4.4.1 (GCC)
Click to expand...
Click to collapse
the toolchain builds the crosscompiler itself and then starts crosscompiling
I did find out why I was getting one of the errors. I was missing some dependencies. Found a quick tutorial on how to compile the kernel for the gen7. http://archos.g3nius.org/index.php?title=Compiling_gen7-gpl
Now I am getting an error about the .config file being out of date. Odd thing is that the make menuconfig does not work... as previously mentioned.
Code:
PATH="/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/toolchain_build_arm/bin:/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/build_arm/staging_dir/bin:/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/build_arm/staging_dir/usr/bin:/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/build_arm/staging_dir/usr/bin/:/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/build_arm/staging_dir/usr/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin" \
./Configure linux-arm --prefix=/ \
--openssldir=/lib/ssl -L/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/build_arm/staging_dir/lib -ldl \
-I/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/build_arm/staging_dir/usr/include threads \
shared no-idea no-mdc2 no-rc5)
Configuring for linux-arm
IsWindows=0
CC =gcc
CFLAG =-fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DOPENSSL_NO_KRB5 -I/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/build_arm/staging_dir/usr/include -DOPENSSL_NO_IDEA -DOPENSSL_NO_MDC2 -DOPENSSL_NO_RC5 -DL_ENDIAN -DTERMIO -fomit-frame-pointer -Wall
EX_LIBS =-L/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/build_arm/staging_dir/lib -ldl -ldl
BN_ASM =bn_asm.o
DES_ENC =des_enc.o fcrypt_b.o
BF_ENC =bf_enc.o
CAST_ENC =c_enc.o
RC4_ENC =rc4_enc.o
RC5_ENC =rc5_enc.o
MD5_OBJ_ASM =
SHA1_OBJ_ASM =
RMD160_OBJ_ASM=
PROCESSOR =
RANLIB =/usr/bin/ranlib
ARFLAGS =
PERL =/usr/bin/perl
THIRTY_TWO_BIT mode
DES_RISC1 used
BN_LLONG mode
RC4_CHUNK is undefined
make[1]: Entering directory `/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/build_arm/openssl-0.9.7m'
Makefile is older than Makefile.org.
Reconfigure the source tree (via './config' or 'perl Configure'), please.
make[1]: *** [Makefile] Error 1
make[1]: Leaving directory `/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/build_arm/openssl-0.9.7m'
/usr/bin/make MAKE="/usr/bin/make -j1" CC=/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/build_arm/staging_dir/usr/bin/arm-linux-uclibcgnueabi-gcc -C /home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/build_arm/openssl-0.9.7m all build-shared
make[1]: Entering directory `/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/build_arm/openssl-0.9.7m'
Makefile is older than Makefile.org.
Reconfigure the source tree (via './config' or 'perl Configure'), please.
make[1]: *** [Makefile] Error 1
make[1]: Leaving directory `/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/build_arm/openssl-0.9.7m'
make: *** [/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/build_arm/openssl-0.9.7m/apps/openssl] Error 2
[email protected]:~/Downloads/Archos/gen8-gpl-froyo/buildroot$ make menuconfig
make CC="/usr/bin/gcc" -C package/config conf mconf
make[1]: Entering directory `/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/package/config'
/usr/bin/gcc -DCURSES_LOC="<ncurses.h>" -DLOCALE -g -O2 -c conf.c -o conf.o
conf.c: In function ‘conf_askvalue’:
conf.c:104: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result
conf.c: In function ‘conf_choice’:
conf.c:362: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result
/usr/bin/gcc -DCURSES_LOC="<ncurses.h>" -DLOCALE -g -O2 -c kxgettext.c -o kxgettext.o
/usr/bin/gcc -DCURSES_LOC="<ncurses.h>" -DLOCALE -g -O2 -c lxdialog/checklist.c -o lxdialog/checklist.o
/usr/bin/gcc -DCURSES_LOC="<ncurses.h>" -DLOCALE -g -O2 -c lxdialog/inputbox.c -o lxdialog/inputbox.o
/usr/bin/gcc -DCURSES_LOC="<ncurses.h>" -DLOCALE -g -O2 -c lxdialog/menubox.c -o lxdialog/menubox.o
/usr/bin/gcc -DCURSES_LOC="<ncurses.h>" -DLOCALE -g -O2 -c lxdialog/textbox.c -o lxdialog/textbox.o
/usr/bin/gcc -DCURSES_LOC="<ncurses.h>" -DLOCALE -g -O2 -c lxdialog/util.c -o lxdialog/util.o
/usr/bin/gcc -DCURSES_LOC="<ncurses.h>" -DLOCALE -g -O2 -c lxdialog/yesno.c -o lxdialog/yesno.o
make[1]: *** No rule to make target `/usr/include/ncurses/ncurses.h', needed by `mconf.o'. Stop.
make[1]: Leaving directory `/home/jonathan/Downloads/Archos/gen8-gpl-froyo/buildroot/package/config'
make: *** [package/config/mconf] Error 2
Oh and this does seem to be the buggiest source/compile I have ever dealt with. But I did talk to someone on xchat last night and they said that they got it to compile out of box.
I installed a fresh ubuntu 10.10 into a virtual machine and installed the packages mentioned on this website: http://archos.g3nius.org/index.php?title=Compiling_gen7-gpl
currently building.. stay tuned..
edit: still buggy
Finally got it to compile thanks to jensbln:
According to him you have to: "disable gdb in /buildroot/local/g8_arm/g8_arm.config"
So I poked around in the g8_arm.config and found the gdb. I then set all instances of gdb to n instead of y. I then had to sudo make, because I was getting permission demied. After that it compiled fine.
Let's see if this works for me too...
edit: failed on the x64 machine.. not that surprisingly as others had problems too. testing on x32..
damn, its not working (failed because of missing symlinks to libmpfr.so.1)..
edit: ahh.. it seems that i missed this dependency: libmpfr1ldbl
edit2: yes, this was the missing dependency.
using a fresh ubuntu 10.10 x32, to compile the froyo gpl sources install these packages:
Code:
# apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl automake autoconf libtool gettext texinfo libmpfr1ldbl
edit3: make menuconfig does work too
Code:
# cd gen8-gpl-froyo/linux
# cp linux.config .config
# make oldconfig
# make menuconfig
chulri said:
the whole build process seems to be buggy as hell
# make menuconfig
results in
Code:
package/Config.in:443: can't open file "package/apdf/Config.in"
# make clean
results in
Code:
/data/temp/archos/gen8-gpl-froyo/buildroot/project_build_arm/uclibc/root/usr/share/info/dir: could not read (No such file or directory) and could not create (No such file or directory)
make[2]: *** [uninstall-info-am] Error 1
make[2]: Leaving directory `/data/temp/archos/gen8-gpl-froyo/buildroot/build_arm/diffutils-2.8.7/doc'
make[1]: *** [uninstall-recursive] Error 1
make[1]: Leaving directory `/data/temp/archos/gen8-gpl-froyo/buildroot/build_arm/diffutils-2.8.7'
make: *** [diffutils-clean] Error 2
Click to expand...
Click to collapse
you are not supposed to use "make menuconfig"
just type "make" in the buildroot folder and it will build the kernel and buildroot packages that are in gen8 units...
@_nz_ you're late, see my last post.
btw: yes I'm supposed to use make menuconfig when I want to change kernel settings without changing the kernel config file manually
chulri said:
@_nz_ you're late, see my last post.
btw: yes I'm supposed to use make menuconfig when I want to change kernel settings without changing the kernel config file manually
Click to expand...
Click to collapse
sure. I was referring more to make menuconfig in buildroot which is not used during our SW development, so it's not really "supported" and might be broken. All our configs are hardcoded
it's not used inside buildroot, I use it inside linux
btw: do you work at archos?
chulri said:
it's not used inside buildroot, I use it inside linux
btw: do you work at archos?
Click to expand...
Click to collapse
Assuming it is the same nz that posts at archosfans then yes he/she is an Archos employee.
blazingwolf said:
Assuming it is the same nz that posts at archosfans then yes he/she is an Archos employee.
Click to expand...
Click to collapse
yes, we are
Hey -nz- I posted this on the Archos Fans forum in response to an answer to my question; why can't we reflash to 2.1. You probably didn't see it......what do you say?
Thanks for the reply about the bootloader. Again ignorance on my part. Surely Archos could release a patch that would allow the bootloader to install any version of the OS? I mean its all just code going into a certain memory address. I have a hard time with companies like Archos who seem to make things difficult for owners. I can see Apple doing it because they really are the 800 pound gorilla in the corner but the Dev Team and smart guys have always found a way round what they do. Archos are a relatively small fish in the pond. The tablet scene is moving very fast and new tablets are coming out every day.
It reminds me of the Pandigital novel. We pleaded with Pandigital to give us the source code. They said they would but never did. The smart guys were able to do wonders with what they had but ultimately within 3 months people had given up and moved on. Once the smart guys were gone all development stopped and now the PDN is just a mostly forgotten memory. If Pandigital had of opened up, the word of mouth would have spread, people would have bought their reader, hacked it and they would have both sold more and got the hearts and minds (and money) of people who would have considered any product they brought out. Now they are pretty much dead in the water and will likely just stay selling photo frames. People and technology has passed them by.
I won't say the same will happen to Archos. They are a bigger fish but they seem to have generated a lot of ill will over the 2.2 release. Even all those who were trumpeting how wonderful 2.2 was going to be have slunk away. Apple will bring out a new iPad next year. The price of the present one is dropping and will continue to do so. Say what you like about the iPad, but it works and it works well. It's too big and I'll probably sell mine again in a month or so depending on what comes out next in the 7 to 8 inch form factor.
Archos have the opportunity to buck the trend and open their software up and let people make it fly. There are some really sharp, switched on guys out there and if given the encouragement and support by Archos, they could do wonders. How cool would it be for Archos to be known as the one company that actually helped and supported its customers. The hardware is all there, the software is lacking but it is easier to make something better if it is only the software that is holding back the hardware.
So come on Mr Archos, if you are reading this, do some deep thinking. Be the tablet company of the people. Lets see some liberté, égalité, fraternité.

[GUIDE] Building CyanogenMod 9 from Source with openSuSE 12.1

Introduction
If you have tried to build Android on systems other than Ubuntu (or Ubuntu based systems) you may have noticed, that there are pretty much no guides for other systems.
I finally set up my openSuSE to build CM9 successfully, and would like to share the process with you.
I will also try to adopt this guide for CM10 if i find the time.
If you find mistakes feel free to post them here or PM me.
Contents
Requirements
About this guide
Install "Oracle JDK"
Install other needed packages
Install "make 3.81"
Install "Android SDK"
Set up source directories
Set up "repo"
Set up repositories
Update source code
Update device specific source code
Copy proprietary files
Download prebuilts
Build CyanogenMod 9
Done!
Possible build errors on openSuSE
Credits
1. Requirements
openSuSE 12.1 64bit (may work on other versions too)
a good internet connection
as much RAM as possible (at least 2GB to finish a build, but that will take very, very long.)
patience
common sense
Note: I did all this in a virtual machine, but i highly recommend installing Linux on your hardware. Building Android takes a long time even on high end hardware.
2. About this guide
Lines beginning with '$' are supposed to be entered in shell (without the $ sign).
File names are bold.
This guide assumes that you set up the sources at ~/android/system/. Feel free to change that.
bacon = device name (e.g. i9300 for Samsung Galaxy SIII I9300. See CyanogenMod Homepage for other devices.)
3. Install "Oracle JDK"
Download latest jdk-6uXX-linux-x64-rpm.bin from http://www.oracle.com/technetwork/java/javase/downloads/jdk6-downloads-1637591.html
$ <downloadfolder>/jdk-6uXX-linux-x64-rpm.bin -x
Open <downloadfolder> in your file manager
Right click jdk-6uXX-linux-x64-rpm -> open with -> Install Software
YaST Software Manager will open up.
DON'T click accept yet.
Search for openJDK and check uninstall for ALL openJDK packages.
DON'T click accept yet, go to next chapter.
4. Install other needed packages
Search and install following packages with YaST
git
gnupg
flex
bison
gperf
SDL-devel
esound-devel
wxGTK-devel
zip
curl
ncurses-devel
ncurses-devel 32bit
zlib-devel
zlib-devel 32bit
gcc-c++
glibc-devel 32bit
libstdc++ 32bit
mesa libs
Now click accept.
5. Install "make 3.81"
Note: Other versions won't work.
Download source from http://ftp.gnu.org/gnu/make/make-3.81.tar.gz.
Extract downloaded file.
$ cd <extracted folder>
$ ./configure
$ make
$ make install
6. Install "Android SDK"
Note: This is pretty straightforward. I will add this section later.
7. Set up source directories
$ mkdir ~/android
$ mkdir ~/android/system
$ mkdir ~/android/cache
8. Set up "repo"
Note: "repo" is a tool by Google, created to make access to git and gerrit very, very easy.
$ mkdir ~/bin
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
Open ~/.bashrc in a file editor (e.g. kwrite)
Add the following line:
PATH=~/bin:$PATH
Save and close.
Close your shell and re-open it.
9. Set up repositories
$ cd ~/android/system
$ repo init -u git://github.com/CyanogenMod/android.git -b ics
10. Update source code
$ cd ~/android/system
$ repo sync -jX
X = number of connections. Try X = 1 if there are problems downloading.
This will take a while.
11. Update device specific source code
$ cd ~/android/system
$ . build/envsetup.sh && breakfast bacon
12. Copy proprietary files
Note: This only needs to be run once. You will need CyanogenMod 9 running on the device you are building for to complete this.
Connect the phone via USB.
Install USB drivers to get ADB access.
$ cd ~/android/system/device/<manufacturer>/<devicename>
$ ./extract-files.sh
13. Download prebuilts
$ ~/android/system/vendor/cm/get-prebuilts
14. Build CyanogenMod 9
$ ~/android/system
$ . build/envsetup.sh && brunch bacon
15. Done!
You now should have a CWM-flashable .zip file ~/android/system/out/target/product/maguro/cm-9-XXXXX-UNOFFICIAL-bacon.zip.
16. Possible build errors on openSuSE
Because Ubuntu is based on Debian and openSuSE is based on Slackware, you will probable get some build errors. In post 2 is a list of errors that can occur and how to fix them.
Credits
CyanogenMod Team
CyanogenMod Wiki
The Software Rouge (http://thesoftwarerogue.blogspot.de/2011/11/building-android-ics-ice-cream-sandwich.html)
Note: I got the fixes for build errors from some page in Google Groups. I can't find it anymore. If someone finds it, please PM me.
Possible build errors on openSuSE
Note: I used kwrite as text editor. To use another, just change kwrite to whatever editor you want to use.
Note: Open shell and got to ~/android/system
Error 1
make gets killed at some point
Fix: you need more RAM to finish the build.
Error 2
Code:
frameworks/base/include/utils/KeyedVector.h:193:31: note: declarations in dependent base ‘android::KeyedVector<android::String8, android::sp<AaptDir> >’ are not found by unqualified lookup
frameworks/base/include/utils/KeyedVector.h:193:31: note: use ‘this->indexOfKey’ instead
make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/AaptAssets.o] Error 1
Fix:
$ kwrite frameworks/base/tools/aapt/Android.mk
Add '-fpermissive' to line 31:
LOCAL_CFLAGS += -Wno-format-y2k -fpermissive
Error 3
Code:
frameworks/base/include/utils/KeyedVector.h:193:31: error: ‘indexOfKey’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
frameworks/base/include/utils/KeyedVector.h:193:31: note: declarations in dependent base ‘android::KeyedVector<android::String8, android::wp<android::AssetManager::SharedZip> >’ are not found by unqualified lookup
frameworks/base/include/utils/KeyedVector.h:193:31: note: use ‘this->indexOfKey’ instead
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/AssetManager.o] Error 1
Fix:
$ kwrite frameworks/base/libs/utils/Android.mk
Add '-fpermissive' to line 64:
LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) -fpermissive
Error 4
Code:
external/srec/tools/thirdparty/OpenFst/fst/lib/cache.h:136:11: note: use ‘this->SetState’ instead
make: *** [out/host/linux-x86/obj/EXECUTABLES/grxmlcompile_intermediates/grxmlcompile.o] Error 1
Fix:
$ cd external/srec
$ wget "https://github.com/CyanogenMod/android_external_srec/commit/4d7ae7b79eda47e489669fbbe1f91ec501d42fb2.diff"
$ patch -p1 < 4d7ae7b79eda47e489669fbbe1f91ec501d42fb2.diff
$ rm -f 4d7ae7b79eda47e489669fbbe1f91ec501d42fb2.diff
$ cd ../..
Error 5
Code:
development/tools/emulator/opengl/host/tools/emugen/main.cpp:79:9: error: ‘optind’ was not declared in this scope
development/tools/emulator/opengl/host/tools/emugen/main.cpp:92:45: error: ‘optind’ was not declared in this scope
make: *** [out/host/linux-x86/obj/EXECUTABLES/emugen_intermediates/main.o] Error 1
Fix:
$ kwrite development/tools/emulator/opengl/host/tools/emugen/main.cpp
Add '#include <getopt.h>' to list of includes:
#include <getopt.h>
Error 6
Code:
host C++: liboprofile_pp <= external/oprofile/libpp/arrange_profiles.cpp
In file included from external/oprofile/libpp/arrange_profiles.cpp:24:0:
external/oprofile/libpp/format_output.h:94:22: error: reference ‘counts’ cannot be declared ‘mutable’ [-fpermissive]
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/liboprofile_pp_intermediates/arrange_profiles.o] Error 1
Fix:
$ kwrite external/oprofile/libpp/format_output.h
Remove 'mutable' from 'mutable counts_t & counts;' on line 94:
counts_t & counts;
Error 7
Code:
development/tools/emulator/opengl/shared/OpenglCodecCommon/GLSharedGroup.cpp:345:65: required from here
frameworks/base/include/utils/KeyedVector.h:193:31: error: ‘indexOfKey’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
frameworks/base/include/utils/KeyedVector.h:193:31: note: declarations in dependent base ‘android::KeyedVector<unsigned int, ShaderData*>’ are not found by unqualified lookup
frameworks/base/include/utils/KeyedVector.h:193:31: note: use ‘this->indexOfKey’ instead
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libOpenglCodecCommon_intermediates/GLSharedGroup.o] Error 1
Fix:
$ kwrite development/tools/emulator/opengl/Android.mk
Add '-fpermissive' to line 25:
EMUGL_COMMON_CFLAGS := -DWITH_GLES2 -fpermissive
Error 8
Code:
/usr/bin/ld: note: 'XInitThreads' is defined in DSO /lib/libX11.so.6 so try adding it to the linker command line
/lib/libX11.so.6: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/EXECUTABLES/emulator_renderer_intermediates/emulator_renderer] Error 1
Fix:
$ kwrite development/tools/emulator/opengl/host/renderer/Android.mk
Add new entry 'LOCAL_LDLIBS += -lX11' after line 6 as shown:
LOCAL_SRC_FILES := main.cpp
LOCAL_CFLAGS += -O0 -g
LOCAL_LDLIBS += -lX11
#ifeq ($(HOST_OS),windows)
#LOCAL_LDLIBS += -lws2_32
Error 9
Code:
external/llvm/include/llvm/ADT/PointerUnion.h:56:10: error: enumeral mismatch in conditional expression: ‘llvm::PointerLikeTypeTraits<llvm::PointerUnion<clang::Stmt*, const clang::Type*> >::<anonymous enum>’ vs ‘llvm::PointerLikeTypeTraits<clang::eek:bjCInterfaceDecl*>::<anonymous enum>’ [-Werror]
cc1plus: all warnings being treated as errors
make: *** [out/host/linux-x86/obj/EXECUTABLES/llvm-rs-cc_intermediates/slang_rs.o] Error 1
Fix:
$ kwrite frameworks/compile/slang/Android.mk
Remove '-Werror' from line 22:
local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter
Error 10
Code:
frameworks/base/libs/rs/rsFont.cpp:224:76: required from here
frameworks/base/include/utils/KeyedVector.h:193:31: error: ‘indexOfKey’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
frameworks/base/include/utils/KeyedVector.h:193:31: note: declarations in dependent base ‘android::KeyedVector<unsigned int, android::renderscript::Font::CachedGlyphInfo*>’ are not found by unqualified lookup
frameworks/base/include/utils/KeyedVector.h:193:31: note: use ‘this->indexOfKey’ instead
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libRS_intermediates/rsFont.o] Error 1
Fix:
$ kwrite frameworks/base/libs/rs/Android.mk
Add '-fpermissive' to line 183:
LOCAL_CFLAGS += -Werror -Wall -Wno-unused-parameter -Wno-unused-variable -fpermissive
Error 11
Code:
external/mesa3d/src/glsl/linker.cpp:1394:49: error: expected primary-expression before ‘,’ token
......
external/mesa3d/src/glsl/linker.cpp:1734:59: error: ‘offsetof’ was not declared in this scope
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libMesa_intermediates/src/glsl/linker.o] Error 1
Fix:
$ kwrite external/mesa3d/src/glsl/linker.cpp
Add '#include <stddef.h>' to list of includes as shown:
#include <climits>
#include <stddef.h>
#include <pixelflinger2/pixelflinger2_interface.h>
Error 12
Code:
external/gtest/src/../include/gtest/gtest-param-test.h:287:58: note: ‘template<class Container> testing::internal::ParamGenerator<typename Container::value_type> testing::ValuesIn(const Container&)’ declared here, later in the translation unit
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libgtest_host_intermediates/gtest-all.o] Error 1
Fix 1:
$ kwrite external/gtest/src/Android.mk
Add '-fpermissive' to lines 52 and 70 (both lines contain same info)
LOCAL_CFLAGS += -O0 -fpermissive
Fix 2:
$ kwrite external/gtest/include/gtest/internal/gtest-param-util.h
Add '#include <stddef.h>' to list of includes as shown:
#include <vector>
#include <stddef.h>
#include <gtest/internal/gtest-port.h>
Error 13
Code:
frameworks/compile/slang/slang_rs_export_foreach.cpp: In static member function ‘static slang::RSExportForEach* slang::RSExportForEach::Create(slang::RSContext*, const clang::FunctionDecl*)’:
frameworks/compile/slang/slang_rs_export_foreach.cpp:249:23: error: variable ‘ParamName’ set but not used [-Werror=unused-but-set-variable]
cc1plus: all warnings being treated as errors
make: *** [out/host/linux-x86/obj/EXECUTABLES/llvm-rs-cc_intermediates/slang_rs_export_foreach.o] Error 1
Fix:
$ kwrite kwrite frameworks/compile/slang/Android.mk
change
local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter -Werror
to
local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter
reserved #2
Wish somebody would build for the LG optimistic logic
Sent from my LGL35G using xda premium

[HELP] Android kernel compiling error.

Hi every body, I am trying to compile kernel for SamSung Galaxy S5 (SM-G906K).
I always get this error message, i don't know how to solve it. Please help me !
Thank you all!
__________________________________________________ ______
/home/vip7009pro/Kernel2/drivers/gpu/gpu_sysfs/Kbuild:29: **** Make sure target file is defined. Check the TARGET and GPU configs in Makefile and Kernel Config. Module won't work without target file. ****
scripts/Makefile.clean:17: /home/vip7009pro/Kernel2/drivers/media/isdbt/fc8150/Makefile: No such file or directory
make[4]: *** No rule to make target `/home/vip7009pro/Kernel2/drivers/media/isdbt/fc8150/Makefile'. Stop.
make[3]: *** [drivers/media/isdbt/fc8150] Error 2
make[2]: *** [drivers/media/isdbt] Error 2
make[1]: *** [drivers/media] Error 2
make: *** [_clean_drivers] Error 2
[email protected]:~/Kernel2$ make mrproper
/home/vip7009pro/Kernel2/drivers/gpu/gpu_sysfs/Kbuild:29: **** Make sure target file is defined. Check the TARGET and GPU configs in Makefile and Kernel Config. Module won't work without target file. ****
scripts/Makefile.clean:17: /home/vip7009pro/Kernel2/drivers/media/isdbt/fc8150/Makefile: No such file or directory
make[4]: *** No rule to make target `/home/vip7009pro/Kernel2/drivers/media/isdbt/fc8150/Makefile'. Stop.
make[3]: *** [drivers/media/isdbt/fc8150] Error 2
make[2]: *** [drivers/media/isdbt] Error 2
make[1]: *** [drivers/media] Error 2
make: *** [_clean_drivers] Error 2
_________________________________________
Any body help me ?
Hi~ please reply for my message
nguyen_vh said:
Any body help me ?
Click to expand...
Click to collapse
Hi......
Do you solved this problem?
I am trying Compile custom kernel for Galaxy s5 ,too..
I have same problem ....
Please Contact me if you solve this problem & success custom kernel compile.
[email protected]
thanks!
build_kernel.sh
samsung provides script for succesful compiling of kernel from source: build_kernel.sh
sudo apt-get install git
git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8 (i used this version because samsung used 4.8 to compile my g901f kernel)
my paths:
/home/kriomag/Kernel
/home/arm-eabi-4.8
for above paths i used (started from Kernel folder):
export ARCH=arm
export CROSS_COMPILE=$(pwd)/../arm-eabi-4.8/bin/arm-eabi-
mkdir output
make -C $(pwd) O=output apq8084_sec_defconfig VARIANT_DEFCONFIG=apq8084_sec_kccat6_eur_defconfig SELINUX_DEFCONFIG=selinux_defconfig (this line outputs after few warnings .config file needed to "make")
make -j4 -C $(pwd) O=output (this line starts compiling, after long time it gives zImage - kernel file in output/arch/arm/boot);
all you need is to correct paths in this script to yours paths and use g906k variant configs names. This above example is from my compilation of g901f kernel.
Im facing this problem aswell, did you find a fix already?
Found the Solution!
Kriomag's solution worked! It looks like those errors are associated with the CROSS_COMPILE path. Be sure to use the appropriate toolchain for your export CROSS_COMPILE command. For me, I kept typing "/home/user/arm-eabi-4.8/bin/" which resulted in the same error about checking the "TARGET"; Instead of "/home/user/arm-eabi-4.8/bin/arm-eabi-" Turns out, when I git cloned from the URL provided by Kriomag, the scripts are written without the prefix "arm-eabi-"
Kriomag!

OmniROM 6.0 build error for Pixel C

General information:
1. I can't found the kernel source from android.com and android source repos.
2. I was setup build environment for OmniROM, and I was tested build manta with success.
3. I was config the device repo in .repo/local_manifests/default.xml with https://android.googlesource.com/device/google/dragon/ and https://android.googlesource.com/device/google/dragon-kernel/
4. Changed all aosp_dragon to omni_dragon, add TWRP config to BoardConfig.mk, add TARGET_PREBUILT_KERNEL := device/google/dragon-kernel/Image.fit to device.mk
5. Download and extract vendor file from https://developers.google.com/android/nexus/drivers#dragon using MXC14G version.
6. Modified tools/roomservice.py for disabled check dragon online.(Make it compile)
My build step:
cmd:
cd /media/dev/source/OmniROM/
brunch dragon
Wait for complete, it report error:
Code:
Export includes file: external/tinycompress/Android.mk -- /media/dev/source/OmniROM/out/target/product/dragon/obj_arm/SHARED_LIBRARIES/libtinycompress_intermediates/export_includes
make: *** No rule to make target '/media/dev/source/OmniROM/out/target/product/dragon/obj/KERNEL_OBJ/usr', needed by '/media/dev/source/OmniROM/out/target/product/dragon/obj_arm/SHARED_LIBRARIES/libtinycompress_intermediates/compress.o'
The full log in http://pastebin.com/drM6Fe2R
I tried build the external/tinycompress package only, it return error.
cmd:
mm external/tinycompress
Report error:
Code:
No private recovery resources for TARGET_DEVICE dragon
build/core/tasks/kernel.mk:104: ***************************************************************
build/core/tasks/kernel.mk:105: * Using prebuilt kernel binary instead of source *
build/core/tasks/kernel.mk:106: * THIS IS DEPRECATED, AND WILL BE DISCONTINUED *
build/core/tasks/kernel.mk:107: * Please configure your device to download the kernel *
build/core/tasks/kernel.mk:108: * source repository to kernel/google/dragon
build/core/tasks/kernel.mk:109: * See http://forum.xda-developers.com/wiki/ROM/Integrated_Kernel_Build
build/core/tasks/kernel.mk:110: * for more information *
build/core/tasks/kernel.mk:111: ***************************************************************
build/core/tasks/kernel.mk:271: warning: overriding recipe for target '/media/dev/source/OmniROM/out/target/product/dragon/kernel'
build/core/Makefile:72: warning: ignoring old recipe for target '/media/dev/source/OmniROM/out/target/product/dragon/kernel'
make: Nothing to be done for 'external/tinycompress'.
The full log in http://pastebin.com/DaHjPmHk
Can't you help me fix this build erro?
kendling said:
General information:
1. I can't found the kernel source from android.com and android source repos.
2. I was setup build environment for OmniROM, and I was tested build manta with success.
3. I was config the device repo in .repo/local_manifests/default.xml with https://android.googlesource.com/device/google/dragon/ and https://android.googlesource.com/device/google/dragon-kernel/
4. Changed all aosp_dragon to omni_dragon, add TWRP config to BoardConfig.mk, add TARGET_PREBUILT_KERNEL := device/google/dragon-kernel/Image.fit to device.mk
5. Download and extract vendor file from https://developers.google.com/android/nexus/drivers#dragon using MXC14G version.
6. Modified tools/roomservice.py for disabled check dragon online.(Make it compile)
My build step:
cmd:
cd /media/dev/source/OmniROM/
brunch dragon
Wait for complete, it report error:
Code:
Export includes file: external/tinycompress/Android.mk -- /media/dev/source/OmniROM/out/target/product/dragon/obj_arm/SHARED_LIBRARIES/libtinycompress_intermediates/export_includes
make: *** No rule to make target '/media/dev/source/OmniROM/out/target/product/dragon/obj/KERNEL_OBJ/usr', needed by '/media/dev/source/OmniROM/out/target/product/dragon/obj_arm/SHARED_LIBRARIES/libtinycompress_intermediates/compress.o'
The full log in http://pastebin.com/drM6Fe2R
I tried build the external/tinycompress package only, it return error.
cmd:
mm external/tinycompress
Report error:
Code:
No private recovery resources for TARGET_DEVICE dragon
build/core/tasks/kernel.mk:104: ***************************************************************
build/core/tasks/kernel.mk:105: * Using prebuilt kernel binary instead of source *
build/core/tasks/kernel.mk:106: * THIS IS DEPRECATED, AND WILL BE DISCONTINUED *
build/core/tasks/kernel.mk:107: * Please configure your device to download the kernel *
build/core/tasks/kernel.mk:108: * source repository to kernel/google/dragon
build/core/tasks/kernel.mk:109: * See http://forum.xda-developers.com/wiki/ROM/Integrated_Kernel_Build
build/core/tasks/kernel.mk:110: * for more information *
build/core/tasks/kernel.mk:111: ***************************************************************
build/core/tasks/kernel.mk:271: warning: overriding recipe for target '/media/dev/source/OmniROM/out/target/product/dragon/kernel'
build/core/Makefile:72: warning: ignoring old recipe for target '/media/dev/source/OmniROM/out/target/product/dragon/kernel'
make: Nothing to be done for 'external/tinycompress'.
The full log in http://pastebin.com/DaHjPmHk
Can't you help me fix this build erro?
Click to expand...
Click to collapse
I'd look at one of the other Nexus device trees to see how they set up inline kernel build and properly Omni-fied it. I haven't done it in such a long time I don't really remember the exact details.
anyone can help me ?
Code:
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
make[1]: Leaving directory `/home/ibrahim/wave/kernel/samsung/aries'
make -C kernel/samsung/aries O=/home/ibrahim/wave/out/target/product/wave/obj/KERNEL_OBJ ARCH=arm CROSS_COMPILE=" "/home/ibrahim/wave/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/"/arm-eabi-" dtbs
make[1]: Entering directory `/home/ibrahim/wave/kernel/samsung/aries'
make[2]: *** No rule to make target `dtbs'. Stop.
make[1]: *** [sub-make] Error 2
make[1]: Leaving directory `/home/ibrahim/wave/kernel/samsung/aries'
make: [TARGET_KERNEL_BINARIES] Error 2 (ignored)
make -C kernel/samsung/aries O=/home/ibrahim/wave/out/target/product/wave/obj/KERNEL_OBJ ARCH=arm CROSS_COMPILE=" "/home/ibrahim/wave/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/"/arm-eabi-" modules
make[1]: Entering directory `/home/ibrahim/wave/kernel/samsung/aries'
CHK include/linux/version.h
I did found the problem!!
Because I did add the lines to aosp_dragon.mk below:
Code:
# Inherit from our custom product configuration
$(call inherit-product, vendor/omni/config/common_tablet.mk)
After that, I got new errors:
1. Failed to compile mkbootimg.c
Code:
target C: utility_mkbootimg <= system/core/mkbootimg/mkbootimg.c
system/core/mkbootimg/mkbootimg.c: In function 'print_id':
system/core/mkbootimg/mkbootimg.c:82:5: error: 'for' loop initial declarations are only allowed in C99 or C11 mode
for (unsigned i = 0; i < id_len; i++) {
^
system/core/mkbootimg/mkbootimg.c:82:5: note: use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code
build/core/binary.mk:801: recipe for target '/media/dev/source/OmniROM/out/target/product/dragon/obj/UTILITY_EXECUTABLES/utility_mkbootimg_intermediates/mkbootimg.o' failed
make: *** [/media/dev/source/OmniROM/out/target/product/dragon/obj/UTILITY_EXECUTABLES/utility_mkbootimg_intermediates/mkbootimg.o] Error 1
make: *** 正在等待未完成的任务....
2. Failed to compile compress.c
Code:
target thumb C: audio.usb.default_32 <= hardware/libhardware/modules/usbaudio/audio_hal.c
In file included from bionic/libc/include/signal.h:32:0,
from bionic/libc/include/sys/select.h:33,
from bionic/libc/include/unistd.h:35,
from external/tinycompress/compress.c:61:
/media/dev/source/OmniROM/out/target/product/dragon/obj/KERNEL_OBJ/usr/include/asm/sigcontext.h:53:2: error: unknown type name '__uint128_t'
__uint128_t vregs[32];
^
build/core/binary.mk:801: recipe for target '/media/dev/source/OmniROM/out/target/product/dragon/obj_arm/SHARED_LIBRARIES/libtinycompress_intermediates/compress.o' failed
make: *** [/media/dev/source/OmniROM/out/target/product/dragon/obj_arm/SHARED_LIBRARIES/libtinycompress_intermediates/compress.o] Error 1
make: *** 正在等待未完成的任务....
make: *** wait: 没有子进程。 停止。
Anyone can help me?
About __uint128_t problem, do this:
https://github.com/omnirom/android_...mmit/80349b926351ca5992973e4a0357ca649a602faa
Blue59 said:
anyone can help me ?
Code:
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
make[1]: Leaving directory `/home/ibrahim/wave/kernel/samsung/aries'
make -C kernel/samsung/aries O=/home/ibrahim/wave/out/target/product/wave/obj/KERNEL_OBJ ARCH=arm CROSS_COMPILE=" "/home/ibrahim/wave/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/"/arm-eabi-" dtbs
make[1]: Entering directory `/home/ibrahim/wave/kernel/samsung/aries'
make[2]: *** No rule to make target `dtbs'. Stop.
make[1]: *** [sub-make] Error 2
make[1]: Leaving directory `/home/ibrahim/wave/kernel/samsung/aries'
make: [TARGET_KERNEL_BINARIES] Error 2 (ignored)
make -C kernel/samsung/aries O=/home/ibrahim/wave/out/target/product/wave/obj/KERNEL_OBJ ARCH=arm CROSS_COMPILE=" "/home/ibrahim/wave/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/"/arm-eabi-" modules
make[1]: Entering directory `/home/ibrahim/wave/kernel/samsung/aries'
CHK include/linux/version.h
Click to expand...
Click to collapse
@Blue59
make[2]: *** No rule to make target `dtbs'.
Click to expand...
Click to collapse
The problem is , your kernel's Makefile not have dtbs make rule.
See https://github.com/kendling/android_kernel_google_dragon/blob/m/arch/arm64/Makefile
dtbs: prepare scripts
$(Q)$(MAKE) $(build)=$(boot)/dts
dtbs_install:
$(Q)$(MAKE) $(dtbinst)=$(boot)/dts
Click to expand...
Click to collapse
Hi everybody,
I was fixed all problem and build success.
After build success, the boot.img can't bootup.
Tablet display "OS on your tablet is damaged. Need recovery."
Yes, I fixed it too.
Now my build was all success and success bootup.
I want to release the ROM later.
Thanks all!

Request permissive Custom kernal for a9 pro (sm-a910f)

Hi, I am so sorry to post such a request here. I dont use Linux otherwise I would try to make one myself. I just went to opensource.samsung.com, I saw plenty of source code available for a9 pro sm-a910f. So I wonder if someone could help to compile a custome keenel with permissive mode enable?
Thank you very much!
imhercules said:
Hi, I am so sorry to post such a request here. I dont use Linux otherwise I would try to make one myself. I just went to opensource.samsung.com, I saw plenty of source code available for a9 pro sm-a910f. So I wonder if someone could help to compile a custome keenel with permissive mode enable?
Thank you very much!
Click to expand...
Click to collapse
Ok. I did try to compile the kernel but it turned out introduce error. Could anyone please take a look at what's going on?
Firstly, Samsung a9 Pro is a ARM64 device.
I tried to compile permissive kernel by referencing from this two guide.
A Noob Guide On Building Your Own Custom Kernel on WIN10 (ARM & ARM64 & MTK)
https://forum.xda-developers.com/android/software/guide-noob-guide-building-custom-kernel-t3775494
Compiling a permissive Android kernel
http://graemehill.ca/compiling-permissive-android-kernel/
So here's what I did.
1. Install Ubuntu in Windows 10
Setting up environment
2. apt-get update
3. sudo apt-get install -y build-essential kernel-package libncurses5-dev bzip2
4. a) Download ndk from https://developer.android.com/ndk/downloads (I downloaded Linux 64-bit (x86) version android-ndk-r10e-linux-x86_64)
b) Extract the content to home/android/ folder
5. a) Download a9 pro source code from http://opensource.samsung.com/reception.do
b) Extract Kernel.tar.gz to home/android folder
6. a) Open up ~/android/kernel/security/selinux/Makefile with notepad
b) change EXTRA_CFLAGS += -DCONFIG_ALWAYS_ENFORCE from true to false
EXTRA_CFLAGS += -DCONFIG_ALWAYS_ENFORCE=false
7. RUN export CROSS_COMPILE=~/home/hercules/android/ndk/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-
8. cd ~/android/Kernel
9. make clean && make mrproper
then introduces below error
scripts/Makefile.clean:17: /home/hercules/android/Kernel/drivers/gud/TlcTui/Makefile: No such file or directory
make[3]: *** No rule to make target '/home/hercules/android/Kernel/drivers/gud/TlcTui/Makefile'. Stop.
scripts/Makefile.clean:94: recipe for target 'drivers/gud/TlcTui' failed
make[2]: *** [drivers/gud/TlcTui] Error 2
scripts/Makefile.clean:94: recipe for target 'drivers/gud' failed
make[1]: *** [drivers/gud] Error 2
Makefile:1074: recipe for target '_clean_drivers' failed
make: *** [_clean_drivers] Error 2
9. make ARCH=arm64 msm8976_sec_a9xprolte_sea_defconfig it introduces below error
drivers/battery_v2/Kconfig:75:warning: type of 'SAMSUNG_BATTERY_ENG_TEST' redefined from 'boolean' to 'tristate'
arch/arm64/configs/msm8976_sec_a9xprolte_sea_defconfig:78:warning: override: reassigning to symbol AFC_CHARGER_MODE
KCONFIG_SELINUX((null))
KCONFIG_LOG_SELINUX((null))
KCONFIG_TIMA((null))
KCONFIG_DMVERITY((null))
KCONFIG_VARIANT((null))
***
*** You must specify VARIANT_DEFCONFIG !
***
/home/hercules/android/Kernel/scripts/kconfig/Makefile:129: recipe for target 'msm8976_sec_a9xprolte_sea_defconfig' failed
make[1]: *** [msm8976_sec_a9xprolte_sea_defconfig] Error 1
Makefile:510: recipe for target 'msm8976_sec_a9xprolte_sea_defconfig' failed
make: *** [msm8976_sec_a9xprolte_sea_defconfig] Error 2
I don't know what to do now. If the solution is simple enough than I could try. If not I got to giv up.
Will be making one. Pls let me know if it works.

Categories

Resources