หลายๆ คนที่ใช้โน้ตบุ๊ก หรือเดสก์ทอปที่มีซอฟต์โมเด็ม (AMR/CNR/MDC/ACR) คงเจอปัญหาโมเด็มใช้งานบนลินุกซ์ไม่ได้ แต่วันนี้มีข่าวดีสำหรับซอฟต์โมเด็มบน Southbridge ตระกูล ICH3 ICH4 และชิปเซ็ตอื่นๆ ครับ .. บริษัท SmartLink เขาทำไดรเวอร์บนลินุกซ์ให้แล้ว :D .. ไดรเวอร์ตัวปัจจุบัน (2004-02-05) คือเวอร์ชัน 2.9.6 จากเอกสารที่มากับไดรเวอร์ระบุว่าใช้ได้กับชิปเซตต่อไปนี้ครับ
HAMR5600 based AMR/CNR/MDC/ACR modem cards on the following Southbridge chips: - Intel ICH0,ICH2, ICH3, ICH4 - Via 686A, 686B, 8231, 8233 - SiS 630 - ALI 1535. SmartPCI56/561/562/563 based PCI modem cards. SmartUSB56 based USB modem.
ของใครไม่ตรงกับที่ระบุก็เสียใจด้วยเน้อะ :P
ส่วนโมเด็มบนเครื่อง Peorth ของผมเป็น ICH3 วินโดว์สบอกว่าเป็น Lucent AMR Softmodem ส่วนลินุกซ์ (lspci -v) บอกว่า
00:1f.6 Modem: Intel Corp. 82801CA/CAM AC'97 Modem Controller (rev 01) (prog-if 00 [Generic]) Subsystem: Acer Incorporated [ALI]: Unknown device 1022 Flags: medium devsel, IRQ 10 I/O ports at a000 [size=256] I/O ports at a400 [size=128]
ใช้ไดรเวอร์ slmodem ตัวนี้ได้แน่นอน :D
ติดตั้ง..
ตัดฉากมาที่การติดตั้งกันเลยดีกว่า.. วิธีติดตั้งก็เหมือนการคอมไพล์โปรแกรมทั่วไป แต่เพราะมันเป็นไดรเวอร์บนลินุกซ์ซึ่งจะคอมไพล์ออกมาเป็นเคอร์เนลโมดูล ดังนั้นสิ่งที่จำเป็นอีกอย่างก็คือซอร์สของเคอร์เนลครับ อ่อ ที่เจ๋งอีกอย่างคือ slmodem 2.9 นี่ใช้กับเคอร์เนล 2.6 ได้ด้วย:)
ก่อนอื่นก็ดาวน์โหลดซอร์สของไดรเวอร์มาก่อนที่ ftp://ftp.smlink.com/linux/unsupported/slmodem-2.9.6.tar.gz
อย่าได้แปลกใจ ที่มันอยู่ใน unsupported ก็เพราะไดรเวอร์นี้ยังเป็น beta อยู่ครับ แต่ไม่ต้องกังวลเพราะเท่าที่ลองก็ใช้งานได้ดี ได้มาแล้วก็
$ tar xvzf slmodem-2.9.6.tar.gz $ make $ su - # make install
เท่าเนี้ยะ เป็นอันเสร็จการติดตั้ง ตัวติดตั้งจะติดตั้งโปรแกรม เคอร์เนลโมดูล และ mknod ใน /dev เตรียมไว้ให้
เริ่มใช้งาน
สำหรับ AMR ก็เริ่มต้นที่เคอร์เนลโมดูลก่อน
# modprobe slamr
โพรบแล้วลองเช็ค /var/log/messages ควรจะเห็นอะไรประมาณนี้ครับ
Feb 12 20:25:23 peorth kernel: slamr: module license 'Smart Link Ltd.' taints kernel. Feb 12 20:25:23 peorth kernel: slamr: SmartLink AMRMO modem. Feb 12 20:25:23 peorth kernel: slamr: probe 8086:2486 ICH card... Feb 12 20:25:23 peorth kernel: PCI: Found IRQ 10 for device 0000:00:1f.6 Feb 12 20:25:23 peorth kernel: PCI: Sharing IRQ 10 with 0000:00:1f.3 Feb 12 20:25:23 peorth kernel: PCI: Sharing IRQ 10 with 0000:00:1f.5 Feb 12 20:25:23 peorth kernel: slamr: mc97 codec is SIL27 Feb 12 20:25:23 peorth kernel: slamr: slamr0 is ICH card.
ตอนนี้เราก็จะได้ดีไวซ์ /dev/slamr0 เป็นตัวเชื่อมกับซอฟต์โมเด็ม
ต่อไปก็รัน slmodemd เป็น daemon ประมวลผลแทนฮาร์ดแวร์ (ซึ่งเป็นส่วนที่ซอฟต์โมเด็มไม่มี .. ก็เลยต้องใช้ซอฟต์แวร์ทำงานแทนนั่นเอง) อย่าลืมระบุประเทศด้วยเพราะสัญญาณโทรศัพท์ของแต่ละประเทศจะต่างกัน และที่ขาดไม่ได้ก็คือดีไวซ์ของโมเด็ม:
# slmodemd --country=THAILAND /dev/slamr0 SmartLink Soft Modem: version 2.9.6 Feb 12 2004 20:27:49 modem `slamr0' created. TTY is `/dev/pts/3' symbolic link `/dev/ttySL0' -> `/dev/pts/3' created. Use `/dev/ttySL0' as modem device, Ctrl+C for termination.
เอาล่ะ พร้อมทำงานแล้ว สังเกตว่าโปรแกรมจะสร้าง /dev/ttySL0 เป็นดีไวซ์ของโมเด็ม ดีไวซ์นี้จะปรากฏเฉพาะช่วงที่เรารัน slmodemd ไว้เท่านั้น
ทีนี้ก็มาเซ็ตโมเด็มให้โทร. เชื่อมอินเทอร์เน็ตกัน ผมก็ลองกับ TOT Online นี่ล่ะ บนลินุกซ์ทะเล/FC/RH ใช้ redhat-config-network ก็ได้ (เรียกได้จากเมนู Applications » System Settings » Network) เสร็จแล้วลองดู /etc/wvdial.conf สักนิด ถ้าใช้ redhat-config-network โปรแกรมจะใส่ Modem = /dev/modem ให้เป็นค่าปริยาย แต่เราต้องใช้ /dev/ttySL0 ครับ ดังนั้นมีืืทางเลือกสองทาง คือ 1. แก้ /etc/wvdial.conf ให้ Modem = /dev/ttySL0 หรือ 2. ทำ symlink เอา โดย ln -sf /dev/ttySL0 /dev/modem
# cat /etc/wvdial.conf [Modem0] Modem = /dev/ttySL0 Baud = 57600 SetVolume = 2 Dial Command = ATDT Init1 = ATZ Init3 = ATM1L2 FlowControl = Hardware (CRTSCTS) [Dialer TOT_Online] Username = [email protected] Password = xxxxxxxx Phone = 1222 Stupid Mode = 1 Inherits = Modem0
ออนไลน์!
ได้เวลาสั่งหมุนโทรศัพท์กันแล้นน .. ลินุกซ์ทะเล/FC/RH จะใช้ redhat-control-network ก็ได้ครับ (เรียกจากเมนู Applications -> System Tools -> Network Device Control) หรือจะ wvdial อย่างที่ผมใช้ก็ได้
# wvdial TOT_Online --> WvDial: Internet dialer version 1.53 --> Initializing modem. --> Sending: ATZ ATZ OK --> Sending: ATM1L2 ATM1L2 OK --> Modem initialized. --> Sending: ATDT1222 --> Waiting for carrier. ATDT1222 CONNECT 37333 --> Carrier detected. Starting PPP immediately. --> Starting pppd at Thu Feb 12 20:30:47 2004 --> pid of pppd: 3056
โทร. ติดแล้วลอง lsmod ดูน่าจะเห็นอะไรประมาณนี้
ppp_deflate 4800 0 zlib_deflate 21880 1 ppp_deflate zlib_inflate 21344 1 ppp_deflate bsd_comp 5184 0 ppp_async 9952 1 ppp_generic 22288 7 ppp_deflate,bsd_comp,ppp_async slhc 6176 1 ppp_generic slamr 317956 2
/var/log/message ก็ประมาณนี้
Feb 12 20:30:47 peorth pppd[3056]: pppd 2.4.1 started by root, uid 0 Feb 12 20:30:47 peorth pppd[3056]: Using interface ppp0 Feb 12 20:30:47 peorth pppd[3056]: Connect: ppp0 /dev/pts/2 Feb 12 20:31:03 peorth pppd[3056]: local IP address 172.17.212.15 Feb 12 20:31:03 peorth pppd[3056]: remote IP address 203.113.60.8 Feb 12 20:31:03 peorth pppd[3056]: primary DNS address 203.113.93.1 Feb 12 20:31:03 peorth pppd[3056]: secondary DNS address 203.113.93.2
และ ifconfig ก็จะประมาณนี้
# ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:1202 errors:0 dropped:0 overruns:0 frame:0 TX packets:1202 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:957852 (935.4 Kb) TX bytes:957852 (935.4 Kb) ppp0 Link encap:Point-to-Point Protocol inet addr:172.17.212.15 P-t-P:203.113.60.8 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:3 errors:1 dropped:0 overruns:0 frame:0 TX packets:4 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:66 (66.0 b) TX bytes:87 (87.0 b)
เป็นอันเรียบร้อย ใช้อินเทอร์เน็ตผ่านโมเด็มได้ซะที :D