• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst]: Winmodem (AC-97) unter SuSE 10.2 auf Toshiba M30X

Problem: Treiber für internes Modem auf Toshiba M30X wird nicht automatisch gefunden und konfiguriert.
Auf vielen Notebooks werden die internen Modems als so genannte Winmodems realisiert, d.h. sie bestehen aus ein paar Drähten zwischen der RJ11-Telefonbuchse und dem Sound-Chip. Unter Linux sind diese Modems auch als Linmodems bekannt. Hierfür werden natürlich entsprechende Treiber benötigt, die über Software aus dem Sound-Chip ein Modem machen. Für den weit verbreiteten AC-97 gab es den proprietären Treiber „slamr“ von SmartLink. Dieser ist aber im Internet und auf den CD der SuSE-Distribution nicht mehr zu finden.

Nach langem Suchen und Testen habe ich folgende Lösung gefunden:

1.Von der non-OSS-CD wird das Paket „samrtlink-softmodem“ installiert, das im wesentlichen den Dämon slmodemd enthält – der Treiber „slamr“ ist dort auch nicht enthalten.

2.Mit „Yast“ – „Netzwerkgeräte“ – „Modem“ wird dann das Modem konfiguriert:
- Modemgeräte hinzufügen: Modemgerät = /dev/ttySL0 (obwohl dieses Device noch nicht existiert! Es wird dynamisch erzeugt.)
- Amtsholung – falls notwendig z.B. „0“ einfügen
- Tonwahl (ggf. andere Wählmethode)
- Lautsprecher ein – wird aber nicht funktionieren (bei mir kam kein Ton an, obwohl das Modem wählt)
- Wählton abwarten ein - an Nebenstellenanlage ggf. ausschalten
- weiter
-> Provider auswählen:
- Provider aus den Listen auswählen oder selber definieren, falls noch nicht vorhanden
- Provider-Name,Telefonnummer, Benutzer, Kennwort eingeben
- weiter
-> Verbindungsparameter nach Bedarf eingeben/ändern. „DNS-Parameter „ sollten aktiv sein!
- weiter
-Beenden

3.Jetzt den ALSA-Treiber für das Modem starten: modprobe snd_intel8x0m

