Sunday, 10 June 2012

Experimental Nexus S Kernel (3.0.34_r1) release


As 3.0.29_r1 stable with the following changes:

  • Voodoo Sound v10
  • Merged to 3.0.34 from
  • Compiled using a Newlib based bare metal GCC 4.6.3 toolchain, config here if anyone interested.
  • Some experimental compiler optimisations applied to Makefile: KBUILD_CFLAGS which increase benchmarked performance: -mtune=cortex-a8 -mfpu=neon -ftree-vectorize -floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block.
  • Optimised vfp code compilation: KBUILD_AFLAGS -mfpu=neon
  • Optimised PVR code compilation: -O2 instead of -Os

    Known issues:

    • None

    Available here.


    1. Comment from a user at xda:

    2. Hi,

      I just flashed this kernel and noticed when reading your options used to compile the kernel, this line stood out: "--with-tune=cortex-a9".

      Shouldn't that be "cortex-a8" and not "cortex-a9" since the Nexus S uses the Samsung Exynos 3110 and not the Samsung Exynos 4xxx series which uses Cortex A9?


    3. The GCC config is not the options used to compile the kernel, those are the default values compiled into the toolchain to be used if nothing else is specified.

      For example, by default, assuming the makefile doesn't override it, that toolchain will pass -mtune=cortex-a9 -mfpu=neon -march=armv7-a when building.

      I use the toolchain against cortex-a9 targets (Pandaboard) more than cortex-a8, so my default is sane for my usage.

      When the kernel is compiled, -mtune and -mfpu are not passed at all which is why I add -mtune=cortex-a8 -mfpu=neon here:

      Also, just for info, compiling something with -mtune=cortex-a9 -march=armv7-a means it is tuned for Cortex A9, but will run on any ARM v7 CPU.

      Also, another point of interest, when I was testing different compiler optimisations on hummingbird, I found that using -mcpu=cortex-a8 (which compiles specifically for that cpu) actually hurt performance as opposed to -mtune=cortex-a8. Go figure.