KernelBuild

Differences between revisions 2 and 16 (spanning 14 versions)
Revision 2 as of 2012-11-06 16:41:56
Size: 1469
Editor: c-75-71-83-192
Comment:
Revision 16 as of 2012-11-08 12:37:51
Size: 2540
Editor: 79-119-116-162
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
<<Include(Nexus7/Header)>>
Line 8: Line 10:
sudo apt-get install gcc-arm-linux-gnueabihf ccache sudo apt-get install gcc-arm-linux-gnueabihf ccache git kernel-wedge
Line 14: Line 16:
git clone git://kernel.ubuntu.com/jani/ubuntu-nexus7.git git clone git://kernel.ubuntu.com/hwe/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"
Line 18: Line 26:
$cd ubuntu-nexus7
$git clean -xdf
Line 21: Line 27:
You may want to do this to disable cross-building of the linux-tools binary package, as that requires multiarch setup and some armhf libs installed in the host system. Go to the source directory
Line 23: Line 29:
$sed -i '/do_tools/ s/true/false/' debian.linaro/rules.d/armhf.mk {{{
cd ubuntu-nexus7
}}}
Line 25: Line 33:
$fdr clean (fdr is the shell alias for fakeroot debian/rules, useful as it is typed quite often while working with the kernel package)
$debuild -eDEB_BUILD_OPTIONS="parallel=3" -eCROSS_COMPILE="ccache arm-linux-gnueabihf-" -b -aarmhf -us -uc -nc
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
Line 32: Line 86:
This does an out of source tree build of a zImage (no modules) using the current Ubuntu configs 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.
Line 34: Line 88:
$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 -j 8 zImage

In the above snippets -j and parallel= are obviously to be adjusted depending on need.
{{{
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
}}}

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/hwe/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

Nexus7/KernelBuild (last edited 2012-11-13 11:07:36 by dholbach)