4.Nun den Dämon starten: /usr/sbin/slmodemd -a -c GERMANY hw:1
Es sollte eine Ausgabe ähnlich dieser erfolgen:
Code:
SmartLink Soft Modem: version 2.9.10 Nov 29 2006 13:53:16
symbolic link `/dev/ttySL0' -> `/dev/pts/3' created.
modem `hw:1' created. TTY is `/dev/pts/3'
Use `/dev/ttySL0' as modem device, Ctrl+C for termination
D.h. das Gerät /dev/ttySL0 ist jetzt erzeugt worden und steht zur Verfügung.

5.Zum allgemeinen Zugriff kann noch der symbolische Link mit Namen „modem“ erzeugt werden: ln -s /dev/ttySL0 /dev/modem

6.Mit Kinternet wird das Modem ausprobiert: Einstellungen, Schnittstelle, Provider ggf. noch einmal auswählen, Protokollansicht starten und dann „Einwählen“ drücken. Im Protokollfenster sollte dann etwa folgendes erscheinen:
Code:
SuSE Meta pppd (smpppd-ifcfg), Version 1.59 on toshi.vd.ac.de
Status is: disconnected
trying to connect to smpppd
connect to smpppd
Status is: disconnected
Status is: connecting
pppd[0]: Plugin passwordfd.so loaded.
pppd[0]: --> WvDial: Internet dialer version 1.54.0
pppd[0]: --> Initializing modem.
pppd[0]: --> Sending: ATM1
pppd[0]: ATM1
pppd[0]: OK
pppd[0]: --> Modem initialized.
pppd[0]: --> Sending: ATDT01914
pppd[0]: --> Waiting for carrier.
pppd[0]: ATDT01914
pppd[0]: CONNECT 44000
pppd[0]: --> Carrier detected.  Chatmode finished.
pppd[0]: Serial connection established.
pppd[0]: Renamed interface ppp0 to modem0
pppd[0]: Using interface modem0
Status is: connecting
pppd[0]: Connect: modem0 <--> /dev/ttySL0
pppd[0]: CHAP authentication succeeded
pppd[0]: CHAP authentication succeeded
pppd[0]: local  IP address 172.158.33.19
pppd[0]: remote IP address 195.71.183.101
pppd[0]: primary   DNS address 205.188.146.145
pppd[0]: Script /etc/ppp/ip-up finished (pid 6460), status = 0x0
Status is: connected
Dann hat es geklappt – die Verbindung steht. Hier noch ein paar Ausgaben zur Kontrolle (immer gut, wenn man weiß, wie es richtig aussehen soll):
Code:
toshi:~ # route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
195.71.183.101  0.0.0.0         255.255.255.255 UH    0      0        0 modem0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 modem0
Code:
toshi:~ # ifconfig
....
modem0    Link encap:Point-to-Point Protocol
          inet addr:172.158.33.19  P-t-P:195.71.183.101  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1454  Metric:1
          RX packets:18 errors:1 dropped:0 overruns:0 frame:0
          TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:7519 (7.3 Kb)  TX bytes:85 (85.0 b)ess:0xc000 Memory:d0200000-d0200fff
Code:
toshi:~ # hwinfo --modem
23: PCI 1f.6: 10204 LinModem
  [Created at pci.286]
  UDI: /org/freedesktop/Hal/devices/pci_8086_24c6
  Unique ID: ORVU.vTyfsaTKL4D
  SysFS ID: /devices/pci0000:00/0000:00:1f.6
  SysFS BusID: 0000:00:1f.6
  Hardware Class: modem
  Model: "Toshiba America Info 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller"
  Vendor: pci 0x8086 "Intel Corporation"
  Device: pci 0x24c6 "82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller"
  SubVendor: pci 0x1179 "Toshiba America Info Systems"
  SubDevice: pci 0x0001
  Revision: 0x03
  Driver: "Intel ICH Modem"
  Driver Modules: "snd_intel8x0m"
  Device File: /dev/ttySL0
  Device Number: char 212:0
  I/O Ports: 0x2400-0x24ff (rw)
  I/O Ports: 0x2000-0x207f (rw)
  IRQ: 177 (254582 events)
  Module Alias: "pci:v00008086d000024C6sv00001179sd00000001bc07sc03i00"
  Driver Info #0:
    Driver Status: slamr is not active
    Driver Activation Cmd: "modprobe slamr"
  Driver Info #1:
    Driver Status: snd_intel8x0m is active
    Driver Activation Cmd: "modprobe snd_intel8x0m"
  Config Status: cfg=no, avail=yes, need=no, active=unknown

7.Jetzt muss das Ganze für den Systemstart automatisiert werden. Zunächst ist die Konfigurationsdatei /etc/sysconfig/slmodemd.conf für slmodemd anzupassen:
Code:
## Path:	Hardware/Modem
## Description:	Smartlink softmodem settings
## Type:	string
## Default:	"USA"
## ServiceRestart: slmodemd
#
# Country, for which the modem shall be configured for.
#
# A list of all supported country names can be retrieved
# by calling "slmodemd --countrylist" from the shell prompt.
#
SLMODEMD_COUNTRY="GERMANY"

## Type:	string
## Default:	"modem:1"
## ServiceRestart: slmodemd
#
# Hardware(not modem) device for the slmodemd.
#
# slmodemd accesses hardware devices which are provided
# by the slamr and the slusb kernel modules. This congiuration
# setting determines which hardware device slmodemd should use.
#
# Use "modem:x" or "hw:x,y" in ALSA mode, x=card number, y=pcm number
# Use "slamr0" for SmartLink-compatible AC'97 Riser modem codecs
# Use "slusb0" for the SmartUSB56 from SmartLink(extermal USB modem)
#
# Note: After starting slmodemd, he will create a PTY (pseudo-termnal)
# and create a symlink called /dev/ttySL0 which points to this PTY.
# /dev/ttySL0 is the device used by applications.
#
SLMODEMD_DEVICE="hw:1"

## Type:	yesno
## Default:	"no"
## ServiceRestart: slmodemd
#
# If set to yes the Advanced Linux Sound Architecture subsystem is used
# to make your modem working. This variable must be set to yes if you
# are using an ATI IXP modem.
#
SLMODEM_USE_ALSA="yes"

8.slmodemd soll beim Booten gestartet werden: insserv slmodemd sorgt dafür. (Das geht auch mit dem Runlevel-Editor von Yast.)

9.Und der Treiber soll beim Systemstart eingebunden werden. Hierzu wird die Datei /etc/sysconfig/kernel erweitert:
Code:
## Path:	System/Kernel
## Description:
## Type:	string
## Command:       /sbin/mkinitrd
# ......
## Path:		 System/Kernel
## Description:	 Modules to load after initial boot
## Type:		 string
## ServiceRestart:boot.loadmodules
#
# This variable contains the list of modules to be loaded
# once the main filesystem is active
MODULES_LOADED_ON_BOOT="snd_intel8x0m"
# ....

Das sollte es dann gewesen sein. Beim nächsten Boot steht das Modem bereit und kann über Kinternet eine Verbindung ins Internet aufbauen.
 

pipo

Member
verstehe ich das richtig ? ttySL0 wird durch /usr/sbin/lmodemd ... erzeugt.

Was tun, wenn dies nicht klappt ? klingt hier nach einem alsa setup Problem. Weiß jemand was hier faul ist ?

1000 Dank im Voraus.


plurion:/home/peer # /usr/sbin/slmodemd -a -c GERMANY hw:1
error: mixer setup: attach hw:1 error: No such device
ALSA lib pcm_hw.c:1357:(_snd_pcm_hw_open) Invalid value for card
error: alsa setup: cannot open playback device 'hw:1': No such device
error: cannot setup device `hw:1'



