For some weeks I've been trying to set up an environment in which I'm able to compile the stock kernel for my LG2X on my own. Following various tips and hints were unsuccessful and several restarts were required until a kernel which was compiled on my own box was running on my phone. Since I had to patch together all the information because there was no complete guide available/findable, I'd like to list here all the steps from the beginning which I had to perform to boot my own compiled kernel. Maybe this is also useful for others. Note: again, this approach is for compiling STOCK kernel sources which are based on the public sources from LG. (The build process for CM is different and cannot be applied to stock kernels)
I began with a freshly installed Ubuntu 11.10 32bit (http://www.ubuntu.com/download/ubuntu/download) running in a VMware virtual machine. In it I entered a shell and switched to root to be able to perform the required actions:
Code:
sudo su -
The next step was to add the package-sources for the cross-compiler toolchain (see next step) and to bring the system up to the latest state.
Code:
add-apt-repository ppa:linaro-maintainers/toolchain
apt-get update
apt-get upgrade
This takes some time but after it's finished I installed the cross-compiler toolchain to be able to compile applications for the LGs ARM platform
Code:
apt-get install gcc-linaro
apt-get install gcc-linaro-arm-linux-gnueabi
After this I've been ready to begin with the source-works. I closed the root-shell and opened up a new one (required to make sure that all paths are correctly set and recognized again). Test it by executing
Code:
arm-linux-gnueabi-gcc --version
When this executed without error I started with downloading the sources for version 20q from http://www.lg.com/global/support/opensource/opensource-detail.jsp?detailCustomerModelCode=LGP990 into a new directory.
When the file 'LGP990_Android_Gingerbread_V20Q.zip' had finished downloading I unzipped the complete package by
Code:
unzip LGP990_Android_Gingerbread_V20Q.zip
resulting in three files. A README, one .tar.gz with the ROM sources and finally one .tar.gz with the kernel sources. To unpack the kernel sources I issued
Code:
tar xvzf P990_Stardop_IFX_GingerBread_V20Q_KERNEL.tar.gz
and the complete LG 20q kernel sources were finally located in a new 'kernel' subdirectory.
The kernel sources themselves are not yet ready to be compiled. This is because LG most probably has a different/special build environment and our standard environment produces errors and unbootable kernels. Some patching is required to succeed to a running kernel.
Firstly the compilation options for the wireless module have to be tweaked as the default settings break compilation at some unused variables in the source. This is set to be just treated as warnings for the wireless-module by applying following patch:
Code:
diff -u -r original/kernel/drivers/net/wireless/bcm4329/Makefile kernel/drivers/net/wireless/bcm4329/Makefile
--- original/kernel/drivers/net/wireless/bcm4329/Makefile 2012-01-31 04:36:22.000000000 -0800
+++ kernel/drivers/net/wireless/bcm4329/Makefile 2012-02-14 11:41:59.972467559 -0800
@@ -53,7 +53,7 @@
-DBCMLXSDMMC \
-DBCMPLATFORM_BUS \
-DSDIO_ISR_THREAD \
- -Wall -Wstrict-prototypes -Werror \
+ -Wall -Wstrict-prototypes -Werror -Wno-unused-but-set-variable -Wno-array-bounds \
-I$(SRCROOT) \
-I$(SRCROOT)/include \
-I$(SRCROOT)/shared \
Also the main Makefile requires tuning to contain the proper compilation options to produce code which correctly runs on the phone (thanks to spica1234 for providing me with the correct options).
Code:
diff -u -r original/kernel/Makefile kernel/Makefile
--- original/kernel/Makefile 2012-01-31 04:36:21.000000000 -0800
+++ kernel/Makefile 2012-02-28 13:21:20.038003539 -0800
@@ -323,12 +323,12 @@
CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
-Wbitwise -Wno-return-void $(CF)
-MODFLAGS = -DMODULE
-CFLAGS_MODULE = $(MODFLAGS)
+MODFLAGS = -DMODULE -mfloat-abi=softfp -mfpu=vfpv3-d16 -mtune=cortex-a9 -march=armv7-a -fno-common -fsingle-precision-constant -fno-gcse -funsafe-math-optimizations -ffinite-math-only -fgcse-las -fgcse-sm -fivopts -fbtr-bb-exclusive -fvect-cost-model -fmodulo-sched -fmodulo-sched-allow-regmoves
+CFLAGS_MODULE = $(MODFLAGS)
AFLAGS_MODULE = $(MODFLAGS)
LDFLAGS_MODULE = -T $(srctree)/scripts/module-common.lds
-CFLAGS_KERNEL =
-AFLAGS_KERNEL =
+CFLAGS_KERNEL = -mfloat-abi=softfp -mfpu=vfpv3-d16 -mtune=cortex-a9 -march=armv7-a -fno-common -fsingle-precision-constant -fno-gcse -funsafe-math-optimizations -ffinite-math-only -fgcse-las -fgcse-sm -fivopts -fbtr-bb-exclusive -fvect-cost-model -fmodulo-sched -fmodulo-sched-allow-regmoves
+AFLAGS_KERNEL = -mfloat-abi=softfp -mfpu=vfpv3-d16 -mtune=cortex-a9 -march=armv7-a -fno-common -fsingle-precision-constant -fno-gcse -funsafe-math-optimizations -ffinite-math-only -fgcse-las -fgcse-sm -fivopts -fbtr-bb-exclusive -fvect-cost-model -fmodulo-sched -fmodulo-sched-allow-regmoves
CFLAGS_GCOV = -fprofile-arcs -ftest-coverage
# 20100705, [email protected],[LGE_START]
@@ -544,7 +544,8 @@
ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
KBUILD_CFLAGS += -Os
else
-KBUILD_CFLAGS += -O2
+KBUILD_CFLAGS += -Ofast
+KBUILD_CFLAGS += $(call cc-option, -Wno-unused-but-set-variable)
endif
We're not finished yet. We've to create the correct kernel configuration and (again) apply some patches. I'm not so sure about these changes but the kernel refused to boot on my phone without them. It is again provided by spica1234 and contains a number of changes. I did not research which of these changes allowed to boot since most of them are generally useful and I didn't do the work trying them out one-by-one.
Code:
make ARCH=arm star_ifx_defconfig
Code:
--- .config.orig 2012-02-28 13:22:09.322001449 -0800
+++ .config.spica_working 2012-03-02 08:41:21.757696988 -0800
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.32.9-HP_2X_Xtreme_RC12-RevOTF
-# Tue Feb 28 13:22:09 2012
+# Tue Feb 28 13:24:15 2012
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -56,16 +56,16 @@
CONFIG_LOG_BUF_SHIFT=18
CONFIG_GROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
-# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_RT_GROUP_SCHED=y
# CONFIG_USER_SCHED is not set
CONFIG_CGROUP_SCHED=y
CONFIG_CGROUPS=y
# CONFIG_CGROUP_DEBUG is not set
# CONFIG_CGROUP_NS is not set
-CONFIG_CGROUP_FREEZER=y
-CONFIG_CGROUP_DEVICE=y
+# CONFIG_CGROUP_FREEZER is not set
+# CONFIG_CGROUP_DEVICE is not set
# CONFIG_CPUSETS is not set
-CONFIG_CGROUP_CPUACCT=y
+# CONFIG_CGROUP_CPUACCT is not set
# CONFIG_RESOURCE_COUNTERS is not set
# CONFIG_SYSFS_DEPRECATED_V2 is not set
CONFIG_RELAY=y
@@ -121,7 +121,8 @@
# GCOV-based kernel profiling
#
# CONFIG_GCOV_KERNEL is not set
-# CONFIG_SLOW_WORK is not set
+CONFIG_SLOW_WORK=y
+# CONFIG_SLOW_WORK_DEBUG is not set
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
@@ -146,10 +147,10 @@
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
# CONFIG_DEFAULT_AS is not set
-# CONFIG_DEFAULT_DEADLINE is not set
-CONFIG_DEFAULT_CFQ=y
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="cfq"
+CONFIG_DEFAULT_IOSCHED="deadline"
CONFIG_FREEZER=y
#
@@ -1676,16 +1677,25 @@
# File systems
#
CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT2_FS_XATTR=y
+# CONFIG_EXT2_FS_POSIX_ACL is not set
+# CONFIG_EXT2_FS_SECURITY is not set
+CONFIG_EXT2_FS_XIP=y
CONFIG_EXT3_FS=y
CONFIG_EXT3_DEFAULTS_TO_ORDERED=y
CONFIG_EXT3_FS_XATTR=y
# CONFIG_EXT3_FS_POSIX_ACL is not set
# CONFIG_EXT3_FS_SECURITY is not set
-# CONFIG_EXT4_FS is not set
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_FS_XATTR=y
+# CONFIG_EXT4_FS_POSIX_ACL is not set
+# CONFIG_EXT4_FS_SECURITY is not set
+# CONFIG_EXT4_DEBUG is not set
+CONFIG_FS_XIP=y
CONFIG_JBD=y
# CONFIG_JBD_DEBUG is not set
+CONFIG_JBD2=y
+# CONFIG_JBD2_DEBUG is not set
CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
@@ -1769,7 +1779,22 @@
# CONFIG_ROMFS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set
-# CONFIG_NETWORK_FILESYSTEMS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+# CONFIG_NFS_FS is not set
+# CONFIG_NFSD is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_UPCALL is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_DFS_UPCALL is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
#
# Partition Types
After these patches, were finally ready to compile the kernel
Code:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- STAR_TMUS_REV=TMUS_10 TARGET_STAR_HWREV=TMUS_E TARGET_MODEM=ifx
Now go grab some coffee. This takes a while. When it's finished, the compressed kernel-image is found in
arch/arm/boot/zImage
For the experienced kernel-hackers this might be enough. It wasn't for me and I wanted to have it easily installable like other kernels from the forum. So I downloaded a kernel zip package, eg. the one from spica1234 at http://forum.xda-developers.com/showpost.php?p=18253696&postcount=1
Any version will do as long as the kernel is contained in a .zip archive and installable via CWM. In my case I downloaded the kernel zip in a new directory 'build' and unpacked it.
Code:
unzip HP_2x_RC12-RevOTF-PRO.zip
This creates the subdirectories 'data', 'kernel', 'META-INF' and 'system'. Here we now have to replace the kernel and the kernel-modules with our self-compiled versions.
Code:
cd ~build/kernel
rm zImage
cp ~kernel/arch/arm/bootzImage ./zImage
cd ../system/lib/modules
rm *.ko
find ~kernel/ -name "*.ko" -exec cp '{}' . \;
cd ../../..
One last step, creating the zip which carries the new kernel:
Code:
zip -r -FS new_kernel.zip data/ kernel/ META-INF/ system/
This new_kernel.zip can now be flashed with CWM and should boot without problems.
For easier usage, I've attached the three patched files in the build_set.zip attachment so you don't have to patch the stock files by hand. Just extract it in the kernel directory and overwrite the existing files.
I hope I did not make any error in the compilation of this information and that it can be helpful for the interested reader.
Thanks goes especially to spica1234 and the material which he provided me to come through to a successful boot.
Very good explanation. I wish such useful info available b4 an year for me while i published 1st kernel at samdroid for my older device
Sent from my LG-P990 using Tapatalk
Bloody hell! I never realised it took so much to simply compile!!!! (I build JEE systems at work, but we scripted most of it, stuff that used to take a day and half now takes a few minutes).
Excellent guide Kosi! I'm a linux and kernel n00b and I understand your instructions pretty well.
Ubuntu 11 is not the best choice though I currently use it myself. v11 can cause problems, especially when not compiling kernels but compiling Android ROMs.
Ubuntu 10 is the better choice.
Also there is a VMware Android Developer Environment available for download, providing nearly all the necessary tools for compilation preinstalled and set-up.
http://forum.xda-developers.com/showthread.php?t=1386918
You can compile your kernel directly in the virtual machine p.ex. on your Windows 7 PC. That's the way I do it for my kernel. VMware Player is available for free, so you can just run the image.
Also install VMware tools, so you can set up a directory for exchanging files between your Windows Host and the virtual Machine Ubuntu. In this directory I usually paste the compiled kernel for further use under Win7 (making the CWM update ZIPs).
Just note that you should have a dual/quadcore CPU strong enough to host the linux and compile the kernel in an acceptable time (usually it takes me 1-2 minutes for complete kernel compilation under virtual machine ubuntu using -j24 option on make).
Can u guys add a bit in this tutorial, example, at which file / folder need to edit for OCUV, add swap function, enable ext4, etc.. seriously like this thread..
Sent from my LG-P990 using XDA
ghadap said:
Can u guys add a bit in this tutorial, example, at which file / folder need to edit for OCUV, add swap function, enable ext4, etc.. seriously like this thread..
Click to expand...
Click to collapse
As the topic of this thread is just how to get the stock kernel compiling I won't step into modifying it. Please open a separate thread for that.
Small hints though, OCUV requires deeper code changes, swap and ext4 can just be enabled in the kernel config.
Hey,
I follow the guide, but ubuntu (11.04 64 bit) doesn't find the pack
Code:
apt-get install gcc-linaro
so I can't install the pack
Code:
apt-get install gcc-linaro-arm-linux-gnueabi
Edit: With Ubuntu 11.10, it works.
Has anyone compiled and booted a kernel successfully with this guide? Can't get mine to boot, so before I look any further I'd thought I'd check if anyone else has gotten a workable kernel out of it.
TrymHansen said:
Has anyone compiled and booted a kernel successfully with this guide? Can't get mine to boot, so before I look any further I'd thought I'd check if anyone else has gotten a workable kernel out of it.
Click to expand...
Click to collapse
Which version it shows "arm-linux-gnueabi-gcc --version"
If its 4.6.2?
Sent from my LG-P990 using Tapatalk
Stefan Gündhör said:
Ubuntu 11 is not the best choice though I currently use it myself. v11 can cause problems, especially when not compiling kernels but compiling Android ROMs.
Ubuntu 10 is the better choice.
Also there is a VMware Android Developer Environment available for download, providing nearly all the necessary tools for compilation preinstalled and set-up.
http://forum.xda-developers.com/showthread.php?t=1386918
You can compile your kernel directly in the virtual machine p.ex. on your Windows 7 PC. That's the way I do it for my kernel. VMware Player is available for free, so you can just run the image.
Also install VMware tools, so you can set up a directory for exchanging files between your Windows Host and the virtual Machine Ubuntu. In this directory I usually paste the compiled kernel for further use under Win7 (making the CWM update ZIPs).
Just note that you should have a dual/quadcore CPU strong enough to host the linux and compile the kernel in an acceptable time (usually it takes me 1-2 minutes for complete kernel compilation under virtual machine ubuntu using -j24 option on make).
Click to expand...
Click to collapse
Ubuntu 11.xx is still a good choise if you want to build ROMs it is very easy to set it up (it is just one step more then on 10.xx)
i also use ubuntu 11.10 and it is working fine for me with building android ROMs
and of course it can take 1-2 minutes but it also can take up to an hour for a kernel to compile
it all depends on how good your computer is
on my home computer i build a kernel in a matter of seconds (clobber builds)
but when i am at my girlfriend my build (also clobber) on her craptop will take up to 20 minutes
nice guide kosi2801!
spica1234 said:
Which version it shows "arm-linux-gnueabi-gcc --version"
If its 4.6.2?
Click to expand...
Click to collapse
Yap. This
Code:
arm-linux-gnueabi-gcc (Ubuntu/Linaro 4.6.2-14ubuntu2~ppa1) 4.6.2
to be specific.
Trymhanson, Try to downgrade with 4.5.3. 4.6.2 is causing this unable to boot issue which was not happening earlier with 4.6.1
try this
apt-get install gcc-4.5-arm-linux-gnueabi
apt-get install g++-4.5-arm-linux-gnueabi
rm /usr/bin/arm-linux-gnueabi-gcc
ln -s /usr/bin/arm-linux-gnueabi-gcc-4.5 /usr/bin/arm-linux-gnueabi-gcc
Thanks, that did it. I also had to change the -Ofast flag back to -O2 as -Ofast wasn't recognized by the 4.5.3 version. So now I'm thinking maybe the -Ofast flag was to blame, so I'll try a fresh 4.6.2 install with -O2. Thanks again.
TrymHansen said:
Thanks, that did it. I also had to change the -Ofast flag back to -O2 as -Ofast wasn't recognized by the 4.5.3 version. So now I'm thinking maybe the -Ofast flag was to blame, so I'll try a fresh 4.6.2 install with -O2. Thanks again.
Click to expand...
Click to collapse
no may be ofast is not to blame but 4.6.2. Ofast was introduced with 4.6.0 and doesnt work with < 4..6. 4.6.2 doesnt even work with o2. And IMHO kernel compiled with 4.5.3 ismore stable
Sent from my LG-P990 using Tapatalk
http://db.tt/jN4fU9Vz
Thisis my recent sr3r2 patch created against original v20Q sourceswith Full OTF V2.0. Anybody interested can use it. It will transform to fully noo oc version of SR3r2
It wont work with CM but only stock v20q
Sent from my LG-P990 using Tapatalk
For anyone interested, currently I'm building with
arm-linux-gnueabihf-gcc (Ubuntu/Linaro 4.6.1-7ubuntu2) 4.6.1
For my usage patterns the kernel works pretty well, but YMMV.
Thanks spica for the updated patch!
kosi2801 said:
For anyone interested, currently I'm building with
arm-linux-gnueabihf-gcc (Ubuntu/Linaro 4.6.1-7ubuntu2) 4.6.1
For my usage patterns the kernel works pretty well, but YMMV.
Thanks spica for the updated patch!
Click to expand...
Click to collapse
Use my recent cflags its most stable and used in sr3r2
As you are using gnueabihf relace mfloat-abi=softfp with mfloat-abi=hard
Sent from my LG-P990 using xda premium
spica1234 said:
Use my recent cflags its most stable and used in sr3r2
As you are using gnueabihf relace mfloat-abi=softfp with mfloat-abi=hard
Click to expand...
Click to collapse
Thanks for the tip. I already thought about that some time ago but forgot again. Gained some additional performance points
Can someone upload a compiled stock v20q kernel flashable zip? Thanks!
Hi Folks
I thought I throw this one up for good measure.
Archos Kernel 3.0.21
I've made a couple of changes which are outline in the README2 file in the repo, but a quick summary.
Patched arch/arm/mach-omap4/omap4-reboot-reason.c to enable bootmode system property setting from the kernel command line which is required by CWM-SDE
I also back-ported the arch/arm/mm/proc-v7.S from the android-omap-3.4 kernel which means the kernel can be built using the standard android aosp toolchains Although It's probably still better to use Linaro Optimized!!
github.com/trevd/android_kernel_ti_archos.git
README2
Code:
android linux kernel 3.0.21 based on original archos sources found at
http://gitorious.org/archos/archos-gpl-gen9-kernel-ics branch: linux-ics-3.0.21
Android boot mode awareness:
----------------------------
changes made to arch/arm/mach-omap2/omap4-reboot-reason.c to enable correct setting
of android system property ro.bootmode.
designed to be used in conjunction with roms created using device files locating in
https://github.com/trevd/android_device_ti_archos.git
Proc-v7.S changes
-----------------
I've backported arch/arm/mm/Proc-v7.S from the android-omap-3 kernel 3.4 branch, this
was done to allow the kernel to be built using the standard android toolchain.
Building
--------
Clone the android aosp toolchain
git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6
Using the Bourne Again Shell ( bash ) export an alias to make cross compiling easy
alias make-arm='<toolchain path>/arm-eabi-4.6/bin/:$PATH ARCH=arm SUBARCH=arm CROSS_COMPILE=arm-eabi- LOCALVERSION_AUTO=n make'
make-arm distclean && make-arm mrproper
make-arm ti_archos_defconfig
make-arm -j$(grep -c processor /proc/cpuinfo)
Out of tree drivers
-------------------
PowerVR Kernel Modules are not included in this release, they are available from omapzoom android aosp
repo located at git://git.omapzoom.org/device/ti/proprietary-open.git. this repo also contains the matching
userland binary blobs, versions of which exist for Gingerbread, ICS and JellyBean. See device tree documentation
for further details ( https://github.com/trevd/android_device_ti_archos.git )
Hi Trevd !
Thank you very much for your great work ! :good:
....how much I wish I could be useful ( I am currently with hands tied :laugh: - I have not my tablet ....but I'll be back as soon as I will receive my tablet from reparation centre ! )
Good luck & keep up your awesome work ! :good::good::good:
Wifi Drivers info and resources.
Hi Folks.
Along with building the PowerVR Drivers out of tree, It should be also possible to use the latest drivers for the wireless chip
This Page [ linuxwireless.org ] provides some nice documentation with the links to the repo's contain the lastest code along with what looks like some useful android related utilities
Cifs manager, any got out could build a working cifs.ko file?
Sent from my LG-D955 using XDA Premium 4 mobile app
tutreak said:
Cifs manager, any got out could build a working cifs.ko file?
Sent from my LG-D955 using XDA Premium 4 mobile app
Click to expand...
Click to collapse
Sorry for knocking a 9 month old Thread , but I am trying to make Cifs Manager work for my Gflex.
i'm running Android 4.4.2 , Kernel 3.4.0 Build KOT49I.D95520a .
I've Downloaded the Kernel Source tar.gz from LG : LGD955_Gflex_Kikat_V20a_Kernel.tar.gz
And I just cannot seem to produce a cifs.ko module that is succesfully loaded with insmod on the device.
I keep getting this in dmesg: no symbol version for module_layout
I was trying to use this thread for instructions: http://forum.xda-developers.com/showthread.php?t=2531407&page=3
and this http://forum.xda-developers.com/showthread.php?t=2531407&page=3
@TheWizardOfROMs Maybe if you have some time you can give some useful advice
@ forrestgump2000 How did you do it for LG G2 ? It should be almost the same for the Gflex, could you perhaps lend a hand? Please?
I am trying to build it on Mac OSX , installed with macports gcc4.9 , using CROSS_COMPILE=/Downloads/android-ndk-r10c/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi- , ARCH=arm,SUBARCH=arm
make EXTRA_CFLAGS=-fno-pic M=fs/cifs Tells me about some versioning , then I run make modules before to create that file and then it doesn't complain.
Running out of ideas..... (will try a Ubuntu VM soon if nothing works...)
Thank you!
2nd really need this for off device storage
Work documentation
I've sent an e-mail to LG , let's see what happens....
"
Dear LG OpenSource Team,
I am currently trying very hard to compile a new module for my current kernel:LGD955_Gflex_Kikat_V20a_Kernel.zip
My work environment is the following:
Vmware Ubuntu 14.01 LTS , gcc 4.8
I have unpacked your kernel source and tried the following:
cp arch/arm/configs/z-open-com-perf_defconfig .
make z-open-com-perf_defconfig prepare headers_install scripts ARCH=arm CROSS_COMPILE=arm-linux-androideabi- O=build KERNELRELEASE=3.4.0-perf-g551cabf
make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-androideabi- O=build KERNELRELEASE=3.4.0-perf-g551cabf
Chosen Network File System Support -> CIFS (M) and saved.
make modules ARCH=arm CROSS_COMPILE=arm-linux-androideabi- O=build KERNELRELEASE=3.4.0-perf-g551cabf
adb push fs/cifs/cifs.ko /data/local/modules/
chmod 644 /data/local/modules/cifs.ko
insmod /data/local/modules/cifs.ko gives this Failure Message : … failed (Exec format error)
dmesg has this message inside: no symbol version for module_layout
A little info after building the module:
[email protected]:~/Downloads/kernel$ modinfo build/fs/cifs/cifs.ko
filename: /home/adi/Downloads/kernel/build/fs/cifs/cifs.ko
version: 1.78
description: VFS to access servers complying with the SNIA CIFS Specification e.g. Samba and Windows
license: GPL
author: Steve French <sfr[email protected]>
srcversion: 3F86E0A9406EADE34D14793
depends:
intree: Y
vermagic: 3.4.0-perf-g551cabf SMP preempt mod_unload modversions ARMv7
parm: CIFSMaxBufSize:Network buffer size (not including header). Default: 16384 Range: 8192 to 130048 (int)
parm: cifs_min_rcv:Network buffers in pool. Default: 4 Range: 1 to 64 (int)
parm: cifs_min_small:Small network buffers in pool. Default: 30 Range: 2 to 256 (int)
parm: cifs_max_pending:Simultaneous requests to server. Default: 32767 Range: 2 to 32767. (int)
parm: enable_oplocks:Enable or disable oplocks (bool). Default:y/Y/1 (bool)
[email protected]:/ # uname -r
3.4.0-perf-g551cabf
[email protected]:/ # uname -a
Linux localhost 3.4.0-perf-g551cabf #1 SMP PREEMPT Tue Apr 29 00:20:47 KST 2014 armv7l GNU/Linux
I am running out of ideas , could you please help ? What am I doing wrong? I love this Phone and want to learn more about it’s inner workings but when compiling a module fails , it leaves me a little hopeless…
Thank you in advance,
With kind regards,
Adrian
"
Fingers crossed
!!!! WARNING !!!!
-> This Article is for "Gentoo" or Gentoo-based linux users only..
-> Follow this article carefully otherwise u may break ur system completely, resulting in reinstallation of Gentoo
NOTE!! >>>
->This article will be updated always
-> Using clang instead of gcc isn't recommended but u can use clang if u follow this guide fully
-> Some packages fail with gcc and need clang to compile even if u don't need clang and vice versa (some packages even fail with clang)
Read Carefully -->>
Hello everyone !
First of all I apologize for any spelling mistakes made by me
This is a full guide to use clang as the default compiler for packages in ur pc with Gentoo linux installed
Make sure u read these manpages first >> make.conf , man make.conf and GCC Optimization
This articles says to use clang as the native compiler for ur system but not tells to completely replace gcc
Most of the linux distros use glibc which needs gcc and makes it impossible to use clang as the only compiler in the system i.e., u can't completely remove and replace gcc with clang
Some packages have gcc in their default config files which makes them break in using clang coz this makes the package to use clang with gcc (mixing compilers)
But..... There are still several packages which compile well with clang without any errors
Wait!! Why am I telling to use clang instead of gcc??
ans-> Clang is much faster than gcc and uses far less ram.. It has a special feature called thinlto which optimizes the package/app to provide more performance and uses much less ram than full lto or gcc lto..... gcc has no thinlto... Clang also uses lld as default linker which is much faster than gold/bfd..
For using clang we need to completely build our clang environment first and then properly setup
Below are the steps::
1) First of all, edit /etc/portage/make.conf file and set this :- USE="${USE} -clang -llvm"
2) Run "emerge -av clang llvm compiler-rt llvm-libunwind lld" to compile and install the clang toolchain with gcc first.. This isn't enough, don't use clang now in any case
3) Now make a dir named "env" in /etc/portage by running "mkdir -v /etc/portage/env"
4) Make a separate clang environment by running command "nano /etc/portage/env/compiler-clang" and add the following lines :
CC="clang"
CXX="clang++"
LD="ld.lld"
AR="llvm-ar"
NM="llvm-nm"
RANLIB="llvm-ranlib"
STRIP="llvm-strip"
OBJCOPY="llvm-objcopy"
OBJDUMP="llvm-objdump"
CFLAGS="-march=native -O2 -pipe"
CXXFLAGS="${CFLAGS} -stdlib=libstdc++"
LDFLAGS="-stdlib=libstdc++ -fuse-ld=lld -rtlib=compiler-rt -unwindlib=libunwind -Wl,-O2 -Wl,--as-needed"
or for thinlto
CC="clang"
CXX="clang++"
LD="ld.lld"
AR="llvm-ar"
NM="llvm-nm"
RANLIB="llvm-ranlib"
STRIP="llvm-strip"
OBJCOPY="llvm-objcopy"
OBJDUMP="llvm-objdump"
CFLAGS="-march=native -O2 -pipe -flto=thin"
CXXFLAGS="${CFLAGS} -stdlib=libstdc++ -flto=thin"
LDFLAGS="-stdlib=libstdc++ -fuse-ld=lld -rtlib=compiler-rt -unwindlib=libunwind -Wl,-O2 -Wl,--as-needed"
5) Edit /etc/portage/make.conf and add this -> USE="${USE} clang llvm default-compiler-rt default-lld llvm-libunwind -default-libcxx" ...
Note here we have added a few changes in USE flag: removed "-" present in-front of clang and llvm and also added "default-compiler-rt default-lld llvm-libunwind -default-libcxx"
Also here we putted a "-" in front of default-libcxx to prevent clang from using libc++ by default instead of libstdc++ as libc++ and libstdc++ aren't ABI compatible
Why dont use libc++??
ans-> As I previously said, most of linux distros use glibc and for which we can't remove gcc.. before installing clang u have gentoo installed on ur system with packages installed with gcc which uses libstdc++ by default
Here if u compile some packages with libc++, then they may not work untill u rebuild all gentoo linux packages with libc++ which is a lengthy and time consuming process.. So I don't recommend to use libc++.. Only use libstdc++
Let me give an example
Suppose u compiled package A with libstdc++ .. Now u are compiling package B which needs package A as dependency to work with libc++.. U will see that the installation may fail or be sucessful.. If sucessful, the package may not work properly as libc++ and libstdc++ aren't ABI compatible...
There are only two ways to fix this type of problem,
a) Compile package B with libstdc++ EASY
b) Compile package A and its dependencies with libc++ HARD
So use libstdc++
6) We have properly set our clang environment but the clang toolchain isn't completely built yet
If the clang toolchain is not properly bootstrapped then u may get lld linker errors
So its needed to build a proper clang toolchain
Make a file/edit /etc/portage/package.env and add these lines
sys-devel/llvm compiler-clang
sys-libs/libcxx compiler-clang
sys-libs/libcxxabi compiler-clang
sys-libs/compiler-rt compiler-clang
sys-libs/compiler-rt-sanitizers compiler-clang
sys-libs/llvm-libunwind compiler-clang
sys-devel/lld compiler-clang
sys-devel/clang compiler-clang
With these lines we are forcing packages listed here to compile using the separate clang environment we created in /etc/portage/env/compiler-clang rather than using default gcc compiler set in make.conf....
This means we will now recompile the whole clang toolchain using the clang compiler itself, making a proper clang toolchain..
7) Finally rebuild the whole clang toolchain with the command "emerge clang llvm libcxx libcxxabi compiler-rt llvm-libunwind lld"
8) Make a gcc fallback environment for packages failing with clang or for those which compulsory eed gcc in /etc/portage/env/compiler-gcc by adding these lines
CC="gcc"
CXX="g++"
LD="ld.bfd"
NM="gcc-nm"
AR="gcc-ar"
RANLIB="gcc-ranlib"
STRIP="strip"
OBJCOPY="objcopy"
OBJDUMP="objdump"
CFLAGS="-march=native -O2 -pipe"
CXXFLAGS="${CFLAGS}"
LDFLAGS="-Wl,-fuse-ld=bfd -Wl,-O2 -Wl,--as-needed"
9) Now edit /etc/portage/package.env and add these lines to prevent packages that compulsory need gcc from using clang
# Compulsory gcc needed
app-admin/eselect compiler-gcc
app-arch/bzip2 compiler-gcc
app-arch/gzip compiler-gcc
app-arch/xz-utils compiler-gcc
app-arch/tar compiler-gcc
app-shells/bash compiler-gcc
net-misc/rsync compiler-gcc
net-misc/wget compiler-gcc
sys-devel/autoconf compiler-gcc
sys-devel/automake compiler-gcc
sys-devel/libtool compiler-gcc
sys-apps/baselayout compiler-gcc
sys-apps/makedev compiler-gcc
sys-apps/coreutils compiler-gcc
sys-apps/diffutils compiler-gcc
sys-apps/file compiler-gcc
sys-apps/findutils compiler-gcc
sys-apps/gawk compiler-gcc
sys-apps/grep compiler-gcc
sys-apps/less compiler-gcc
sys-apps/net-tools compiler-gcc
sys-apps/portage compiler-gcc
sys-apps/sed compiler-gcc
sys-apps/shadow compiler-gcc
sys-devel/binutils compiler-gcc
sys-devel/bison compiler-gcc
sys-devel/flex compiler-gcc
sys-devel/gcc compiler-gcc
sys-devel/gettext compiler-gcc
sys-devel/gnuconfig compiler-gcc
sys-devel/make compiler-gcc
sys-devel/patch compiler-gcc
virtual/editor compiler-gcc
virtual/libc compiler-gcc
virtual/os-headers compiler-gcc
virtual/pkgconfig compiler-gcc
sys-apps/which compiler-gcc
DONE !!
Now we have a clean and proper clang environment
If u want to use clang system-wide, replace the envs like CC="" CXX="" LDFLAGS="" LD="",etc from /etc/portage/env/compiler-clang in /etc/portage/make.conf, otherwise put "package/name compiler-clang" in /etc/portage/package.env for those packages u need clang (if not using clang system-wide), e.g. dev-qt/qtwebengine compiler-clang
If u are using clang system-wide then some packages may fail to compile.. To fix this, put "package-name compiler-gcc" in /etc/portage/package.env to use the gcc fallback environment..
We are good to go now..
Enjoy Clang's fast compilation speed and less ram usage
U may ask does clang really use less ram?
ans-> Yes, when compiling qtwebengine with make -j6 using gcc, the ram usage was above 8gb
but with clang, ram usage was less than 5gb
I Hope This Guide Helps
EDIT 1: All The places where I used -march=native in CFLAGS/CXXFLAGS should be updated by urself according to ur processor specs... Please read the gcc-optimization article I pasted in the starting and put -march=specificcpu to optimize all packages according to ur processor... Also some packages don't support -march=native and need -march=specificcpu to work
EDIT 2: Using -O3 instead of -O2 in CFLAGS/CXXFLAGS isn't recommended unless u have a high end pc with atleast 16gb ram because, clang's "-O3" is an alias of "-O2 -flto" ... -flto enables full link time optimizations which will consume a lot ram during compilation.... If u still want to optimize ur applications more than "-O2", then I recommend u to use "-O2 -flto=thin" which will activate clang's thinlto instead of full lto and thinlto uses a few more ram compared to "-O2" but hugely less than full lto
EDIT 3: Some packages also fail to compile with lto .. If u face any package failure due to lto , then disable full lto or thinlto by removing "-flto=thin / -flto / -flto=full" from CFLAGS and CXXFLAGS
to be continued::::