How to compile ONLY a kernel

  • While trying to build the whole system for my N7, I'm looking for a way of ONLY building a kernel, preferably outside of the whole gigantic source tree checked out by repo.

    However, I think I'm stuck with two (hopefully) simple questions:

    • how to set the kernel config file
    • how to do the cross compilation

    What I've tried so far:

    • clone the kernel I want to try ( git://, branch mako-kernel)
    • copy the config I want to use into .config
    • but when I try to run make it will always insist on going through an endless series of questions what to configure and how to update the config instead of just using it
    • looking at this: I have now copied my config into arch/arm/configs/myconfig_defconfig
    • when I now run make ARCH=arm myconfig_defconfig it says it copied the config, OK
    • However afterwards I run make ARCH=arm it fails quickly (error below). I think this is because I'm using the wrong compiler. Which would make sense because I'm on my laptop and I guess I need an arm crosscompiler, but I don't know how to do this.
      CHK     include/linux/version.h
      CHK     include/generated/utsrelease.h
    make[1]: 'include/generated/mach-types.h' is up to date.
      CC      kernel/bounds.s
    gcc: error: unrecognized argument in option ‘-mabi=aapcs-linux’
    gcc: note: valid arguments to ‘-mabi=’ are: ms sysv
    gcc: error: unrecognized command line option ‘-mlittle-endian’
    gcc: error: unrecognized command line option ‘-mapcs’
    gcc: error: unrecognized command line option ‘-mno-sched-prolog’
    gcc: error: unrecognized command line option ‘-mno-thumb-interwork’
    /media/peter/share2/data/freedreno/kernel-msm/./Kbuild:35: recipe for target 'kernel/bounds.s' failed

    Can someone help me? Am I just approaching this the wrong way?

  • I think I figured it out - the compiler is happily chugging along - let's see.

    What I did was: Following this: , I did

    sudo apt install gcc-arm-linux-gnueabihf 
    export CROSS_COMPILE=arm-linux-gnueabihf-
    export CC=/usr/bin/arm-linux-gnueabihf-gcc
    export $(dpkg-architecture -aarmhf)
    make clean
    make ARCH=arm myconfig_defconfig
    make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf- 

    That got me one step further, but then make was complaining about something with gcc 5, so I assume that I was using a too new compiler version, so I installed 4.8. Afterwards it seemed as if still the wrong compiler was picked up at some steps, so I created a couple of symlinks to make sure it uses the right one:

    sudo apt install gcc-4.8-arm-linux-gnueabihf
    mkdir ~/bin-gcc-4.8
    cd ~/bin-gcc-4.8
    ln -s /usr/bin/arm-linux-gnueabihf-gcc-4.8 .
    ln -s arm-linux-gnueabihf-gcc-4.8 arm-linux-gnueabihf-gcc
    ln -s /usr/bin/arm-linux-gnueabihf-ld .
    ln -s /usr/bin/arm-linux-gnueabihf-ar .
    export PATH=~/bin-gcc-4.8:$PATH
    export CC=/usr/bin/arm-linux-gnueabihf-gcc-4.8
    export CROSS_COMPILE=arm-linux-gnueabihf-
    export $(dpkg-architecture -aarmhf)
    make clean
    make ARCH=arm myconfig_defconfig
    make ARCH=arm CROSS_COMPILE=~/bin-gcc-4.8/arm-linux-gnueabihf- 

    Maybe there are more straight forward ways to achieve this ... Whatever, it seems to work

  • Community

    Yes, that is exactly how you do it. Generally the Android build system will use its own customized versions of gcc automagically, so you need to specify any alternatives yourself in a single build.

    I was able to use update-alternatives to swap out my compilers once upon a time, though I don't recommend that unless you're building in a container.

Log in to reply

Looks like your connection to UBports Forum was lost, please wait while we try to reconnect.