plurion:/home/peer # lsmod |grep snd
snd_pcm_oss 53376 0
snd_mixer_oss 21248 1 snd_pcm_oss
snd_seq 60272 0
snd_seq_device 12812 1 snd_seq
snd_intel8x0 36764 1
snd_ac97_codec 95648 1 snd_intel8x0
snd_ac97_bus 6400 1 snd_ac97_codec
snd_pcm 86916 3 snd_pcm_oss,snd_intel8x0,snd_ac97_codec
snd_timer 27908 2 snd_seq,snd_pcm
snd 61188 10 snd_pcm_oss,snd_mixer_oss,snd_seq,snd_seq_device,snd_intel8x0,snd_ac97_codec,snd_pcm,snd_timer
soundcore 13792 1 snd
snd_page_alloc 14472 2 snd_intel8x0,snd_pcm



plurion:/home/peer/smartlink # hwinfo --modem
30: PCI 109.0: 10204 LinModem
[Created at pci.286]
UDI: /org/freedesktop/Hal/devices/pci_163c_3052
Unique ID: CCKF.1A5vf0liRfA
Parent ID: RE4e.f9Q95vpHUcA
SysFS ID: /devices/pci0000:00/0000:00:08.0/0000:01:09.0
SysFS BusID: 0000:01:09.0
Hardware Class: modem
Model: "CastleNet SmartLink SmartPCI562 56K Modem"
Vendor: pci 0x163c "Smart Link Ltd."
Device: pci 0x3052 "SmartLink SmartPCI562 56K Modem"
SubVendor: pci 0x1688 "CastleNet Technology Inc."
SubDevice: pci 0x0811
Revision: 0x03
Driver: "serial"
Device File: /dev/ttySL0
Device Number: char 212:0
Memory Range: 0xe2011000-0xe2011fff (rw,non-prefetchable)
I/O Ports: 0xd400-0xd4ff (rw)
IRQ: 177 (no events)
Module Alias: "pci:v0000163Cd00003052sv00001688sd00000811bc07sc03i00"
Driver Info #0:
Driver Status: slamr is not active
Driver Activation Cmd: "modprobe slamr"
Config Status: cfg=no, avail=yes, need=no, active=unknown
Attached to: #25 (PCI bridge)


plurion:/home/peer/smartlink # cat /proc/asound/card0/codec97#0/ac97#0-0
0-0/0: Realtek ALC650F

