JAK: Dostęp do Internetu przez modem

Wdzwanianie przez modem analogowy

Oryginalnie zaprojektowałem Puppy do dostępu do Internetu przez klasyczny modem wdzwaniający się do ISP (Dostawcy Usług Internetowych), przez Public Switched Telephone Network (PSTN). Modem jest zwany analogowym modemem, jako że wysyła i odbiera dane poprzez tony częstotliwości słyszalnej -- które można słyszeć jak modem wdzwania się do ISP.

Przeniosłem się na różne rodzaje dostępu cyfrowego szerokopasmowego, jednak wiele osób, w niektórych częściach świata, wciąż używa analogowego wdzwaniania. Dlatego, ta sekcja jest wciąż bardzo istotna!

Tradycyjnie, Linuks tylko rzeczywiście działał z tym co nazywamy "sprzętowymi" modemami szeregowymi -- gdzie wiele modemów było tym co nazywamy "programowymi" modemami, tylko sprzedawanymi ze sterownikami dla Microsoft Windows. Jeśli twój PC ma wewnętrzny modem, lub zewnętrzny modem podłączony przez kabel USB, to jest najczęściej modem programowy.
Proszę zauważyć że opisuję analogowe modemy tutaj, do wdzwaniania do ISP (Dostawcy Usług Internetowych) -- one są inne niż 3G, ADSL i modemy kablowe używane do dostępu cyfrowego szerokopasmowego do Internetu.
  • Zewnętrzny modem szeregowy. Jeśli masz zewnętrzny modem szeregowy, łatwo rozpoznawalny przez charakterystyczny kabel -- dość duży płaski prostokątny kształt, z 9 lub 25 pinami. To jest sprzętowy modem, i będzie zdecydowanie działał w Puppy.
  • Wewnętrzna karta PCI modem. 'PCI' odnosi się do gniazd na płycie głównej, do których wewnętrzny modem może być włożony. Aż do około 2002, prawdziwie sprzętowe modemy PCI były produkowane, od tego czasu wszystkie były modemami programowymi -- zatem to jest najczęściej to co masz.
  • Modem wbudowany w płytę główną. Technicznie, one są wciąż modemami PCI, jako że termin "PCI" aktualnie odnosi się do szyny głównego interfejsu na płycie głównej, do której wszystkie urządzenia wejścia/wyjścia są połączone. To są wszystko modemy programowe.
  • Zewnętrzny modem USB. Obecnie USB jest używane dla prawie wszystkich zewnętrznych urządzeń -- mysz, klawiatura, modem, drukarka, skaner. Są prawdziwie sprzętowe modemy USB, ale najczęściej to jest modem programowy.
  • Modem PCMCIA. Też znany jako cardbus. To jest gniazdo w laptopach. Może być programowe lub sprzętowe, nowoczesne są zwykle programowe.
Co to jest modem programowy? W zasadzie, to jest tańszy modem który robi mniej przetwarzania w sobie i czyni CPU robiącym niektóre działania procesowe. To znaczy że umieszcza proces w CPU, którego nie zauważysz w nowoczesnych szybkich CPU, ale to jest czynnik dla starego PC. Też moim osobistym doświadczeniem jest że modemy sprzętowe mają tendencję większej szybkości transferu nawet z nowoczesnymi PC.
Rzeczywistym minusem modemu sprzętowego jednak, jest to że powoduje CPU robiącym niektóre działania procesowe, wymaga specjalnego sterownika dla tego szczególnego modemu, i większość producentów ma tylko napisane sterowniki dla Windows. Jednak, niektórzy producenci stają się bardziej "świadomymi Linuksa" i też niektórzy entuzjaści Linuksa rozwinęli sterowniki.

Bądź ostrzeżony, jeśli masz modem programowy, on może nie działać w Puppy. Entuzjasta Puppy 'ezeze5000' (nazwa na forum) przesłał mi pół tuzina starych kart modemów programowych PCI do testowania. To było w 2008, i w tym czasie ja tylko miałem jeden z nich działający w Puppy. Od tamtego czasu, współczynnik powodzenia polepszył się, i w 2010 miałem połowę z nich działającą.

Zauważ, jeśli modem programowy nie działa w Linuksie, jest żargonowa nazwa używana dla tego -- on jest zwany "linmodem".

Jak wdzwaniać się

