Parport¶
parport 程式碼提供了 Linux 下的並行埠支援。 這包括在多個裝置驅動程式之間共享一個埠的能力。
您可以將引數傳遞給 parport 程式碼,以覆蓋其對硬體的自動檢測。 如果您想使用 IRQ,這尤其有用,因為通常無法成功自動探測這些 IRQ。 預設情況下,即使可以探測到 IRQ,也不會使用它們。 這是因為很多人將相同的 IRQ 用於並行埠以及音效卡或網絡卡。
parport 程式碼分為兩部分:通用部分(處理埠共享)和架構相關部分(處理實際使用埠)。
將 Parport 作為模組¶
如果您將 parport` 程式碼作為模組載入,例如
# insmod parport
載入通用的 parport 程式碼。 然後,您必須載入架構相關的程式碼,例如
# insmod parport_pc io=0x3bc,0x378,0x278 irq=none,7,auto
告訴 parport 程式碼您想要三個 PC 風格的埠,一個位於 0x3bc 且沒有 IRQ,一個位於 0x378 且使用 IRQ 7,另一個位於 0x278 且具有自動檢測的 IRQ。 目前,支援 PC 風格 (parport_pc)、Sun bpp、Amiga、Atari 和 MFC3 硬體。
PCI 並行 I/O 卡支援來自 parport_pc。 不應為受支援的 PCI 卡指定基本 I/O 地址,因為它們會自動檢測到。
modprobe¶
如果您使用 modprobe,您會發現將如下行新增到 /etc/modprobe.d/ 目錄中的配置檔案很有用
alias parport_lowlevel parport_pc
options parport_pc io=0x378,0x278 irq=7,auto
每當載入並行埠裝置驅動程式(例如 lp)時,modprobe 將載入 parport_pc(帶有選項 io=0x378,0x278 irq=7,auto)。
請注意,這些只是示例行! 一般來說,您不需要為 parport_pc 指定任何選項即可使用並行埠。
Parport 探測 [可選]¶
在 2.2 核心中,有一個名為 parport_probe 的模組,用於收集 IEEE 1284 裝置 ID 資訊。 現在已經增強了這一點,現在與 IEEE 1284 支援一起存在。 檢測到並行埠後,將分析連線到該埠的裝置,並記錄如下資訊
parport0: Printer, BJC-210 (Canon)
探測資訊可從 /proc/sys/dev/parport/ 中的檔案中獲得。
Parport 靜態連結到核心中¶
如果將 parport 程式碼編譯到核心中,則可以使用核心啟動引數來獲得相同的效果。 將類似以下內容新增到您的 LILO 命令列
parport=0x3bc parport=0x378,7 parport=0x278,auto,nofifo
您可以有許多 parport=... 語句,每個要新增的埠一個。 將 parport=0 新增到核心命令列將完全停用 parport 支援。 將 parport=auto 新增到核心命令列將使 parport 使用其自動檢測到的任何 IRQ 線或 DMA 通道。
/proc 中的檔案¶
如果已將 /proc 檔案系統配置到核心中,您將看到一個新的目錄項:/proc/sys/dev/parport。 其中將為配置了 parport 的每個並行埠建立一個目錄項。 在每個目錄中,都有一系列描述該並行埠的檔案。
/proc/sys/dev/parport 目錄樹如下所示
parport
|-- default
| |-- spintime
| `-- timeslice
|-- parport0
| |-- autoprobe
| |-- autoprobe0
| |-- autoprobe1
| |-- autoprobe2
| |-- autoprobe3
| |-- devices
| | |-- active
| | `-- lp
| | `-- timeslice
| |-- base-addr
| |-- irq
| |-- dma
| |-- modes
| `-- spintime
`-- parport1
|-- autoprobe
|-- autoprobe0
|-- autoprobe1
|-- autoprobe2
|-- autoprobe3
|-- devices
| |-- active
| `-- ppa
| `-- timeslice
|-- base-addr
|-- irq
|-- dma
|-- modes
`-- spintime
檔案 |
目錄 |
|---|---|
|
使用該埠的裝置驅動程式的列表。 當前正在使用該埠的裝置名稱旁邊將顯示一個“+”(可能不會顯示任何)。 字串“none”表示沒有裝置驅動程式正在使用該埠。 |
|
並行埠的基本地址,如果埠有多個地址,則用製表符分隔。 這些值對於某些埠可能沒有任何實際意義。 |
|
並行埠的 IRQ,如果未使用,則為 -1。 |
|
並行埠的 DMA 通道,如果未使用,則為 -1。 |
|
並行埠的硬體模式,以逗號分隔,含義如下
請注意,如果當前實現有 IRQ 線可用,它將僅利用 COMPAT 和 ECP 模式。 |
|
已從(非 IEEE 1284.3)裝置獲取的任何 IEEE-1284 裝置 ID 資訊。 |
|
從符合 IEEE 1284.3 的菊花鏈裝置檢索到的 IEEE 1284 裝置 ID 資訊。 |
|
在等待外圍裝置響應時忙迴圈的微秒數。 您可能會發現調整此設定可以提高效能,具體取決於您的外圍裝置。 這是一個埠範圍的設定,即它適用於特定埠上的所有裝置。 |
|
允許裝置驅動程式保持埠宣告的時間(以毫秒為單位)。 這是建議性的,如果必須,驅動程式可以忽略它。 |
|
spintime 和 timeslice 的預設值。 註冊新埠時,它會獲取預設的 spintime。 註冊新裝置時,它會獲取預設的 timeslice。 |
裝置驅動程式¶
初始化 parport 程式碼後,您可以將裝置驅動程式連線到特定埠。 通常,這會自動發生; 如果載入 lp 驅動程式,它將為找到的每個埠建立一個 lp 裝置。 但是,您可以使用引數覆蓋此設定,無論是載入 lp 驅動程式時
# insmod lp parport=0,2
還是在 LILO 命令列上
lp=parport0 lp=parport2
以上兩個示例都將通知 lp 您希望 /dev/lp0 成為第一個並行埠,並且 /dev/lp1 成為**第三個**並行埠,而第二個埠 (parport1) 沒有關聯的 lp 裝置。 請注意,這與舊核心的工作方式不同; 過去 I/O 埠地址和裝置名稱之間存在靜態關聯,因此 /dev/lp0 始終是位於 0x3bc 的埠。 現在情況並非如此 - 如果您只有一個埠,無論基本地址如何,它都將預設為 /dev/lp0。
此外
如果在編譯時選擇了 IEEE 1284 支援,則可以在核心命令列上說
lp=auto,並且 lp 將僅為那些似乎連線了印表機的埠建立裝置。如果您給 PLIP 提供
timid引數,無論是在命令列上使用plip=timid,還是在使用模組時使用insmod plip timid=1,它都會避免任何似乎被其他裝置使用的埠。目前,IRQ 自動探測僅適用於少數埠型別。
報告 parport 的印表機問題¶
如果列印時遇到問題,請按照以下步驟嘗試縮小問題區域。
報告 parport 的問題時,實際上需要提供 parport_pc 在初始化時輸出的所有訊息。 有幾個程式碼路徑
輪詢
中斷驅動,協議在軟體中
中斷驅動,協議在使用 PIO 的硬體中
中斷驅動,協議在使用 DMA 的硬體中
parport_pc 記錄的核心訊息指示正在使用哪個程式碼路徑。 (實際上,它們可以更好..)
對於正常的印表機協議,啟用或不啟用 IEEE 1284 模式不應有任何區別。
要關閉“硬體協議”程式碼路徑,請停用 CONFIG_PARPORT_PC_FIFO。 請注意,啟用它們後,它們不一定會被**使用**; 這取決於硬體是否可用、是否已由 BIOS 啟用以及是否已由驅動程式檢測到。
因此,首先停用 CONFIG_PARPORT_PC_FIFO,並使用 irq=none 載入 parport_pc。 看看列印是否正常。 確實應該正常,因為這是最簡單的程式碼路徑。
如果這工作正常,請嘗試使用 io=0x378 irq=7(根據您的硬體進行調整),使其使用中斷驅動的軟體協議。
如果**那**工作正常,那麼其中一種硬體模式無法正常工作。 啟用 CONFIG_FIFO(不,它不是一個模組選項,是的,它應該是),在 BIOS 中將埠設定為 ECP 模式,並記下 DMA 通道,然後嘗試
io=0x378 irq=7 dma=none (for PIO)
io=0x378 irq=7 dma=3 (for DMA)