Linux 15.036 Themen, 107.107 Beiträge

WLAN unter (k)ubuntu

bizz_88 / 17 Antworten / Baumansicht Nickles

hallo zusammen,

habe Probleme damit, meine Wlan-karte(SMC2802W) unter kubuntu zum laufen zu bringen.
Die karte ist mit Linux kompatibel, sofern man den prism54 treiber installiert, doch bei dessen installation läuft bei mir immer was schief(unabhängig von der Linux distri).
Sobald ich das prism54 archiv entpackt habe und mit "make clean modules" den treiber installieren möchte gibt die Konsole ungefähr folgendes aus:

root@ubuntu:/home/niklas/Desktop/Home/prism54-cvs-latest# make modules clear
make -C ksrc/ modules
make[1]: Gehe in Verzeichnis »/home/niklas/Desktop/Home/prism54-cvs-latest/ksrc«
make -C /lib/modules/2.6.12-9-686/build SUBDIRS=/home/niklas/Desktop/Home/prism54-cvs-latest/ksrc modules
make: *** /lib/modules/2.6.12-9-686/build: Datei oder Verzeichnis nicht gefunden. Schluss.
make: Gehe in ein unbekanntes Verzeichnismake: Verlasse ein unbekanntes Verzeichnismake[1]: *** [modules] Fehler 2
make[1]: Verlasse Verzeichnis »/home/niklas/Desktop/Home/prism54-cvs-latest/ksrc«
make: *** [modules-all] Fehler 2


Ausgabe von iwconfig:

niklas@ubuntu:~$ iwconfig
lo no wireless extensions.

eth0 no wireless extensions.

eth1 no wireless extensions.

eth2 NOT READY! ESSID:off/any
Mode:Managed Channel:0 Access Point: 00:00:00:00:00:00
Tx-Power=31 dBm Sensitivity=0/200
Retry min limit:0 RTS thr=0 B Fragment thr=0 B
Link Quality:0 Signal level:0 Noise level:0
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0

sit0 no wireless extensions.


Meine Frage ist jetzt was ich falsch mache...

MfG bizz_88

PS: Habe noch die etwas ältere prism Version vom Sommer...

bei Antwort benachrichtigen
Onkel25Gandalf bizz_88 „WLAN unter (k)ubuntu“
Optionen

Hallo,

>> make: *** /lib/modules/2.6.12-9-686/build: Datei oder Verzeichnis nicht gefunden.

in dem nicht gefundenen Verzeichnis liegen nach ihrer Installation die Kernel-Headers. Diese musst du also zuerst installieren: "sudo apt-get install linux-headers-2.6.12-9-686" oder einfach via synaptic/adept raussuchen...

Gruß, Mario

PS: Bei derartigen Problem findet man auch recht schnell Hilfe im ubuntuusers.de Forum bzw. Wiki.

bei Antwort benachrichtigen
KarstenW Onkel25Gandalf „Hallo, make: /lib/modules/2.6.12-9-686/build: Datei oder Verzeichnis nicht...“
Optionen

Stimmt nicht ganz. Ubuntu baut auf Debian testing auf. Es gibt zwei unterschiedliche Haderdateien. Einmal die System Header-Dateien. Diese dateien werden zum Kompilieren von Programmen benötigt die im Userspace (Adressbereich für normale Programme) laufen.

Wenn man Treiber kompilieren will, dann muß der komplette Sourcecode des Betriebsystemkerns installiert werden. Da sind auch wieder Headerdateien dabei. Diese speziellen Headerdateien des Betriebsystemkerns werden zum Kompileren von Treibern gebraucht. (oder eben für Programme die im Kernelspace , im Adressbereich des Betriebsystemkerns, laufen).
Irgendwann soll sich das mal ändern sagt Linux Torwalds:



On any distribution, there are two sets of kernel headers :

System kernel headers
These are the kernel headers actually used by the system. These are the headers you compile user-space utilities against. They must be installed to compile anything in userspace.

The headers are usually found in /usr/include/asm and /usr/include/linux. They are copies and should never be replaced (unless you are doing a C library upgrade). These headers contain compatibility code etc. to allow them to be used with a variety of different running kernels, and are conceptually part of the glibc package. They can often be found in the kernel-headers or libc6-dev RPM/package.

