星期三, 8月 11, 2004

Linux PCMCIA

from moto
============================
Linux PCMCIA HOWTO 中文版

http://www.linux.org.tw/CLDP/OLD/PCMCIA-HOWTO.html

基本 PCMCIA 核心模組並沒載入

ds: no socket drivers loaded! ..

http://www.linux.org.tw/CLDP/OLD/PCMCIA-HOWTO-3.html#ss3.1

http://www.linux.org.tw/CLDP/OLD/PCMCIA-HOWTO-4.html

症狀:

* ”核心版本不符合”之錯誤訊息在 PCMCIA 啟動手稿執行時出現。
* 在啟動後, lsmod 並沒秀出任何的 PCMCIA 模組。
* cardmgr 執行報告 ``no pcmcia driver in /proc/devices′′ 在系統日誌中。

核心模組中包括它的版本資訊會在模組被載入時與現在的核心相核對。檢查的方式視 CONFIG_MODVERSIONS 這項核心選項來看。 如果這項目是否定的, 核心版本號碼就會被編譯到每一個模組內,而 insmod 會檢查這項是否與執行中的核心是相符合的。 如果 CONFIG_MODVERSIONS 是 yes,核心所提報的每個符號會被做成一份檢查總覽 (Checksum)。這些程式碼都會被與相對應的程式碼相比對後編譯成模組。這麼做旨在讓模組們減少版本依賴度, 因為檢查總覽只會在核心介面更動時才會跟著變動, 且對於小小的核心更新升級幾乎維持與原來相同。在實務上,檢查總覽已變成更加的嚴格,因為有許多的核心介面都依賴是在編譯時期時核心選項的設定。而且,檢 查總覽己變成一個判斷相容度的極端悲觀的工具了。

有些 PCMCIA 模組需要核心服務程式,但這些服務程式可能存在或不存在,這完全要看核心的建構。 例如,SCSI 控制卡驅動程式就需要核心已被建構支援了 SCSI 了。網路驅動程式就需要支援網路的核心。如果核心缺少了一需要的功能,insmod 可能會報告出有未定義的符號而不去載入該模組。

這樣繼續的結果是,核心模組緊密地與核心版本以及許多的核心建構選項的設定相結合。一般來說,結核心 2.0.31 版的一組被編譯好的模組並無法被其他的核心 2.0.31 版本上使用。除非有特別地注意到將兩個建構成相同的設定。這個問題,就讓那些供應已編譯好的核心模組的工作變得有點奇怪了。

您有幾種選項:

* 如果您擁有的是 Linux 供應版內之未經編譯的驅動程式, 請檢查您所使用的核心是和該供應版一起的未經編譯的核心。如果您想使用未經編譯的模組,一般來說你得使用與它想伴的核心。
* 如果你重新建構或升級你的核心了,你可能需要編譯和安裝新的 PCMCIA 套件。 如果你已經有安裝了核心原始樹的話,做這件事就得容易了。 請參考 PCMCIA-HOWTO 有更詳細的指示。
* 在某些情形下,與其他系統元件的不相容可能會導致無法正確載入核心模組元件。 如果您自己升級核心, 請注意詳列模組原始檔案樹內之 Documentation/Changes 檔案內針對模組公用程式及二進位公具程式中列明的最小需求 (``minimal requirements′′)。

3.2 插斷掃描失敗

症狀:

* 當 PCMCIA 驅動程式被載入時系統卻動也不動,就算並沒有卡片插著時也一樣。
* 系統日誌在系統當機鎖死前顯示成功地偵測到 PCMCIA 控制器,但還沒顯示插斷偵測的結果時。

在辨視 PCMCIA 控制器之後,插槽驅動程式會偵測空著的插斷號碼。這個動作會為每個顯然是空著的插斷做程式化, 然後產生一個 `` 軟的 ′′ 插斷,來看看是否這個插斷可以被正確地被偵測到。有些時候,偵測到一些特殊的插斷時會影響到其他的系統設備。

這麼偵測的理由是,我們要辨視出真正空著可用的插斷。 (例如,那些不是被任何其他 Linux 設備驅動程式所預留著的, 也並非實體上已連接著 PCMCIA 控制器的,或是已連接著其他的設備但並沒有驅動程式的。)

有二種繼續的方法:

* 插斷探測工作可以使用插槽驅動程式內的 irq_list 參數設定來限制只對某些插槽實施而已。例如 ``irq_list=5, 9, 10′′ 會限制只對這三個插斷做掃描探測而已。所有的 PCMCIA 設備會被限制只能使用這幾個插斷而已 (假如它們略過了偵測動作 )。你可能需要嚐試幾次失敗並再接再厲地才能找到哪些插斷可以被安全地偵測使用的。
* 插斷探測工作可以被完全地關閉掉,在載入插槽驅動程式時使用了 ``do_scan=0′′ 選項。這麼做,會讓原定的插斷清單被使用著,它們已經避免使用那些已經被其他設備所佔用了的插斷。

另一個方法,我們可以使用在 PCMCIA 啟動手稿中指定 PCIC_OPTS 的設定,例如:

PCIC_OPTS="irq_list=5,9,10"

3.3 記憶體偵測失敗

症狀:

* 主驅動程式在卡片並不存著時被正確地載入,而且在系統日誌內也沒有任何錯誤。
* 系統當機動不了和/或任何卡片插入但在任何嗶聲響起前就重新開機。

或是:

* 任何卡片插入時會產生一個高音的嗶聲,接著低沈的嗶聲。
* 任何卡片都被誤認 ``anonymous memory cards′′。
* 系統日誌報告說有很多的記憶體範圍已被排除在外了。

主模組程式在第一次插入卡片使做一定記憶體掃描。這個動作有潛在可能地干涉到其他記憶體映射的設備。另外,pre-3.0.0 版本前的驅動程式套件還會做比現今的驅動程式版本更進一步的掃描。記憶體窗是被定義在 /etc/pcmcia/config.opts 內。 預設的窗口很大,所以它可能會幫助來限制掃描到較窄的範圍。比較合理的範圍可試看看包含進以下的位址:0xd0000-0xdffff, 0xc0000-0xcffff, 0xc8000-0xcffff, 或 0xd8000-0xdffff。

如果你有 DOS 或 Windows 版的 PCMCIA 驅動程式, 你就可以 you may be able to deduce what memory region those drivers use. 請記得 DOS 的記憶體位址通常都使用 `` 段 ′′ 位址形式,也就是它會將尾巴的十六位元數字省略掉(所以 0xd0000 的絕對位址就是 0xd000 )。 記得在改 /etc/pcmcia/config.opts 時要確認這項。

3.4 錯誤地偵測卡片的插入與抽出

症狀:

* 在開機使卡片有插著並被偵測到且正確地被建構了。
* 驅動程式不會反應出卡版被插入或移出,或是記錄在系統日誌、或時嗶聲響。

一般來說,卡槽驅動程式 (i82365 或 tcic) 會自動地偵測並選擇一個適合的插斷來傳送卡片狀態的更動。 某些 Intel 相容控制器的自動插斷偵測不能工作。 包含 Cirrus 晶片和裝在 IBM ThinkPads 上的晶片。如果在偵測時設備無法起動,它的插斷也會是閒置的。這種狀態下,卡槽驅動程式也許會挑到一個已被其他裝置使用中的插斷來使用。

在 i82365 和 tcic 的驅動程式裏的 irq_list 選項可以用來限制哪些插斷可以被測試的。這個插斷列表可被限制成只被 PCMCIA 卡所使用或用來監控卡片狀態的改變。 另外 cs_irq 選項可明白地設定哪個插斷要被用來監控卡片狀態的改變的。

如果您無法找到可正常工作的插斷號碼,還有一個票選狀態模式可用:不論是 i82365 或 tcic 都接受 poll_interval=100 這選項,用來票選卡片的每秒的改變狀態。如果您的系統已短缺可被 PCMCIA 卡使用的插斷時這個選項也可以被使用。特別是在系統內有一種以上的 PCMCIA 控制器時就必須注意這點了。

所有的這些選項必須在 PCIC_OPTS= 這行來設定, 看您的系統是設在 /etc/rc.d/rc.pcmcia 裏或是 /etc/sysconfig/pcmcia 。

3.5 兩張卡之間的資源相衝突

Symptoms:

* 兩張卡片在各自獨自使用時可以工作,
* 但當兩張卡一起被插著時,卻只有一個可以正常工作。

通常這就表示已經和某個 Linux 不知道的系統設備相衝突了。PCMCIA 設備是被動態建構的,所以,例如,插斷是在被需要時被分配的,而不是特別被指定到特別的卡片或是插槽的。現在有一個可用資源的清單,卡片會在他們被建構時 依序地被指派給資源的。在這種狀況下,最後被建構的卡片會被指派到一個並非是空閒著的資源上了。

您可檢查系統日誌有哪些資源被非正在工作的卡片所佔用著。在 /etc/pcmcia/config.opts 裏把這些排除在外, 再重新啟動 cardmgr 精靈來再載入資源資料庫。

3.6 設備建構並沒有完成

症狀:

* 當一個卡片被插入時,確實可聽到一個高音的嗶聲響。
* 接下來的卡片不管是插入或移出都不被理睬。

這表示卡片已被成功地辨視了。但是 cardmgr 因某些原因已無法完成建構程序。最有可能的原因是在卡片設定手稿的某一步驟被困住了。當一個網路卡被插入時並沒有接上一個正活動中的網路上時,網路手稿被困住了,這就是最好的例子。

要找出問題出在哪裏,你可以手動執行一個設定手稿來看看它是被困在哪兒的。這個手稿就放在 /etc/pcmcia 目錄內。他們會使用二個參數:設備名稱及動件。 cardmgr 精會把記錄建構的命令記錄在系統日誌內。 例如, 在系統日誌中顯示出 `./network 命令開始了 eth0′′ 是被 cardmgr 最後一個執行的命令,以下的命令會追蹤這個手稿:

cd /etc/pcmcia
sh -x ./network start eth0

沒有留言:

網誌存檔