First get Linux/MIPS kernel sources, for example from CVS. In the next step we need to configure the kernel sources by running make config, make menuconfig, make xconfig
The following is about building vanilla linux-mips.org kernels using unmodified GNU toolchains. Further requirements are documented in Documentation/Changes. Below are additional MIPS-specific requirements. If you're trying to build a vendor kernel, please use the vender supplied or recommended toolchain.
- The Lemote 2F defconfig build requires binutils 2.20.2 which at the time of this writing is still unreleased.
- GCC 3.2 is a lost cause for building 64-bit kernels
- GCC 3.3 is broken but can just about be kludged to build a 64-bit kernel.
- GCC 4.4 or a patched older version is required to build a kernel O2 or Indigo² with R10000 processors.
- GCC 3.2 used to work for the rest but it's a very long time since I tested this for a modern kernel.
- Linux 2.6.29 and older need a GCC older than 4.4.0 to compile.
Problems caused by non-Linux/MIPS toolchain
make: Entering directory `/usr/src/linux-mips/arch/mips/kernel' mips_4KC-gcc -D__ASSEMBLY__ -D__KERNEL__ -I/usr/eldk/usr/src/linux-mips/include -D_MIPS_SZLONG=32 -D_MIPS_SZPTR=32 -D_MIPS_SZINT=32 -g -G 0 -mno-abicalls -fno-pic -pipe -c -o entry.o entry.S entry.S: Assembler messages: entry.S:225: Error: unrecognized opcode `reg_s $8,164($29)' entry.S:226: Error: unrecognized opcode `reg_s $8,164($29)'
_MIPS_SZLONG etc. are normally defined by the gcc compiler driver. That is they should never be defined by the application itself. The precense of such kludgery usually indicates the use of a toolchain that wasn't configured for a Linux/MIPS target.
ld dies with signal 6
collect2: ld terminated with signal 6 [Aborted]
This is a known bug in some very old binutils versions. You will have to upgrade to at least binutils 2.8.1 plus very current patches. With Linux 2.4 or newer binutils 220.127.116.11 or newer is probably recommended.
Linux 2.6 build fails early
$ make CHK include/linux/version.h HOSTCC scripts/basic/fixdep HOSTCC scripts/basic/split-include HOSTCC scripts/basic/docproc CC scripts/mod/empty.o gcc: cannot specify -o with -c or -S and multiple compilations make: *** [scripts/mod/empty.o] Error 1 make: *** [scripts/mod] Error 2 make: *** [scripts] Error 2
There are two possible causes for this failure known:
- Make sure you have set CONFIG_CROSSCOMPILE or add
CROSS_COMPILE=<target>to the make invocation.
- A few early Linux 2.6 kernels had a bug which would always result in this error message. In this case you really should upgrade.
This is caused by a linker bug that exists in at least binutils 2.15. If you hit it you should upgrade to binutils 2.16.