Kernel source headers
These are the kernel header files that are part of the kernel source package. They should never be used for compiling user-space programs. Old Linux distributions often made /usr/include/linux and /usr/include/asm symlinks to the right parts of the kernel source tree installed in /usr/src/linux. This is the wrong thing to do - userspace programs must use copies of the kernel headers, suitably modified.

Conversely, when compiling the kernel, or kernel modules, these headers must be used. This is important when compiling externally packaged modules - the module build should look in the right place for the headers (by e.g. adding -I/lib/modules/`uname -r`/build/include).

Read Linus' explanation of the situation.

The kernel hackers are thinking about sanitising a separate set of headers you can include in user space. Let's hope it will happen in linux-2.7. Here's what Linus says.


http://www.kernelnewbies.org/faq/

zum Nachlesen.

Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
KarstenW Nachtrag zu: „Stimmt nicht ganz. Ubuntu baut auf Debian testing auf. Es gibt zwei...“
Optionen
Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
KarstenW Nachtrag zu: „PS: Ich meinte Linus Torwalds:...“
Optionen

PPS: Es kann auch noch wichtig sein, das man das Kernelmodul (Treibermodul) mit der gleichen Kompilerversion übersetzt mit der der Betriebsystemkern kompiliert wurde:

Dieser betriebsystemkern wurde mit der gcc Version 4.0.2 kompiliert:

dmesg | less

Linux version 2.6.12 (root@Winkler2) (gcc version 4.0.2 (Debian 4.0.2-2)) #1 Tue Dec 6 12:05:43 CET 2005
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved)


installiert ist aber folgende Version:

gcc -v


Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --enable-languages=c,c++,java,f95,objc,ada,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.0 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-java-awt=gtk-default --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-4.0-1.4.2.0/jre --enable-mpfr --disable-werror --enable-checking=release i486-linux-gnu
Thread model: posix
gcc version 4.0.3 20051201 (prerelease) (Debian 4.0.2-5)

Die Kompiler erzeugen teilweise unterschiedlichen Binärcode. Das kann manchmal Probleme verursachen.

Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
bizz_88 KarstenW „PPS: Es kann auch noch wichtig sein, das man das Kernelmodul Treibermodul mit...“
Optionen

also soll ich direkt den ganzen kernel neu kompilieren um das problem zu beheben ???

MfG bizz_88
PS: danke für die bisherigen antworten...

bei Antwort benachrichtigen
KarstenW bizz_88 „also soll ich direkt den ganzen kernel neu kompilieren um das problem zu beheben...“
Optionen

Nein, nur den kompletten Programmcode des kernels installieren . Dabei sind auch die richtigen Headerdateien des Betriebsystemkerns.

Man kann auch Systemheaderdateien installieren. Die werden aber nur zum Kompilieren von "normalen" Programmen benötigt.

Du willst einen Treiber kompilieren , Treiber laufen bei Linux im Kernelspace. Deshalb reicht es nicht mit "apt-get install kernel-headers-???" nur die Systemheaderdateien zu installieren.

Du mußt mit "apt-get install kernel-souce-???" den kompletten Programmcode des Kernels , inklusive der benötigten Kernel-Headerdateien installieren.

Ich benutze Debian. Normalerwiese müßte der Programmcode des Kernels mit "kernel-source-???" auch bei ubuntu bezeichnet werden.

Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
Onkel25Gandalf KarstenW „Nein, nur den kompletten Programmcode des kernels installieren . Dabei sind auch...“
Optionen

Also ich hatte mal die gleiche Fehlermeldung, als ich für mein Thinkpad ein paar Treiber in den Kernel integrieren wollte... Ein Installieren der Kernel-Header hat dafür ausgereicht. Die Kernel-Source heißt bei Ubuntu auch so. Ich nutze Ubuntu. Die habe ich aber nicht installiert, grad gecheckt. Aber es schadet ja auch nichts...

Gruß, Mario

bei Antwort benachrichtigen
KarstenW Onkel25Gandalf „Also ich hatte mal die gleiche Fehlermeldung, als ich für mein Thinkpad ein...“
Optionen