Krótko mówiąc, Puppy automatycznie wykryje modem analogowy, i jeśli on jest obsługiwanego typu to wszystko będzie automatycznie ustawione i będzie gotowe do połączenia. Dla modemów szeregowych to jest bezpośrednio, jednak Puppy teraz obsługuje wiele modemów programowych. Jeśli on jest obsługiwany, najczęściej będzie automatycznie wykryty.

Zauważ: automatyczne wykrycie i automatyczne ustawienie niektórych modemów to praca w toku, i jest trwająca dyskusja na ten temat na forum Puppy.

By wdzwonić się, wszystko co musisz zrobić to kliknąć ikonę 'połącz' na pulpicie. To wywoła "Kreator Połączenia Internetowego" w którym zobaczysz przycisk oznaczony "Internet przez zwykły analogowy lub bezprzewodowy modem" -- po prostu kliknij go i po sprawie -- program który rozwinąłem zwany PupDial uruchomi się, i powie czy modem jest wykryty.

Zauważ, w Kreatorze Połączenia Internetowego zobaczysz przyciski radiowe na dole. One  umożliwiają konfigurację pulpitu ikony 'połącz' by bezpośrednio wystartować PupDial, nie Kreator -- jedno kliknięcie mniej by być online!

Jednak jedna sprawa, chociaż Puppy może automatycznie wykryć wiele modemów i automatycznie ustawić rzeczy by ten modem był gotowy, w niektórych przypadkach można mieć do zrobienia nieco dodatkowego podrasowania. Na przykład, Puppy wykryje modem, ale on nie chce wdzwaniać się -- robisz małe poszukiwania i znajdujesz że "ciąg inicjujący" modemu musi być zmieniony, potem działa. W ogóle, jeśli podrasujesz modem programowy i zadziała, proszę proszę daj mi znać o tym i ja będę mógł wbudować to podrasowanie do następnego wydania Puppy.
Przykład: niektóre modemy programowe wymagają by "sprawdzenie połączenia" w PupDial było wyłączone.

Dalsze użyteczne informacje

Jeśli musisz rozwiązać problem zwykłego modem dialup, zalecam zajrzeć na Forum Puppy. Tam jest specjalna sekcja o zwykłych modemach dialup, z dużym wsparciem i rozwiązaniami.
Główny człowiek który może pomóc to członek forum 'rerwin', który obecnie pracuje by modemy były automatycznie wykrywane i automatycznie ustawione. Rerwin aktualizuje też PupDial.

Jeśli z jakiegoś powodu PupDial nie działa, Puppy ma dwa inne programy do wdzwaniania modemem, zwane Gkdial i Xeznet, to są pakiety PET które można zainstalować (zobacz ikonę 'instaluj' na pulpicie) -- ostrzegam że pierwsza to aplikacja GTK1, druga to aplikacja Tcl/Tk i w przypadku Puppy 4.x i późniejszego to są zależności które też muszą być zainstalowane (chociaż 4.20 i 4.21 miały Tcl/Tk, 4.3 i późniejsze nie mają) -- zatem pozostań z PupDial jeśli to możliwe. Uwaga o Xeznet: gdy dodawane konto, pole "tty" i pole "szybkość" nie muszą mieć niczego wprowadzonego do nich niż domyślne /dev/modem i 115200bps.

Jeśli chcesz eksperymentować z wysyłaniem komend Hayes do modemu, Puppy ma mały schludny program lini komend zwany modem-stats. Otwórz okno terminala i uruchom go jak to:

# modem-stats -c "ATZ" /dev/ttyS0
To ma lokalny plik pomocy. Puppy ma też inne malutkie narzędzie linii komend komunikacji port-szeregowy zwane picocom. Pomoc online dla picocom: http://linux.die.net/man/8/picocom.

Jest inna aplikacja, zwana Cutecom, program GUI terminala portu szeregowego, który znajdziesz w menu Narzędzia (zauważ, najświeższe wydania Puppy nie mają tego programu wbudowanego -- jest pakiet PET: zobacz menu Ustawienia --> Puppy Manager Pakietów, lub kliknij ikonę 'instaluj' na pulpicie -- on wymaga pakietu biblioteki Qt, która będzie automatycznie zainstalowana). Jest bardzo łatwy do użycia: dla mojego modemu musiałem zaznaczyć pole wyboru "Wymiana potwierdzeń: programowa" i wybrać "koniec linii CR,LF" z pola listy blisko dołu okna. Po otwarciu portu szeregowego dla komend Hayes które wpiszesz pole "Wejście:", odpowiedź modemu pojawi się w najwyższym polu tekstowym. Na przykład, wpiszesz "AT" następnie klawisz ENTER, i modem powinien odpowiedzieć "OK".

Ta strona ma więcej informacji o modemach programowych: linmodems.technion.ac.il/resources.html

Tutaj są URLe z listami ciągów modemu dla poszczególnych modemów:

www.56k.com/inits

www.west.net/~jay/modem

'Dialup' przez modem bezprzewodowy

Modemy bezprzewodowe często odnoszą się do modemów 3G lub modemów HSDPA. Krótko mówiąc, one dają dostęp do Internetu bez potrzeby przewodu. One też wymagają "wdzwonienia" operacji podobnej do analogowych modemów, zatem w Puppy można użyć to samo narzędzie GUI PupDial dla obu.

Jednak, jest wiele różnic technologicznych użytych dla tych modemów, innych niż 3G lub HSDPA, takich jak GPRS, główna różnica z punktu widzenia użytkownika to szybkość transferu danych. W zasadzie, w porządku zwiększania szybkości GPRS, 3G, HSDPA.

Ja tylko zacząłem pisać tą sekcję (w Grudniu 2010), bazując na moim doświadczeniu z trzema różnymi modemami 3G. Prezentuję nieco uwag o nich które mogą być użyteczne. Żyję w Australii, zatem te uwagi będą szczególnie użyteczne dla innych Australijczyków.

Vodafone
Numer dostępowy: *99#
APN: vfprepaymbb
Optus Huwaei E160-E
Numer dostępowy: *99#
APN: preconnect
Telstra
Numer dostępowy: *99#
APN:

W PupDial, wypełnij pola 'Numer dostępowy' i 'APN'. Pola 'Nazwa użytkownika' i 'Hasło' nie mają znaczenia, zatem pozostaw je jak są -- nie ustawiaj ich na puste jak objekty wykonywalne wvdial. Zazwyczaj, wszystko inne może być pozostawione jak jest, i po prostu kliknij przycisk 'Połącz'.

Gdy PupDial startuje i nowy/zmieniony modem jest wykryty, PupDial testuje czy ten modem odpowiada i próbuje określić odpowiedni "ciąg inicjujący" -- to są komendy które są wysyłane do modemu, znane jako Komendy Hayes. One są też używane dla modemów analogowych, ale z rozszerzeniami. Ta strona wikipedii jest dobrym wprowadzeniem, i też nakreśla rozszerzenia modemu 3G/GSM:

http://en.wikipedia.org/wiki/Hayes_command_set

Może być że PupDial nie dostaje dobrego ciągu inicjującego dla modemu. W tym przypadku, jeśli jesteś zdolny znaleźć alternatywny ciąg który działa, daj mi znać.

Tutaj są różne informacje które użytkownicy mi wysłali, lub które znalazłem:
Huawei E1550 3G USB modem
Członkowie Puppy Forum 'zygo' i 'pakt' zaraportowali że domyślny ciąg nie działa (1 2), ale ten tak:
AT &FE0 V1 X1 &D2 &C1 S0=0 
Uaktualnienie: Wydaje się że jest problem z ponownym włożeniem tego modemu. Po prostu włóż go raz, i domyślny ciąg wygenerowany przez PupDial powinien działać. Było też zauważone że najlepiej włożyć modem po rozruchu.
Huawei E160-E 3G USB modem
Ten modem jest interesujący gdyż nie wymaga modeswitch. Jest ciągle w obu trybach przechowywania i modemu. Tak więc, gdy włożysz go zobaczysz ikonę dysku optycznego która pojawi się na pulpicie, ale równocześnie działa jako modem (w porcie /dev/ttyUSB0).
Chciałbym informacji na temat innych modemów działających w ten sposób, by zrobić pozycję dla nich w /etc/udev/rules.d/52-usb_modem_puppy.rules, by wyskoczyło okno wykrycia gdy włoży się modem.

Dalsze wskazówki/porady

  • Możesz mieć najlepszy/zgodny rezultat jeśli włożysz modem po rozruchu. W teorii, jeśli modem jest już włożony przy rozruchu on powinien wciąż działać, ale niektórzy raportują niezgodne zachowanie w tej sytuacji.
  • Niektóre modemy 3G nie muszą być przełączane w trybie. Może być że były przełączone raz i potem pozostają ciągle przełączone. Możesz mieć tę sytuację kiedy ikona dysku optycznego pojawi się na pulpicie kiedy włożysz modem, ale on wciąż działa jako modem -- znaczy że jest równocześnie w obu trybach.
  • Ustaw w Windows najpierw. Nienawidzę zalecać tego, ale jeśli masz dostęp do systemu Windows, włóż nowy modem i połącz się do sieci w Windows. Tak można uniknąć niektórych kłopotów ustawienia. Po tym można użyć modemu w Linuksie. Chciałbym doświadczenia bez użycia Windows w ogóle, szczególnie opowiadania o sukcesach!


