Treiber Module kompilieren nicht trotz richtigem Kernel Src

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Antworten
matthias_k
Beiträge: 71
Registriert: 25.03.2004 19:16:37
Wohnort: Kaiserslautern

Treiber Module kompilieren nicht trotz richtigem Kernel Src

Beitrag von matthias_k » 25.03.2004 19:33:28

Hallo,

ich habe mir gerade ein Debian 3.0r2 Woody System aufgesetzt und versuche nun meine Hardware ans laufen zu bringen. Bei der Netzwerkkarte scheitert es aber schon: Ich kann den Driver Source meiner 3Com 3c940 nicht kompilieren, weder den Linux Treiber von der ASUS Homepage (Die Karte ist onboard) noch den Treiber von Syskonnect der angeblich auch mit der Karte laufen soll.

Als Kernel benutze ich den 2.4.18-bf2 den man auch bei der Debian Installation wählen kann. Den passenden Sourcecode habe ich in /usr/src/linux installiert. Trotzdem bekomme ich compiler fehler wenn ich die makefiles des Netzwerktreiber Quellcodes starte (mehrfach definierte Symbole). Der Treiber funktioniert angeblich mit Kernel Versionen ab 2.4.13.

Was mache ich falsch? Ich habe mich strikt an die README des Treibers gehalten.

Danke im Voraus,
Matthias

Benutzeravatar
pil
Beiträge: 629
Registriert: 30.04.2002 15:47:27

Re: Treiber Module kompilieren nicht trotz richtigem Kernel Src

Beitrag von pil » 25.03.2004 20:02:22

Was meinst du mit "Treiber Module"?
Sind das Treiber, die als Kernel-Module eingebunden werden, oder völlig eigenständige Treiber.

Im ersteren Fall solltest du mit make menuconfig in /usr/src/linux die Kernel-Kompilierung mal anstossen und dann die Konfiguration sichern. Erst dadurch werden nämlich die nötigen header-Dateien erzeugt.

matthias_k
Beiträge: 71
Registriert: 25.03.2004 19:16:37
Wohnort: Kaiserslautern

Beitrag von matthias_k » 25.03.2004 21:01:11

Ich weiss nicht genau, ich hab mir den Treiber als Quellcode gezogen und will ihn erstmal kompilieren. Ob ich ihn später in den Kernel einbaue oder immer manuell als Modul lade ist doch erstmal egal oder?

Ich kann mir nur den Compiler Fehler nicht erklären, zumal er bei beiden Treibern für die Netzwerkkarte auftritt.

matthias_k
Beiträge: 71
Registriert: 25.03.2004 19:16:37
Wohnort: Kaiserslautern

Beitrag von matthias_k » 25.03.2004 21:03:03

Hier ist die Readme des 3Com Treibers (der angeblich auf dem Syskonnect Treiber basiert):
3Com Gigabit NIC (3C2000) Driver Readme Version A02
Copyright (c) 2003 3Com Corporation

This file describes the 3Com Gigabit NIC (3C2000) driver for Linux.

Loading the driver
------------------

1) Make sure that the kernel source is installed in /usr/src/linux
or /usr/src/linux-2.4.

2) Copy the file /Linux/3c2000.tar.gz from the 3Com driver CD to
your hard drive.

3) Change to the directory containing 3c2000.tar.gz

4) Type 'tar zxvf 3c2000.tar.gz'

5) Type 'cd 3c2000'

Note: on SuSE systems since 7.1, you will have to execute the
following commands before running make:

cp /boot/vmlinuz.version.h /usr/src/linux/include/linux/version.h
cp /boot/vmlinuz.autoconf.h /usr/src/linux/include/linux/autoconf.h

For more details se http://sdb.suse.de/en/sdb/html/mwalter_kernel_24.html

6) Type 'make load' to load the driver.

Alternatively, you may type the following to load the driver:

insmod 3c2000.o

Something like the following will be added to /var/log/messages:

Jan 22 19:31:19 localhost kernel: 3C2000: 3Com Gigabit NIC Driver Version A08
Jan 22 19:31:19 localhost kernel: Copyright (C) 2003 3Com Corporation.
Jan 22 19:31:19 localhost kernel: Copyright (C) 2003 Marvell.
Jan 22 19:31:19 localhost kernel: eth0: 3Com Gigabit NIC (3C2000)

