Nexus 7
Contents
Cyanogenmod and LLVMLinux
This guide describes how to replace the default Linux Kernel in Nexus 7 in the Cyanogenmod for one built with LLVM/Clang using the LLVMLinux project infrastructure. It is high recommended to be familiar with Cyanogenmod or AOSP build system.
Basically the Cyanogenmod is patched to use a prebuilt kernel instead of building one on demand. The LLVMLinux is used to build the prebuilt kernel. Afterwards this kernel is copied to Cyanogenmod build system and the process follows as a normal Cyanogenmod build.
The procedure described here can be adapted to other devices at Cyanogenmod.
Building the kernel
Clone the LLVMLinux project.
git clone http://git.linuxfoundation.org/llvmlinux.git ~/llvmlinux
Enter in the Nexus 7 target directory.
cd ~/llvmlinux/targets/nexus7
Install the LLVMLinux project dependencies.
make build-dep
Copy the configuration for the first checkpoint (well known working state).
cp checkpoint/ckp1.mk config.mk
Checkout the proper LLVMLinux state.
git checkout 6f941c4a48a958417c0dae1e7a92131bc7bee34f
Sync and fetch all the external projects needed.
make CONFIG=config.mk sync-all
Build the Nexus 7 kernel.
make all
Copy the Nexus 7 kernel file.
cp ~/llvmlinux/targets/nexus7/src/android_kernel_nexus7/arch/arm/boot/zImage ~/llvmlinux/targets/nexus7/kernel
Patch the Cyanogenmod
Follow the steps at Cyanogenmod build for grouper up to Get prebuilt_apps stop and follow the instructions below.
Enter in the Nexus 7 directory.
cd ~/android/device/asus/grouper
Apply the following patch which replaces the kernel build instructions with the prebuilt kernel.
diff --git a/BoardConfigCommon.mk b/BoardConfigCommon.mk
index d077647..aa6f134 100644
--- a/BoardConfigCommon.mk
+++ b/BoardConfigCommon.mk
@@ -83,6 +83,3 @@ BOARD_USES_GROUPER_MODULES := true
# Required for CWM
BOARD_HAS_NO_SELECT_BUTTON := true
-
-TARGET_KERNEL_SOURCE := kernel/asus/grouper
-TARGET_KERNEL_CONFIG := cyanogenmod_grouper_defconfig
diff --git a/device.mk b/device.mk
index dd7aaa4..f38056b 100644
--- a/device.mk
+++ b/device.mk
@@ -14,10 +14,14 @@
# limitations under the License.
#
+TARGET_PREBUILT_KERNEL := device/asus/grouper/kernel
+LOCAL_KERNEL := $(TARGET_PREBUILT_KERNEL)
+
PRODUCT_PROPERTY_OVERRIDES := \
ro.carrier=wifi-only
PRODUCT_COPY_FILES := \
+ $(LOCAL_KERNEL):kernel \
device/asus/grouper/init.grouper.rc:root/init.grouper.rc
# the actual meat of the device-specific product definition
Copy the prebuilt kernel to the Nexus 7 directory.
cp ~/llvmlinux/targets/nexus7/kernel ~/android/device/asus/grouper/kernel
Continue the Cyanogenmod build. At the end you will have almost the same image as a normal Cyanogenmod build, except it is using another kernel. Follow the default steps to install it.
Boot and check
In the terminal application or using adb shell command, check the kernel built.
cat /proc/version
This will display the kernel built information. If you get "... clang version 3.3 ..." congratulations, you are running a LLVM/Clang Linux Kernel.
Links
- http://wiki.cyanogenmod.org/w/Build_for_grouper
- http://llvm.linuxfoundation.org/index.php/Main_Page
- http://llvm.linuxfoundation.org/index.php/Quick_Start_Guide
Compatibility Test Suite
- In progress.


