AdvanSys 驅動程式說明

AdvanSys (Advanced System Products, Inc.) 生產以下基於 RISC 的、匯流排控制的、快速(10 Mhz)和超快速(20 Mhz)窄帶(8 位傳輸)SCSI 主機介面卡,適用於 ISA、EISA、VL 和 PCI 匯流排;以及基於 RISC 的、匯流排控制的、超快速(20 Mhz)寬頻(16 位傳輸)SCSI 主機介面卡,適用於 PCI 匯流排。

下面的 CDB 計數表示可以儲存在 RISC 晶片快取和板載 LRAM 中的 SCSI CDB(命令描述符塊)請求的數量。CDB 是單個 SCSI 命令。驅動程式檢測例程將顯示每個檢測到的介面卡可用的 CDB 數量。驅動程式使用的 CDB 數量可以在 BIOS 中透過更改“主機佇列大小”介面卡設定來降低。

筆記型電腦產品
  • ABP-480 - 匯流排控制 CardBus (16 CDB)

連線產品
  • ABP510/5150 - 匯流排控制 ISA (240 CDB)

  • ABP5140 - 匯流排控制 ISA PnP (16 CDB)

  • ABP5142 - 帶軟碟機的匯流排控制 ISA PnP (16 CDB)

  • ABP902/3902 - 匯流排控制 PCI (16 CDB)

  • ABP3905 - 匯流排控制 PCI (16 CDB)

  • ABP915 - 匯流排控制 PCI (16 CDB)

  • ABP920 - 匯流排控制 PCI (16 CDB)

  • ABP3922 - 匯流排控制 PCI (16 CDB)

  • ABP3925 - 匯流排控制 PCI (16 CDB)

  • ABP930 - 匯流排控制 PCI (16 CDB)

  • ABP930U - 匯流排控制 PCI Ultra (16 CDB)

  • ABP930UA - 匯流排控制 PCI Ultra (16 CDB)

  • ABP960 - 匯流排控制 PCI MAC/PC (16 CDB)

  • ABP960U - 匯流排控制 PCI MAC/PC Ultra (16 CDB)

單通道產品
  • ABP542 - 帶軟碟機的匯流排控制 ISA (240 CDB)

  • ABP742 - 匯流排控制 EISA (240 CDB)

  • ABP842 - 匯流排控制 VL (240 CDB)

  • ABP940 - 匯流排控制 PCI (240 CDB)

  • ABP940U - 匯流排控制 PCI Ultra (240 CDB)

  • ABP940UA/3940UA - 匯流排控制 PCI Ultra (240 CDB)

  • ABP970 - 匯流排控制 PCI MAC/PC (240 CDB)

  • ABP970U - 匯流排控制 PCI MAC/PC Ultra (240 CDB)

  • ABP3960UA - 匯流排控制 PCI MAC/PC Ultra (240 CDB)

  • ABP940UW/3940UW - 匯流排控制 PCI Ultra-Wide (253 CDB)

  • ABP970UW - 匯流排控制 PCI MAC/PC Ultra-Wide (253 CDB)

  • ABP3940U2W - 匯流排控制 PCI LVD/Ultra2-Wide (253 CDB)

多通道產品
  • ABP752 - 雙通道匯流排控制 EISA (每個通道 240 CDB)

  • ABP852 - 雙通道匯流排控制 VL (每個通道 240 CDB)

  • ABP950 - 雙通道匯流排控制 PCI (每個通道 240 CDB)

  • ABP950UW - 雙通道匯流排控制 PCI Ultra-Wide (每個通道 253 CDB)

  • ABP980 - 四通道匯流排控制 PCI (每個通道 240 CDB)

  • ABP980U - 四通道匯流排控制 PCI Ultra (每個通道 240 CDB)

  • ABP980UA/3980UA - 四通道匯流排控制 PCI Ultra (每個通道 16 CDB)

  • ABP3950U2W - 匯流排控制 PCI LVD/Ultra2-Wide 和 Ultra-Wide (253 CDB)

  • ABP3950U3W - 匯流排控制 PCI 雙 LVD2/Ultra3-Wide (253 CDB)