Na ich weiß auch nicht warum man auf der einen Seite die Kernel-Header Dateien (System-Kernelheaders ) installieren muß und auf der anderen Seite hat man den Programmcode des Kernels , inklusive der Kernel-Sourceheaders.

Soweit ich das verstanden habe , muß man mit "apt-get install kernel-header ???" die System-Kernelheaders installieren , um ganz normale Programme welche im userspace laufen, zu kompilieren.
Wenn man Treibermodule kompilieren will, dann muß mit "apt-get install kernel-source-???" den kompletten Programmcode des betriebsystemkernels installieren.
Beim Programmcode des Betriebsystemkernels sind die Kernel source headers mit dabei, welche gebraucht werden um Kernelmodule zu kompilieren.

Man kann alle beide Headers installieren. Schaden tut es nicht.

Headerdateien enthalten wichtige Deklarationen von Funktionen, globalen Variablen, Macros und Strukturen (ich hoffe ich habe nichts vergessen).
Die Headerdateien werden dann mit der Präprozessordirektive #include

Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
bizz_88 KarstenW „Na ich weiß auch nicht warum man auf der einen Seite die Kernel-Header Dateien...“
Optionen

Muss ich das "#include" manuell in den header eintragen oder geschieht das automatisch mit "apt-get *" ???

MfG bizz_88

bei Antwort benachrichtigen
Rheinlaender bizz_88 „Muss ich das include manuell in den header eintragen oder geschieht das...“
Optionen

An den headers musst Du nix machen, die müssen nur da sein, damit sie verwendet werden können. apt-get install... reicht also.

Nach dem Text, den Karsten da gepostet hat, sollten es in diesem Fall die source-headers sein:
Conversely, when compiling the kernel, or kernel modules, these headers must be used. This is important when compiling externally packaged modules - the module build should look in the right place for the headers (by e.g. adding -I/lib/modules/`uname -r`/build/include)

Mario hat aber recht, es schadet nichts, wenn Du beide installierst. Irgendwann willst Du vielleicht auch mal ein Programm nutzen, das Du selbst compilieren musst.

Gruß
Rheinlaender

[Diese Nachricht wurde nachträglich bearbeitet.]

bei Antwort benachrichtigen
KarstenW Rheinlaender „An den headers musst Du nix machen, die müssen nur da sein, damit sie verwendet...“
Optionen

@biz_88 ich wollt nur erklären wozu Headerdateien da sind. Bei großen Programmen wie dem Betriebsystemkern, wird die Deklaration in solche Headerdateien ausgelagert. Der Programmier inkludiert sie dann mit der Präprozessordirektive #include . Das spart bei Mehrfachverwendung der Deklaration Tipperei
Die Kernelsourceheaders sind Teil des Programmcodes vom Betriebsystemkern.

Im Programmcode dieses Treibermoduls sind wahrscheinlich auch solche #include - Anweisungen drinn , die diese Headerdateien in den Programmcode kopieren.

Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
bizz_88 KarstenW „@biz_88 ich wollt nur erklären wozu Headerdateien da sind. Bei großen...“
Optionen

hab alles so gemacht, wie ihr oben beschrieben habt, aber es hat sich ein neues problem ergeben...
nachdem ich make clean modules eingegeben habe, kommt folgende fehlermeldung:


