KernelBuild
Installing Ubuntu on the Nexus7 |
This project is no longer maintained. You might be interested in Ubuntu Touch though. |
Here's how to cross-build the kernel from the git repository.
Initial setup
Having ccache installed is optional but helpful if you are often rebuilding the package from scratch with minor modifications.
sudo apt-get install gcc-arm-linux-gnueabihf ccache git kernel-wedge
Get the source
git clone git://kernel.ubuntu.com/jani/ubuntu-nexus7.git
Create an alias called fdr that points to fakeroot debian/rules. You can stick this in ~/.bash_aliases and then source the file to make it permanent.
alias fdr="fakeroot debian/rules"
Rebuild the package
Go to the source directory
cd ubuntu-nexus7
Remove leftover from previous builds or other cruft
git clean -xdf
You need to do the following in order to disable cross-building of the linux-tools binary package, as that requires multiarch setup and some armhf libs installed in the host system.
sed -i '/do_tools/ s/true/false/' debian.linaro/rules.d/armhf.mk
Calling fakeroot debian/rules (fdr) clean is necessary before each build.
fdr clean
Next we create the package, and depending on your system speed, ccache and on the kernel configurations that are enabled it can take anywhere between 3 minutes and a couple of hours. The value for parallel works best when it equals the number of CPUs in your system + 1.
debuild -eDEB_BUILD_OPTIONS="parallel=3" -eCROSS_COMPILE="ccache arm-linux-gnueabihf-" -b -aarmhf -us -uc -nc
Change the configuration
The configuration file is in debian.linaro/config/config.common.ubuntu
Bring up menuconfig
fdr editconfigs
See what you have changed
git diff
Or edit that file manually and then updateconfigs so it checks your changes and fixes up any possible side-effects
fdr updateconfigs
Then run debuild again as above
Build zImage only
Sometimes you just want a zImage for a quick test such as inserting it in a boot.img and trying it out without a full deb installation.
This does an out of source tree build of a zImage (no modules) using the current Ubuntu configs. Faster than a full package build. Like the value for parallel mentioned above, the -j value works best when it is number of CPUs + 1.
cd ubuntu-nexus7 mkdir ../build cp debian.linaro/config/config.common.ubuntu ../build/.config CROSS_COMPILE="ccache arm-linux-gnueabihf-" ARCH=arm make O=../build -j3 zImage