驅動程式編譯時選項和除錯

以下常量可以在原始檔中定義。

  1. ADVANSYS_ASSERT - 啟用驅動程式斷言(預設:啟用)

    啟用此選項會將斷言邏輯語句新增到驅動程式。如果斷言失敗,將在控制檯上顯示一條訊息,但系統將繼續執行。遇到的任何斷言都應報告給負責驅動程式的人員。斷言語句可以主動檢測驅動程式的問題並有助於解決這些問題。啟用斷言會增加驅動程式執行的一小部分開銷。

  2. ADVANSYS_DEBUG - 啟用驅動程式除錯(預設:停用)

    啟用此選項會將跟蹤函式新增到驅動程式,並能夠在啟動時設定驅動程式跟蹤級別。此選項對於除錯驅動程式非常有用,但它會增加驅動程式執行映像的大小並增加驅動程式執行的開銷。

    除錯輸出的數量可以使用全域性變數“asc_dbglvl”來控制。數字越高,輸出越多。預設情況下,除錯級別為 0。

    如果在啟動時載入驅動程式,並且系統包含 LILO 驅動程式選項,則可以透過指定第 5 個 (ASC_NUM_IOPORT_PROBE + 1) I/O 埠來更改除錯級別。偽 I/O 埠的前三個十六進位制數字必須設定為“deb”,第四個十六進位制數字指定除錯級別:0 - F。以下命令列將在 0x330 處查詢介面卡並將除錯級別設定為 2

    linux advansys=0x330,0,0,0,0xdeb2
    

    如果驅動程式構建為可載入模組,則可以在載入驅動程式時定義此變數。以下 insmod 命令會將除錯級別設定為 1

    insmod advansys.o asc_dbglvl=1
    

    除錯訊息級別

    0

    僅錯誤

    1

    高級別跟蹤

    2-N

    詳細跟蹤

    要啟用向控制檯的除錯輸出,請確保

    1. 系統和核心日誌記錄已啟用(syslogd、klogd 正在執行)。

    2. 核心訊息已路由到控制檯輸出。檢查 /etc/syslog.conf 中是否有類似於此的條目

      kern.*                  /dev/console
      
    3. klogd 使用適當的 -c 引數啟動(例如 klogd -c 8)

    這將導致 printk() 訊息顯示在當前控制檯上。有關詳細資訊,請參閱 klogd(8) 和 syslogd(8) 手冊頁。

    或者,您可以使用此程式啟用 printk() 到控制檯。但是,這不是執行此操作的“官方”方式。

    除錯輸出記錄在 /var/log/messages 中。

    main()
    {
            syscall(103, 7, 0, 0);
    }
    

    將 kernel/printk.c 中的 LOG_BUF_LEN 增加到類似 40960 的值允許在核心中緩衝更多除錯訊息並寫入控制檯或日誌檔案。

  3. ADVANSYS_STATS - 啟用統計資訊(預設:啟用)

    啟用此選項會將統計資訊收集和透過 /proc 顯示新增到驅動程式。該資訊對於監視驅動程式和裝置效能非常有用。它會增加驅動程式執行映像的大小並增加驅動程式執行的少量開銷。

    統計資訊按每個介面卡進行維護。維護驅動程式入口點呼叫計數和傳輸大小計數。統計資訊僅適用於配置了 CONFIG_PROC_FS (/proc) 檔案系統的版本大於或等於 v1.3.0 的核心。

    AdvanSys SCSI 介面卡檔案具有以下路徑名格式

    /proc/scsi/advansys/{0,1,2,3,...}
    

    可以使用 cat 顯示此資訊。例如

    cat /proc/scsi/advansys/0
    

    當未定義 ADVANSYS_STATS 時,AdvanSys /proc 檔案僅包含介面卡和裝置配置資訊。

