ia32-libs lib32z1-dev lib32ncurses5-de lib32ncurses5-dev v gcc-multilib g++-multilib
Setup Repo Make sure you have a ~/bin directory, and setup repo.
mkdir -p ~/bin curl http://android.git.kernel.org/repo > ~/bin/repo chmod a+x ~/bin/repo echo $PATH|grep ~/bin>/dev/null||export PATH="${PATH}":~/bin hash -r To validate the repo command is in your path, type 'which repo'. If you do not have ~/bin in $PATH by default and are using bash, do the following:
Download ROM Source Code mkdir -p ~/android/system cd ~/android/system repo init -u git://github.com/CyanogenMod/android.git -b gingerbread repo sync This may take 1.5 hours, more or less, depending on your connection. Create an environment variable denoting the location of the android toolchain as follows:
Download Kernel Source Code mkdir -p ~/android/kernel cd ~/android/kernel git clone git://github.com/CyanogenMod/cm-kernel.git cd cm-kernel
Configure the Build Retrieve a working kernel config from the device, and unzip it:
adb pull /proc/config.gz /home/user_name/android/kernel/cmkernel/config.gz gunzip config.gz && mv config .config Alternatively, you can pull the .config from the newest boot.img
scripts/extract-ikconfig boot.img > .config Configure the build. Just enter to accept defaults, or customize as needed:
make ARCH=arm CROSS_COMPILE=$CCOMPILER oldconfig make ARCH=arm CROSS_COMPILE=$CCOMPILER menuconfig
Make the build make ARCH=arm CROSS_COMPILE=$CCOMPILER -j`grep 'processor' / proc/cpuinfo | wc -l` This step may take a while, depending on your computer. At this point you should have a kernel stored in
~/android/kernel/cm-kernel/arch/arm/boot/zImage
Merge the build You will need to merge this file with a working cyanogen ramdisk in order to create a boot image suitable for flashing. Follow these instructions here. If all goes well, you should now be running your own custom CyanogenMod kernel on the device. Note: If you are building for Nexus One, you should use --base 0x20000000 when
running mkbootimg.
Compiling wifi kernel module After installing a custom kernel, the wifi module may be unstable or unusable. The solution is to recompile the module, linking it to the new kernel build.
cd ~/android/system/system/wlan/ti/sta_dk_4_0_4_32 KERNEL_DIR=~/android/kernel CROSS_COMPILE=$CCOMPILER ARCH=arm make -j`grep 'processor' /proc/cpuinfo | wc -l` A file named wlan.ko will be produced in the current directory. You must install the new module to the device.
adb shell mount -o remount,rw /system adb shell cp /system/lib/modules/wlan.ko /system/lib/modules/ wlan.ko.backup adb push wlan.ko /system/lib/modules/wlan.ko Reboot the device. If all goes well, you should be using the newly compiled 'wlan.ko'.
Installing kernel modules for debian chroot installation If you have a debian chroot install on the device, you will want to add to it the loadable modules that were built along with the kernel. This is necessary to use things like fuse, cifs, etc. First tar up and transfer over the modules
cd ~/android/kernel tar -czf modules.tgz `find . | grep ko$` adb push modules.tgz /sdcard Then, Copy the modules to your debian install (Replace with the root of your debian installation)
adb shell mkdir /lib/modules/`uname -r` cd
Last, Install the modules from debian (must be done as root). Log in to your debian installation using your method of choice, then:
depmod -a If all goes well, depmod should produce no output. At this point you may load a kernel module from within debian by typing (as root):
modprobe where is the name of the kernel module without the .ko extension. You may remove a module by typing: