Chinaunix首页 | 论坛 | 博客
  • 博客访问: 484982
  • 博文数量: 142
  • 博客积分: 4126
  • 博客等级: 上校
  • 技术积分: 1545
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-22 10:03
文章分类

全部博文(142)

文章存档

2011年(8)

2010年(7)

2009年(64)

2008年(63)

我的朋友

分类: LINUX

2008-12-25 11:25:59

PCMCIA 介面是 Notebook 的基本介面之一, 舊型的 Notebook 通常沒有內建網卡, 一般都是使用 PCMCIA 網卡來連接網路.

不過 Linux 在使用 PCMCIA 網卡的時候, 尚有許多細節要注意. 如: PCMCIA 和 Network 服務的啟動順序、APM Suspend → Resume 會 Hang 住的問題排除...

作業系統環境:

  • Fedora Core 1, kernel: 2.4.22-2115.nptl
  • kernel-pcmcia-cs-3.1.31-13
  • apmd-3.0.2-20
  • eth0: to LAN
  • eth1: to WAN

硬體環境:

Twinhead P88TF (Slimnote VX3 series)

PC Card Socket 0 ( eth1 ):
3.3V CardBus card - Zonet ZEN1200 32-bit CardBus 10/100M Fast Ethernet PC Card

PC Card Socket 1 ( eth0 ):
5V 16-bit PC Card - Buffalo LPC4-CLX 16-bit 10/100M Fast Ethernet PC Card

註: 原來 Linux 先抓到 Socket 1 的網卡, 先指派它為 eth0, 難怪之前老是出問題... :P

設定備忘:

/etc/rc.d/rc?.d/S??pcmcia

更名 S??pcmcia, 將 S?? 數字部份改為比 S??network 小一號的數字
如: S10network, 則修改 S??pcmcia 為 S09pcmcia

/etc/sysconfig/pcmcia

PCMCIA=yes
PCIC=yenta_socket
PCIC_OPTS=
CORE_OPTS=

/etc/sysconfig/apmd

LOGPERCENTCHANGE=5
WARNPERCENT=10
CLOCK_SYNC="yes"
PCMCIARESTART="yes"
PCMCIABIOSBUG="yes"
PCMCIAWAIT="no"
NET_RESTART="yes"

/etc/pcmcia/config

card "Melco LPC4-CLX Ethernet"
version "BUFFALO", "LPC4-CLX"
manfid 0x026f, 0x0309
bind "axnet_cs"

註: manfid 可用 cardctl ident 指令查出

/etc/pcmcia/config.opts

exclude irq 4
exclude irq 3
exclude irq 7
exclude irq 12

註: 當 /var/log/messages 出現 "kernel: eth0: next frame inconsistency, 0xa2" 或 dmesg 出現 "bogus: packet size: 5397, status=0x15 nxpg=0x15" 之類的訊息時, 很有可能是因為系統指派的 IRQ 出現衝突, 可由此檔修正. 參考資料:

/etc/modules.conf (kernel 2.6 則為 modprobe.conf)

alias eth0 axnet_cs
alias eth1 8139too
alias usb-controller usb-uhci (for usb 外接硬碟)

/etc/sysconfig/hwconf

mv /etc/sysconfig/hwconf /root
chkconfig kudzu off

相關服務與指令:

  • cardctl
    usage: cardctl command [socket #]
      or cardctl [-c configpath] [-f scheme] [-s stab] scheme [name]
      commands: status config ident suspend resume reset eject insert
  • service pcmcia {start | stop | status | restart | reload}
  • service network {start | stop | restart | reload | status}

參考資料:

本站 Linux NAT 相關文章:



在 Linux 使用 PCMCIA 網卡 - 補充、備忘

最近家裡的 Linux NAT 一直出問題, 原本以為是 16-bit PC Card 的設定問題, 繞了一大圈之後, 總算對 PCMCIA 網卡有了更進一步的認識.

環境:

  • Fedora Core 1
  • eth0: 16-bit PC Card, driver: axnet_cs
  • eth1: 32-bit CardBus, driver: 8139too

相關備忘:

  • Linux NAT 使用 16-bit PC Card 時, 一段時間後 (使用 P2P 軟體時特別明顯) 會發生 eth0: bogus packet size: 1799, status=0x0 nxpg=0x0. 和 kernel: eth0: Too much work at interrupt, status 0x01 的錯誤訊息, 最後該網卡將無法運作, 但問題發生時另一張 CardBus 網卡不受影響. 此時可用指令 ifdown eth0 ; sleep 3 ; ifup eth0 恢復問題網卡的運作, 當然, 這方法只能治標, 最好還是換好一點的網卡 (或 driver). 此外, 減少 iptables rules 或寫一個 Shell scrīpt 監控問題網卡也是可行的方案.

    寫一個 Shell scrīpt 定時 ping 一個有效的 IP, 如果 ping 不到, 表示上述問題又發生了, 自動重新啟動問題網卡:
     
    #!/bin/bash

    if [ -z "`ping -c 1 192.168.1.254 | grep '1 received'`" ]; then
       ifdown eth0
       sleep 3
       ifup eth0
       echo `date +%D\ %R` >> /var/log/eth0_restart.log
    fi
     
  • 關於 PC Card 介面, CardBus 規格為 32-bit, PC Card 為 16-bit. 在 cardctl config 指令中可看出, 32-bit CardBus interface type 是 "cardbus"; 16-bit PC Card interface type 是 "memory and I/O", 可由 /etc/modules.conf (kernel 2.4) 或 /etc/modprobe.conf (kernel 2.6) 手動指定 IRQ 和 I/O 位址. 如:

    alias eth0 axnet_cs
    options axnet_cs irq=5 io=0x300
     
  • 16-bit PC Card 視同 ISA 介面, 在 Linux x86 環境使用時, Kernel 需設定 CONFIG_ISA=y (enable ISA bus support).
     
  • 首次安裝以及使用 yum update 的 kernel 設定值, 存在於 /boot/config-`uname -r` 檔案中. 其檔案內容如同 kernel source 在 make menuconfig 後所產生的 .config 檔案
     
  • 由 cfgmaker 所產生的 mrtg.cfg, 若某網卡設定區段出現 "speed of 0" 訊息, 於 cfgmaker 時加上參數: --zero-speed=100000000 (意為 100Mbits) 即可解決. 如果 cfgmaker 沒有 --zero-speed 這個參數, 昇級 套件即可 (已知 v2.10 的 cfgmaker 未支援本參數)
     
  • 由 cfgmaker 所產生的 mrtg.cfg, 若某網卡設定區段出現 "operationally DOWN" 訊息, 把這個訊息底下 # 註解的部份解除後 (Target, SetEnv... 這些敘述前面不能有空格), 通常還是能讓 indexmaker、mrtg 讀取運用


/var/log/messages 錯誤訊息備忘:

kernel: eth0: next frame inconsistency, 0x8e
kernel: eth0: next frame inconsistency, 0xd6
kernel: eth0: next frame inconsistency, 0x??
last message repeated 8 times
kernel: eth0: Too much work at interrupt, status 0x01

參考資料:

  • (英文)
  • (中文)

Jamyy's Weblog 相關網頁

阅读(1090) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~