Ich werde den Linux Kernel 2.4.32 in meinem x86_64 System kompilieren.Multiple Definition von vielen Funktionen im Linux Kernel 2.4.32 kompilieren
make dep ist ok, aber bzImage Haltestelle nach wie diese viele Verbindungsfehler zeigt machen:
ld -m elf_x86_64 -e stext -r -o kernel.o sched.o dma.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 ksyms.o pm.o
dma.o: In function `set_64bit':
dma.c:(.text+0x0): multiple definition of `set_64bit'
sched.o:sched.c:(.text+0x1b): first defined here
dma.o: In function `get_order':
dma.c:(.text+0x4): multiple definition of `get_order'
sched.o:sched.c:(.text+0x0): first defined here
dma.o: In function `read_lock':
dma.c:(.text+0x1a): multiple definition of `read_lock'
sched.o:sched.c:(.text+0x9c): first defined here
dma.o: In function `cpuid':
dma.c:(.text+0xc9): multiple definition of `cpuid'
sched.o:sched.c:(.text+0x24): first defined here
dma.o: In function `cpuid_eax':
dma.c:(.text+0xe1): multiple definition of `cpuid_eax'
sched.o:sched.c:(.text+0x41): first defined here
dma.o: In function `cpuid_ebx':
dma.c:(.text+0xe8): multiple definition of `cpuid_ebx'
sched.o:sched.c:(.text+0x4d): first defined here
dma.o: In function `cpuid_ecx':
dma.c:(.text+0xf1): multiple definition of `cpuid_ecx'
sched.o:sched.c:(.text+0x5b): first defined here
dma.o: In function `cpuid_edx':
dma.c:(.text+0xfa): multiple definition of `cpuid_edx'
sched.o:sched.c:(.text+0x69): first defined here
dma.o: In function `thread_saved_pc':
dma.c:(.text+0x103): multiple definition of `thread_saved_pc'
sched.o:sched.c:(.text+0x77): first defined here
dma.o: In function `rep_nop':
dma.c:(.text+0x10c): multiple definition of `rep_nop'
sched.o:sched.c:(.text+0x85): first defined here
dma.o: In function `sync_core':
dma.c:(.text+0x10f): multiple definition of `sync_core'
sched.o:sched.c:(.text+0x8d): first defined here
in den kernel2.4.32/include Verzeichnis gibt es viele asm Verzeichnisse jeder gehört zu einer bestimmten Architektur (z. B. asm-i386, asm-x86_64, asm-a64)
und es gibt eine einzige asm Verzeichnis, das zu asm-x86_64 Verzeichnis verknüpft ist (wegen meiner Systemarchitektur)
wenn ich eine Funktion mit mehrere Definition entfernen (wie set_64bit in der Liste Fehler) aus einem dieser beiden Verzeichnissen asm und asm -x86_64 Der Fehler wird verschwinden.
Gibt es ein Problem mit Makefile oder Config-Datei? Warum kompilieren diese Funktionen mehrmals ??!
Bitten helfen Sie mir ...
Dieser Kernel ist ungefähr zehn Jahre alt und möglicherweise nicht mit modernen Compilern kompatibel. Gibt es einen bestimmten Grund, warum Sie diese Version erstellen müssen? – duskwuff
Sieht so aus, als wäre es ein Druckfehler in der [Funktionsdefinition] (http://lxr.free-electronics.com/source/include/asm-x86_64/system.h?v=2.4.37#L137): Sie verwenden 'extern Inline' statt der üblichen 'Static Inline' Definition in der Kopfzeile. – Tsyvarev
@duskwuff Ich möchte ein Kernel-Modul einer Software hinzufügen (klicken Sie auf modularen Router) und diese Software unterstützt nur eine begrenzte Version von Linux. Ich teste auch 2.6, funktioniert aber auch nicht. –