Arrgh. arm 2.4 kernel is a fork.

Dan Kegel
Sat Oct 2 06:22:00 GMT 2004

Having spent a little while trying to write a script to build a
kernel for every supported CPU,
I'm kind of fed up with the fragmentation of the linux-2.4 kernel
series.  To build an arm kernel at all, you have to apply a megapatch, e.g.
Some of the changes in those patches are innocent, and should really be in
the vanilla kernel, like this one, which fixes the error
  drivers/char/char.o(.text+0x178a4): In function `$a': undefined reference to `get_user'

diff -urN linux-2.4.26/drivers/char/wdt977.c linux-2.4.26-vrs1/drivers/char/wdt977.c
--- linux-2.4.26/drivers/char/wdt977.c  2002-11-28 23:53:12.000000000 +0000
+++ linux-2.4.26-vrs1/drivers/char/wdt977.c     2004-01-14 21:32:25.000000000 +0000
@@ -27,6 +27,7 @@
  #include <asm/io.h>
  #include <asm/system.h>
  #include <asm/mach-types.h>
+#include <asm/uaccess.h>

  #define WATCHDOG_MINOR 130

(C'mon, send that to Marcello already.)   And then there are the stinkers
that make it clear that the arm kernel is a bit of a fork:

diff -urN linux-2.4.26/kernel/Makefile linux-2.4.26-vrs1/kernel/Makefile
--- linux-2.4.26/kernel/Makefile        2001-09-17 05:22:40.000000000 +0100
+++ linux-2.4.26-vrs1/kernel/Makefile   2004-01-14 21:32:30.000000000 +0000
@@ -9,16 +9,19 @@

  O_TARGET := kernel.o

-export-objs = signal.o sys.o kmod.o context.o ksyms.o pm.o exec_domain.o printk.o
+export-objs = signal.o sys.o kmod.o context.o ksyms.o pm.o exec_domain.o \
+             printk.o fork.o cpufreq.o

-obj-y     = sched.o dma.o fork.o exec_domain.o panic.o printk.o \
+obj-y     = sched.o fork.o exec_domain.o panic.o printk.o \
             module.o exit.o itimer.o info.o time.o softirq.o resource.o \
             sysctl.o acct.o capability.o ptrace.o timer.o user.o \
             signal.o sys.o kmod.o context.o

+obj-$(CONFIG_GENERIC_ISA_DMA) += dma.o
  obj-$(CONFIG_UID16) += uid16.o
  obj-$(CONFIG_MODULES) += ksyms.o
  obj-$(CONFIG_PM) += pm.o
+obj-$(CONFIG_CPU_FREQ) += cpufreq.o

  ifneq ($(CONFIG_IA64),y)
  # According to Alan Modra <>, the -fno-omit-frame-pointer is

Note how that gets rid of dma.c.  This is because arm has its own private
version of dma.c elsewhere, and you can't link a kernel with both.
And once you apply this patch, you can't build a kernel for anything but arm.

That's it.  I'm giving up on 2.4; it's too fragmented.
I suspect 2.6 is a bit more unified.  If not, well, it's not in
deep freeze mode like 2.4 is, and the forkettes can be fixed.
- Dan

My technical stuff:
My politics: see for examples of why I'm for regime change

Want more information?  See the CrossGCC FAQ,
Want to unsubscribe? Send a note to

More information about the crossgcc mailing list