Techniczne informacje

Nieco uwag dla tych co chcą zrozumieć jak Puppy robi rzeczy "pod maską". Użytkownicy nie muszą tego wiedzieć.

Są dwa typy modemów, z punktu widzenia wykrycia w Puppy: wewnętrzny (stały) lub zewnętrzny (podłączany, lub wymienny). Wewnętrzne modemy są wykryte gdy Puppy startuje, wymienne mogą być wykryte przy rozruchu ale też jeśli modem jest włożony po rozruchu.

Przy rozruchu, skrypt /etc/rc.d/rc.sysinit powoduje że poprawne sterowniki (moduły) są załadowane dla wykrycia sprzętu. Jeśli spojrzysz do rc.sysinit, zobaczysz ważną linię kodu:
   echo add > ${ONEPATH}/uevent #generates an 'add' uevent.
To mówi kernelowi by wygenerował to co jest zwane 'uevent' dla wykrytej pozycji sprzętu. Jest program demona, 'udevd' który czyta te uevents i zgodnie z zasadami w /etc/udev/rules.d i /lib/udev/rules.d, powoduje załadowanie/instalację właściwego sterownika, firmware (itp.).

Najważniejszy plik zasad udev to /etc/udev/rules.d/50-udev-puppy-basic.rules, który ma te dwie linie w nim:
# kernel firmware loader
SUBSYSTEM=="firmware", ACTION=="add", RUN+="/sbin/pup_event_backend_firmware"
# Module autoloading
ACTION=="add", SUBSYSTEM=="?*", ENV{MODALIAS}=="?*", RUN+="/sbin/pup_event_backend_modprobe"
Dwa skrypty 'pup_event_backend_firmware' i 'pup_event_backend_modprobe' zadbają o załadowanie sterownika i firmware. Firmware to pliki danych potrzebne dla niektórych sterowników, i one są przechowywane w /lib/firmware.

Całe wykrycie sprzętu Puppy i załadowanie modułu jest opracowane specjalnie dla Puppy i jest różne od wszystkich innych dystrybucji Linuksa. Także firmware (plus inne pliki danych lub wykonywalne) wymagane przez sterownik, mogą nie być początkowo w /lib/firmware, ale w 'firmware tarball' przechowywanym w /lib/modules/all-firmware -- pup_event_backend_modprobe zadba o rozszerzenie odpowiednich firmware tarballs.

Ważnym punktem uwagi jest że modemy bezprzewodowe są często hybrydowe, lub podwójnej osobowości urządzeniami. Moje modemy 3G USB mają podwójną osobowość -- mogą zachowywać się albo jako urządzenie przechowywania albo jako modem. W większości przypadków, gdy włożono pierwszy raz, one są w trybie przechowywania i nie działają jako modem. Muszą być przełączone w tryb modemu, i mamy program zwany 'usb-modeswitch' by to zrobić...

usb-modeswitch

Są specjalne zasady udev które wyzwolą aplikację usb-modeswitch, /lib/udev/rules.d/40-usb_modeswitch.rules i /etc/udev/rules.d/41-usb_modeswitch-puppy.rules.

Gdy podłączasz USB modem, usb-modeswitch powinno być wyzwolone, i modem przełączy się w tryb modemu.

Sekwencją jest że zasada udev dla poszczególnego sprzętu USB powoduje uruchomienie /lib/udev/usb_modeswitch, co z kolei wystartuje oba /usr/sbin/usb_modeswitch_dispatcher i /usr/sbin/usb_modeswitch_status.
Pierwszy wykona aktualne przełączenie w tryb modemu i jeśli wymagany załaduje sterownik potrzebny dla tego modemu. Drugi jest napisany specjalnie dla Puppy i umieści komunikaty stanu na ekranie.

W niektórych przypadkach usb-modeswitch nie zostanie wykonane, tak gdy modem jest już włożony przy rozruchu. W tym przypadku, gdy PupDial jest uruchomiony, on też uruchomi /usr/sbin/pupdial_init_hotpluggable, co wykryje poprawny podłączony modem i uruchomi ponownie uevents kernela jeśli potrzeba (co wykona usb-modeswitch).


(c) Prawa autorskie Barry Kauler Grudzień 2010