驅動程式 LILO 選項

如果按照上面“將 AdvanSys 驅動程式新增到 Linux 的說明”部分 (B.4.) 中描述的方式修改 init/main.c,則驅動程式將識別“advansys”LILO 命令列和 /etc/lilo.conf 選項。此選項可用於停用 I/O 埠掃描或將掃描限制為 1 - 4 個 I/O 埠。無論選項設定如何,仍然會搜尋和檢測 EISA 和 PCI 板。此選項僅影響搜尋 ISA 和 VL 板。

示例
  1. 消除 I/O 埠掃描

    boot

    linux advansys=
    

    boot: linux advansys=0x0
    
  2. 將 I/O 埠掃描限制為一個 I/O 埠

    boot

    linux advansys=0x110
    
  3. 將 I/O 埠掃描限制為四個 I/O 埠

    boot

    linux advansys=0x110,0x210,0x230,0x330
    

對於可載入模組,可以透過在載入驅動程式時設定 'asc_iopflag' 變數和 'asc_ioport' 陣列來實現相同的效果,例如

insmod advansys.o asc_iopflag=1 asc_ioport=0x110,0x330

如果定義了 ADVANSYS_DEBUG,則可以新增第 5 個 (ASC_NUM_IOPORT_PROBE + 1) I/O 埠來指定驅動程式除錯級別。有關更多資訊,請參閱上面的“驅動程式編譯時選項和除錯”部分。

鳴謝(按時間順序)

Bob Frey <bfrey@turbolinux.com.cn> 編寫了 AdvanSys SCSI 驅動程式並將其維護到 3.3F。他繼續回答問題並幫助維護驅動程式。

Nathan Hartwell <mage@cdc3.cdc.net> 提供了 Linux v1.3.X 更改的說明和基礎,這些更改包含在 1.2 版本中。

Thomas E Zerucha <zerucha@shell.portal.com> 指出了 advansys_biosparam() 中的一個錯誤,該錯誤已在 1.3 版本中修復。

Erik Ratcliffe <erik@caldera.com> 已經在 Caldera 版本中完成了 AdvanSys 驅動程式的測試。

Rik van Riel <H.H.vanRiel@fys.ruu.nl> 提供了一個 AscWaitTixISRDone() 的補丁,他發現有必要使驅動程式與 SCSI-1 磁碟一起工作。

Mark Moran <mmoran@mmoran.com> 幫助測試了 3.1A 驅動程式中的 Ultra-Wide 支援。

Doug Gilbert <dgilbert@interlog.com> 對驅動程式進行了更改和建議,以改進驅動程式並進行了大量測試。

Ken Mort <ken@mort.net> 報告了 3.2K 中修復的 DEBUG 編譯錯誤。

Tom Rini <trini@kernel.crashing.org> 提供了 CONFIG_ISA 補丁並幫助支援 PowerPC 寬窄板。

Philip Blundell <philb@gnu.org> 提供了一個 advansys_interrupts_enabled 補丁。

Dave Jones <dave@denial.force9.co.uk> 報告了在 3.2M 驅動程式中未定義 CONFIG_PROC_FS 時生成的編譯器警告。

Jerry Quinn <jlquinn@us.ibm.com> 修復了寬卡對 PowerPC 的支援(endian 問題)。

Bryan Henderson <bryanh@giraffe-data.com> 幫助除錯窄卡錯誤處理。

Manuel Veloso <veloso@pobox.com> 努力支援 PowerPC 窄板並修復了 AscGetEEPConfig() 中的一個錯誤。

Arnaldo Carvalho de Melo <acme@conectiva.com.br> 進行了 save_flags/restore_flags 更改。

Andy Kellner <AKellner@connectcom.net> 繼續為 ConnectCom 開發 Advansys SCSI 驅動程式(版本 > 3.3F)。

Ken Witherow 在 3.4 版本開發期間進行了廣泛的測試。