PCI Subsys Vendor: 0x1043
PCI Subsys Device: 0x8095

Capabilities :
DAC resolution : 20-bit
ADC resolution : 18-bit
3D enhancement : Realtek 3D Stereo Enhancement

Current setup
Mic gain : +0dB [+0dB]
POP path : pre 3D
Sim. stereo : off
3D enhancement : off
Loudness : off
Mono output : MIX
Mic select : Mic1
ADC/DAC loopback : off
Double rate slots: 10/11
Extended ID : codec=0 rev=1 LDAC SDAC CDAC DSA=0 SPDIF DRA VRA
Extended status : SPCV LDAC SDAC CDAC SPDIF=3/4 VRA
PCM front DAC : 48000Hz
PCM Surr DAC : 48000Hz
PCM LFE DAC : 48000Hz
PCM ADC : 48000Hz
SPDIF Control : Consumer PCM Category=0x2 Generation=1 Rate=48kHz
SPDIF In Status : Not Locked
 
OP
S

switcher51

Member
verstehe ich das richtig ? ttySL0 wird durch /usr/sbin/lmodemd ... erzeugt.
Nein, das Device ttySL0 wird durch das Starten des Treibers erzeugt.
(modprobe <Treiber-xyz>)
Das Problem liegt darin, den zum Chipsatz des Rechners passenden Treiber zu finden!
Dein Problem liegt genau hier:
Code:
hwinfo
.....
Driver Info #0:
Driver Status: slamr is not active
Driver Activation Cmd: "modprobe slamr"

Den Treiber slamr zu finden dürfte schwierig werden - mir ist es nicht gelungen. Ggf. gibt es wie in meinen Fall aber Ersatz.
Da hilft nur Googeln....
 

windiana

Newbie
Genialer Beitrag!
In meinem Fall gab es allerdings noch einen Fallstrick ueber den ich hier gerne berichten moechte.
Ich habe folgendes modem: ("hwinfo --modem")
Model: "Hewlett-Packard Company nx6110/nc6120"
Vendor: pci 0x8086 "Intel Corporation"
Device: pci 0x266d "82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Modem Controller"

Der Befehl "/usr/sbin/slmodemd -a -c GERMANY hw:0" hat funktioniert aber schon eine Fehlermeldung gebracht:
error: mixer setup: Off-hook switch not found for card hw:0
symbolic link `/dev/ttySL0' -> `/dev/pts/7' created.
modem `hw:0' created. TTY is `/dev/pts/7'
Use `/dev/ttySL0' as modem device, Ctrl+C for termination.

Beim Verbindungsaufbau kam dann folgende Meldung:
error: cannot set channels for playback: Invalid argument

Geholfen hat mir folgender Weblink:
http://linmodems.technion.ac.il/bigarch/archive-sixth/msg04668.html

Dieser beschreibt die Ansteuerung des Modems nicht ueber ALSA sondern ueber "ungreb-winmodem, slamr" aber auch mit slmodemd.
In OpenSuSE 10.2 ist schon das Paket smartlink-softmodem-2.9.10-75 enthalten. Ausserdem sollte man die Kernelquellen installiert haben (kernel-source-2.6.18.2-xxx.rpm).
Zusaetlich benoetigt man:
slmodem-2.9.11-20070813.tar.gz und ungrab-winmodem-20070505.tar.gz
von: http://phep2.technion.ac.il/linmodems/packages/smartlink/
Compilieren verlief bei mir absolut problemlos. Jeweils "make" und "make install" als root im entpackten Verzeichnis aufrufen und als Ergebnis liegen die Module im Kernel Verzeichnis.

Als Unterschied zur obigen ALSA Installationsbeschreibung muessen nun zwei Module als root geladen werden:
modprobe ungrab-winmodem
modprobe slamr

Und dann ein etwas anderer lsmodemd Befehl ausgefuehrt werden:
/usr/sbin/slmodemd -c GERMANY /dev/slamr0

Nun hat bei mir der Test mit kinternet funktioniert. Allerdings erklingen keine Waehlgeraeusche und die Anwahl kann recht lange dauern => Protokollfenster beobachten.

Martin
 
Oben