Depending on your configuration, the OS may then automatically bring the
interface up and request an address from a DHCP server. If it does not,
bring the interface up with the command:

ifconfig eth0 up

You may have to substitue 'eth0' for your actual interface if you have
more than one ethernet NIC installed.

If your system is not configured for DHCP, you can assign an IP address
with the command:

ifconfig eth0 a.b.c.d

Where a.b.c.d is the IP address that you wish to use. Again, eth0 may
be different depending on your system configuration.

Configuring the Driver
------------------------

The 3C2000 driver supports various options, which can be supplied
as command line arguments to the 'insmod' command or in the
/etc/modules.conf file. You may specify more than one option.
Unless otherwise stated, all settings take the form of:

<Option-Name>=value [,value...]

If you use the modules.conf file to load the driver at boot time,
include the word "options" when configuring the driver.

For example:
options 3c2000 DupCap_A=Full

If you use command line 'insmod', do not include the word "option"
when configuring the driver.

For example:
insmod 3c2000.o DupCap_A=Full


The following options are supported:

OPTION: Speed_A
Selects the speed of Port A of the NIC.

"Auto" - Automatic Resolution
"10" - 10MBPS
"100" - 100MBPS
"1000" - 1GIG

OPTION: DupCap_A
Selects the duplex capabilities of Port A of the NIC.

"Full" - Full Duplex
"Half" - Half Duplex
"Both" - Both Half Duplex & Full Duplex


To unload the driver
--------------------

1) Type 'ifconfig eth0 down' (Substitute you actual interface for 'eth0')

2) Type 'rmmod 3c2000'
Ich hab alles so gemacht wies da steht.

Benutzeravatar
pil
Beiträge: 629
Registriert: 30.04.2002 15:47:27

Beitrag von pil » 26.03.2004 09:17:26

Damit von Anfang an Ordnung auf dem System ist, solltest du zuerst /usr/src/linux umbennen in /usr/src/linux-2.4.18-bf2 (Wenn es sich denn genau um diese Kernel-Quellen handelt.)
Dann einen Link anlegen /usr/src/linux -> /usr/src/linux-2.4.18-bf2

Dann solltest du auf jeden Fall die Kernel-Kompilierung anstossen, um die nötigen header-Dateien zu erzeugen: version.h, autoconf.h



Was passiert, wenn du jetzt im Verzeichnis 3c2000 make eingibst?

6) Type 'make load' to load the driver.
Was passiert, wenn du diesen Befehl eingibst?
3c2000.o
Das ist der Treiber, der als Kernel-Modul eingebunden werden soll.
Gibt es diese Datei?

matthias_k
Beiträge: 71
Registriert: 25.03.2004 19:16:37
Wohnort: Kaiserslautern

Beitrag von matthias_k » 26.03.2004 10:19:50

Alles klar, das werde ich mal versuchen, vielen Dank.

Ich komme heute leider nicht mehr dazu, ich melde mich dann morgen obs geklappt hat!

EDIT:
Mir fällt nämlich grad auch ein: Diese beiden Dateien, version.h und autoconf.h waren nicht vorhanden, also hab ich mal mit find danach gesucht und sie in /include gefunden und manuell nach /usr/src/linux/include (oder so ähnlich) kopiert. Vielleciht waren das die falschen Dateien und haben den Fehler erzeugt.

Was macht eigentlich dieses Kernel-Header Paket das ich mit dselect installieren kann? Wozu brauche ich das?

Benutzeravatar
pil
Beiträge: 629
Registriert: 30.04.2002 15:47:27

Beitrag von pil » 26.03.2004 10:48:40

matthias_k hat geschrieben: Was macht eigentlich dieses Kernel-Header Paket das ich mit dselect installieren kann? Wozu brauche ich das?
Das sind header-Dateien, mit denen die C-Library kompiliert wurde. Die befinden sich in /usr/include und haben in der Regel mit den Dateien in /usr/src/linux/include nix zu tun.

Bevor du die Kernel-Kompilierung anstösst, solltest du mit make clean evtl. vorhandenen Müll entfernen.

Antworten