root@ubuntu:/home/niklas/Desktop/Home/prism54-cvs-latest# make clean modules
make -C ksrc/ clean
make[1]: Gehe in Verzeichnis »/home/niklas/Desktop/Home/prism54-cvs-latest/ksrc«
rm -f *.o *.ko *~ core* .dep* .*.d .*.cmd *.mod.c *.a *.s .*.flags
rm -rf .tmp*
make[1]: Verlasse Verzeichnis »/home/niklas/Desktop/Home/prism54-cvs-latest/ksrc«
make -C ksrc/ modules
make[1]: Gehe in Verzeichnis »/home/niklas/Desktop/Home/prism54-cvs-latest/ksrc«
make -C /lib/modules/2.6.12-9-686/build SUBDIRS=/home/niklas/Desktop/Home/prism54-cvs-latest/ksrc modules
make[2]: Gehe in Verzeichnis »/usr/src/linux-headers-2.6.12-9-686«
CC [M] /home/niklas/Desktop/Home/prism54-cvs-latest/ksrc/islpci_eth.o
/home/niklas/Desktop/Home/prism54-cvs-latest/ksrc/islpci_eth.c: In function `islpci_eth_transmit':
/home/niklas/Desktop/Home/prism54-cvs-latest/ksrc/islpci_eth.c:93: Warnung: Variable »wds_mac« wird nicht verwendet
/home/niklas/Desktop/Home/prism54-cvs-latest/ksrc/islpci_eth.c: In function `islpci_eth_receive':
/home/niklas/Desktop/Home/prism54-cvs-latest/ksrc/islpci_eth.c:359: Warnung: Variable »src« wird nicht verwendet
CC [M] /home/niklas/Desktop/Home/prism54-cvs-latest/ksrc/islpci_mgt.o
/home/niklas/Desktop/Home/prism54-cvs-latest/ksrc/islpci_mgt.c: In function `islpci_mgt_receive':
/home/niklas/Desktop/Home/prism54-cvs-latest/ksrc/islpci_mgt.c:347: Warnung: implizite Deklaration der Funktion »pci_dma_sync_single«
CC [M] /home/niklas/Desktop/Home/prism54-cvs-latest/ksrc/isl_38xx.o
CC [M] /home/niklas/Desktop/Home/prism54-cvs-latest/ksrc/isl_ioctl.o
CC [M] /home/niklas/Desktop/Home/prism54-cvs-latest/ksrc/islpci_dev.o
CC [M] /home/niklas/Desktop/Home/prism54-cvs-latest/ksrc/islpci_hotplug.o
/home/niklas/Desktop/Home/prism54-cvs-latest/ksrc/islpci_hotplug.c: In function `prism54_suspend':
/home/niklas/Desktop/Home/prism54-cvs-latest/ksrc/islpci_hotplug.c:280: Fehler: zu viele Argumente für Funktion »pci_save_state«
/home/niklas/Desktop/Home/prism54-cvs-latest/ksrc/islpci_hotplug.c: In function `prism54_resume':
/home/niklas/Desktop/Home/prism54-cvs-latest/ksrc/islpci_hotplug.c:306: Fehler: zu viele Argumente für Funktion »pci_restore_state«
make[3]: *** [/home/niklas/Desktop/Home/prism54-cvs-latest/ksrc/islpci_hotplug.o] Fehler 1
make[2]: *** [_module_/home/niklas/Desktop/Home/prism54-cvs-latest/ksrc] Fehler 2
make[2]: Verlasse Verzeichnis »/usr/src/linux-headers-2.6.12-9-686«
make[1]: *** [modules] Fehler 2
make[1]: Verlasse Verzeichnis »/home/niklas/Desktop/Home/prism54-cvs-latest/ksrc«
make: *** [modules-all] Fehler 2


weiß nich was der mit zu viele argumente meint, vielleicht liegt es daran dass ich insgesammt 2 netzwerkfähige pci karten eingebaut habe...

bei Antwort benachrichtigen
KarstenW bizz_88 „hab alles so gemacht, wie ihr oben beschrieben habt, aber es hat sich ein neues...“
Optionen

Ich kenne diesen treiber nicht, aber normalerweise ist schon ein Treiber bei den neueren Betriebsystemkernl 2.6.12 dabei.
Ubuntu baut auf Debian testing auf. Deshalb müßten auch die neueren Betriebsystemkernel verfügbar sein. Bevor du einen fremden Treiber installierst und nicht weißt wie fehlerfrei der Programmcode ist, würde ich an deiner Stelle mal die Treiber nehmen die bei deiner Kernelversion schon dabei sind:

Kernel source 2.6.12:

──── Wireless LAN (non-hamradio)
│ Arrow keys navigate the menu.

Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
KarstenW Nachtrag zu: „Ich kenne diesen treiber nicht, aber normalerweise ist schon ein Treiber bei den...“
Optionen

PS:

"oot@ubuntu:/home/niklas/Desktop/Home/prism54-cvs-latest# make clean modules" Du mußt eventuell noch mal die Installationsanleitung durch lesen:

mit "make clean" werden die kompilierten Objectdateien (Endung *.o) gelöscht. Ich weiß nicht was der befehl " make clean modules" bewirken soll.

Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
KarstenW Nachtrag zu: „PS: oot@ubuntu:/home/niklas/Desktop/Home/prism54-cvs-latest make clean modules...“
Optionen

PPS: Ich kann mir vorstellen, da bei den neueren Betriebsystemkerneln der treiber Prism54 beim Programmcode des Betriebsystemkerns dabei ist und du nachträglich den Treiber noch installieren willst, gibt es eventuell Probleme,

Normalerweise ist beim Programmode eines 2.6.12 er Betriebsystemkern der Treiber Prism54 dabei. Er wird aber nicht im Standardkern dabei sein, weil er sich noch im experimentellen Stadium befindet.

Das einfachste wäre einen eigenen Kern mit der Version >= 2.6.12 zu kompilieren und den Treiber Prism54 zu aktivieren.

Für solche Speziallfälle kommt man nicht herum mal einen eigenen Kern zu kompilieren. Das ist alles dialogbasierend, also nicht so kompliziert und meistens ist immer eine Online-Hilfe dabei.

Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
bizz_88 KarstenW „PPS: Ich kann mir vorstellen, da bei den neueren Betriebsystemkerneln der...“
Optionen

ich kompiliere den kernel dann jetzt wahrscheinlich neu mit einem nicht experimentellem kernel. Habt ihr eventuell noch irgendwelche tipps was ich bei der kompilierung beachten muss ???

bei Antwort benachrichtigen
KarstenW bizz_88 „ich kompiliere den kernel dann jetzt wahrscheinlich neu mit einem nicht...“
Optionen

Den Standradkernel würde ich auf jeden Fall behalten. Den gcc , binutils, make und ncurses (ncurses-dev oder so) installieren.
Dann gehst du in das Unterverzeichnis /usr/src/kernel???? hineien und gibt als root den befehl "make menuconfig" ein.
Bei den einzelnen Optionen ist immer eine Onlinehilfe mit dabei.
Nach der Konfiguration den Befehl "make" eingeben.
Du kannst einen monolitischen Betriebsystemkern kompilieren. Du brauchst also nicht unbedingt Treiber als Module kompilieren.
Der Vorteil von Modulen ist eigentlich nur die Flexibilität des Betriebsystemkerns. Dann kann man Modulen Parameter übergeben, wenn die Hardwareerkennung nicht richtig funktioniert (IO-Adresse, IRQ-Kanal u.s.w). Das ist aber meist nur bei den älteren ISA-Karten notwendig gewesen.

Der fertig kompilierte Betriebsystemkern ist unter

/usr/src/kernel-source-2.6.???/arch/i386/boot/

zu finden und heißt bzImage.

Wenn du doch Module haben willst , dann mußt du dann noch die Module mit "make modules" kompilieren und mit "make modules_install" installieren.

Normalerweise ist es so , das man mindestens alle Treiber , die man braucht um auf die root-Partition (/) zuzugreifen, als monolitischen Treiber im Kern reinkompilieren soll. Alle anderen Treiber können als Kernelmodul oder Treibermodul kompiliert werden.


Wenn du den Betriebsystemkern nur für eine bestimmten Rechner kompilierst , dann kannst du auch einen monolitischen Betriebsystemkern kompilieren.
Es gibt auch abundzu Problemem mit dem automatischen Laden von Kernelmodulen. Dann ist es ohnehin besser die Treiber monolitischen in den Betriebsystemkern zu kompilieren.

Behalte für den Notfall noch den Standardkern und teste den selbstkompilierten Kern ausgiebig ;-).
Die Online-Hilfe ist eigentlich meistens sehr genau.



PS: Vergiss nicht Unix-Domain-Sockets für den Grafikmodus X-Window anzukreuzen. Der Grafikmodus X-Windows X11R6 ist netzwerktransparent. Laufen X-Client und Xserver auf dem gleichen Rechner , läuft die Verbindung der Beiden über Unix-Domain-Socket ab. Sind X-Client und X-Server auf zwei verschiedenen Rechner, wird die Verbindung über Netzwerk-sockets aufgebaut.

Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen