一、Linux device driver 的概念x0dx0ax0dx0a系統調用是操作系統內核和應用程序之間的介面,設備驅動程序是操作系統內核和機器硬體之間的介面。設備驅動程序為應用程序屏蔽了硬體的細節,這樣在應用程序看來,硬體設備只是一個設備文件,應用程序可以象操作普通文件一樣對硬體設備進行操作。設備驅動程序是內核的一部分,它完成以下的功能:x0dx0ax0dx0a1、對設備初始化和釋放;x0dx0ax0dx0a2、把數據從內核傳送到硬體和從硬體讀取數據;x0dx0ax0dx0a3、讀取應用程序傳送給設備文件的數據和回送應用程序請求的數據;x0dx0ax0dx0a4、檢測和處理設備出現的錯誤。x0dx0ax0dx0a在Linux操作系統下有三類主要的設備文件類型,一是字元設備,二是塊設備,三是網路設備。字元設備和塊設備的主要區別是:在對字元設備發出讀/寫請求時,實際的硬體I/O一般就緊接著發生了,塊設備則不然,它利用一塊系統內存作緩沖區,當用戶進程對設備請求能滿足用戶的要求,就返回請求的數據,如果不能,就調用請求函數來進行實際的I/O操作。塊設備是主要針對磁碟等慢速設備設計的,以免耗費過多的CPU時間來等待。x0dx0ax0dx0a已經提到,用戶進程是通過設備文件來與實際的硬體打交道。每個設備文件都都有其文件屬性(c/b),表示是字元設備還是塊設備?另外每個文件都有兩個設備號,第一個是主設備號,標識驅動程序,第二個是從設備號,標識使用同一個設備驅動程序的不同的硬體設備,比如有兩個軟盤,就可以用從設備號來區分他們。設備文件的的主設備號必須與設備驅動程序在登記時申請的主設備號一致,否則用戶進程將無法訪問到驅動程序。x0dx0ax0dx0a最後必須提到的是,在用戶進程調用驅動程序時,系統進入核心態,這時不再是搶先式調度。也就是說,系統必須在你的驅動程序的子函數返回後才能進行其他的工作。如果你的驅動程序陷入死循環,不幸的是你只有重新啟動機器了,然後就是漫長的fsck。x0dx0ax0dx0a二、實例剖析x0dx0ax0dx0a我們來寫一個最簡單的字元設備驅動程序。雖然它什麼也不做,但是通過它可以了解Linux的設備驅動程序的工作原理。把下面的C代碼輸入機器,你就會獲得一個真正的設備驅動程序。x0dx0ax0dx0a由於用戶進程是通過設備文件同硬體打交道,對設備文件的操作方式不外乎就是一些系統調用,如 open,read,write,close?, 注意,不是fopen, fread,但是如何把系統調用和驅動程序關聯起來呢?這需要了解一個非常關鍵的數據結構:x0dx0ax0dx0aSTruct file_operatiONs {x0dx0ax0dx0aint (*seek) (struct inode * ,struct file *, off_t ,int);x0dx0ax0dx0aint (*read) (struct inode * ,struct file *, char ,int);x0dx0ax0dx0aint (*write) (struct inode * ,struct file *, off_t ,int);x0dx0ax0dx0aint (*readdir) (struct inode * ,struct file *, struct dirent * ,int);x0dx0ax0dx0aint (*select) (struct inode * ,struct file *, int ,select_table *);x0dx0ax0dx0aint (*ioctl) (struct inode * ,struct file *, unsined int ,unsigned long);x0dx0ax0dx0aint (*mmap) (struct inode * ,struct file *, struct vm_area_struct *);x0dx0ax0dx0aint (*open) (struct inode * ,struct file *);x0dx0ax0dx0aint (*release) (struct inode * ,struct file *);x0dx0ax0dx0aint (*fsync) (struct inode * ,struct file *);x0dx0ax0dx0aint (*fasync) (struct inode * ,struct file *,int);x0dx0ax0dx0aint (*check_media_change) (struct inode * ,struct file *);x0dx0ax0dx0aint (*revalidate) (dev_t dev);x0dx0ax0dx0a}x0dx0ax0dx0a這個結構的每一個成員的名字都對應著一個系統調用。用戶進程利用系統調用在對設備文件進行諸如read/write操作時,系統調用通過設備文件的主設備號找到相應的設備驅動程序,然後讀取這個數據結構相應的函數指針,接著把控制權交給該函數。這是linux的設備驅動程序工作的基本原理。既然是這樣,則編寫設備驅動程序的主要工作就是編寫子函數,並填充file_operations的各個域。x0dx0ax0dx0a下面就開始寫子程序。x0dx0ax0dx0a#include
㈡ linux系統中沒有USB驅動怎麼辦
要啟用 Linux USB 支持,首先進入"USB support"節並啟用"Support for USB"選項(對應模塊為usbcore.o)。盡管這個步驟相當直觀明了,但接下來的 Linux USB 設置步驟則會讓人感到糊塗。特別地,現在需要選擇用於系統的正確 USB 主控制器驅動程序。選項是"EHCI" (對應模塊為ehci-hcd.o)、"UHCI" (對應模塊為usb-uhci.o)、"UHCI (alternate driver)"和"OHCI" (對應模塊為usb-ohci.o)。這是許多人對 Linux 的 USB 開始感到困惑的地方。
要理解"EHCI"及其同類是什麼,首先要知道每塊支持插入 USB 設備的主板或 PCI 卡都需要有 USB 主控制器晶元組。這個特別的晶元組與插入系統的 USB 設備進行相互操作,並負責處理允許 USB 設備與系統其它部分通信所必需的所有低層次細節。
Linux USB 驅動程序有三種不同的 USB 主控制器選項是因為在主板和 PCI 卡上有三種不同類型的 USB 晶元。"EHCI"驅動程序設計成為實現新的高速 USB 2.0 協議的晶元提供支持。"OHCI"驅動程序用來為非 PC 系統上的(以及帶有 SiS 和 ALi 晶元組的 PC 主板上的)USB 晶元提供支持。"UHCI"驅動程序用來為大多數其它 PC 主板(包括 Intel 和 Via)上的 USB 實現提供支持。只需選擇與希望啟用的 USB 支持的類型對應的"?HCI"驅動程序即可。如有疑惑,為保險起見,可以啟用"EHCI"、"UHCI" (兩者中任選一種,它們之間沒有明顯的區別)和"OHCI"。( 趙明註:根據文檔,EHCI已經包含了UHCI和OHCI,但目前就我個人的測試,單獨加EHCI是不行的,通常我的做法是根據主板類型載入UHCI或OHCI後,再載入EHCI這樣才可以支持USB2.0設備)。
啟用了"USB support"和適當的"?HCI"USB 主控制器驅動程序後,使 USB 啟動並運行只需再進行幾個步驟。應該啟用"Preliminary USB device filesystem",然後確保啟用所有特定於將與 Linux 一起使用的實際 USB 外圍設備的驅動程序。例如,為了啟用對 USB 游戲控制器的支持,我啟用了"USB Human Interface Device (full HID) support"。我還啟用了主"Input core support" 節下的"Input core support"和"Joystick support"。
一旦用新的已啟用 USB 的內核重新引導後,若/proc/bus/usb下沒有相應USB設備信息,應輸入以下命令將 USB 設備文件系統手動掛裝到 /proc/bus/usb:
# mount -t usbdevfs none /proc/bus/usb
為了在系統引導時自動掛裝 USB 設備文件系統,請將下面一行添加到 /etc/fstab 中的 /proc 掛裝行之後:
none /proc/bus/usb usbdevfs defaults 0 0
模塊的配置方法.
在很多時候,我們的USB設備驅動並不包含在內核中。其實我們只要根據它所需要使用的模塊,逐一載入。就可以使它啟作用。
首先要確保在內核編譯時以模塊方式選擇了相應支持。這樣我們就應該可以在/lib/moles/2.4.XX目錄看到相應.o文件。在載入模塊時,我們只需要運行modprobe xxx.o就可以了(modprobe主要載入系統已經通過depmod登記過的模塊,insmod一般是針對具體.o文件進行載入)
對應USB設備下面一些模塊是關鍵的。
usbcore.o要支持usb所需要的最基礎模塊usb-uhci.o(已經提過)usb-ohci.o(已經提過)uhci.o另一個uhci驅動程序,我也不知道有什麼用,一般不要載入,會死機的ehci-hcd.o(已經提過 usb2.0)hid.oUSB人機界面設備,像滑鼠呀、鍵盤呀都需要usb-storage.oUSB存儲設備,U盤等用到
相關模塊
ide-disk.oIDE硬碟ide-scsi.o把IDE設備模擬SCSI介面scsi_mod.oSCSI支持
注意kernel config其中一項:
Probe all LUNs on each SCSI device
最好選上,要不某些同時支持多個口的讀卡器只能顯示一個。若模塊方式就要帶參數安裝或提前在/etc/moles.conf中加入以下項,來支持多個LUN。
add options scsi_mod max_scsi_luns=9
sd_mod.oSCSI硬碟sr_mod.oSCSI光碟sg.oSCSI通用支持(在某些探測U盤、SCSI探測中會用到)
常見USB設備及其配置
在Linux 2.4的內核中已經支持不下20種設備。它支持幾乎所有的通用設備如鍵盤、滑鼠、modem、列印機等,並不斷地添加廠商新的設備象數碼相機、MP3、網卡等。下面就是幾個最常見設備的介紹和使用方法:
USB滑鼠:
鍵盤和滑鼠屬於低速的輸入設備,對於已經為用戶認可的PS/2介面,USB鍵盤和USB滑鼠似乎並沒有太多更優越的地方。現在的大部分滑鼠採用了PS/2介面,不過USB介面的滑鼠也越來越多,兩者相比,各有優勢:一般來說,USB的滑鼠介面的帶寬大於PS/2滑鼠,也就是說在同樣的時間內,USB滑鼠掃描次數就要多於PS/2滑鼠,這樣在定位上USB滑鼠就更為精確;同時USB介面滑鼠的默認采樣率也比較高,達到125HZ,而PS/2介面的滑鼠僅有40HZ(Windows 9x/Me)或是60HZ(Windows NT/2000)。
對於USB設備你當然必須先插入相應的USB控制器模塊:usb-uhci.o或usb-ohci.o
modprobe usb-uhci
USB滑鼠為了使其正常工作,您必須先插入模塊usbmouse.o和mousedev.o
modprobe usbmouse
modprobe mousedev
若你把HID input layer支持和input core 支持也作為模塊方式安裝,那麼啟動hid模塊和input模塊也是必要的。
modprobe hid
modprobe input
USB鍵盤:
一般的,我們現在使用的鍵盤大多是PS/2的,USB鍵盤還比較少見,但是下來的發展,鍵盤將向USB介面靠攏。使用USB鍵盤基本上沒有太多的要求,只需在主板的BIOS設定對USB鍵盤的支持,就可以在各系統中完全無障礙的使用,而且更可以真正做到在即插即用和熱插拔使用,並能提供兩個USB連接埠:讓您可以輕易地直接將具有USB接頭的裝置接在您的鍵盤上,而非計算機的後面。
同樣你當然必須先插入相應的USB控制器模塊:usb-uhci.o或usb-ohci.o
modprobe usb-uhci
然後您還必須插入鍵盤模塊usbkbd.o,以及keybdev.o,這樣usb鍵盤才能夠正常工作。此時,運行的系統命令:
modprobe usbkbd
modprobe keybdev
同樣若你把HID input layer支持和input core 支持也作為模塊方式安裝,那麼啟動hid模塊和input模塊也是必要的。
U盤和USB讀卡器:
數碼存儲設備現在對我們來說已經是相當普遍的了。CF卡、SD卡、Memory Stick等存儲卡已經遍及我們的身邊,通常,他們的讀卡器都是USB介面的。另外,很多MP3、數碼相機也都是USB介面和計算機進行數據傳遞。更我們的U盤、USB硬碟,作為移動存儲設備,已經成為我們的必須裝備。
在Linux下這些設備通常都是以一種叫做usb-storage的方式進行驅動。要使用他們必須載入此模塊
modprobe usb-storage
當然,usbcore.o 和usb-uhci.o或usb-ohci也肯定是不可缺少的。另外,若你系統中SCSI支持也是模塊方式,那麼下面的模塊也要載入
modprobe scsi_mod
modprobe sd_mod
在載入完這些模塊後,我們插入U盤或存儲卡,就會發現系統中多了一個SCSI硬碟,通過正確地mount它,就可以使用了(SCSI硬碟一般為/dev/sd?,可參照文章後面的常見問題解答)。
mount /dev/sda1 /mnt
Linux支持的其他USB設備。
MODEM--(比較常見) 網路設備 攝像頭--(比較常見)例如ov511.o 聯機線--可以讓你的兩台電腦用USB線實現網路功能。usbnet.o 顯示器--(我沒見過) 游戲桿 電視盒--(比較常見) 手寫板--(比較常見) 掃描儀--(比較常見) 刻錄機--(比較常見) 列印機--(比較常見)
注意:
上面所說的每個驅動模塊,並不是都要手動載入,有很多系統會在啟動或你的應用需要時自動載入的,寫明這些模塊,是便於你在不能夠使用USB設備時,可以自行檢查。只要用lsmod確保以上模塊已經被系統載入,你的設備就應該可以正常工作了。當然注意有些模塊已經以內核方式在kernel啟動時存在了(這些模塊文件在/lib/moles/2.4.XX中是找不到的)。
輸入相關命令
㈢ Manjaro20.0配置TR4527列印機和掃描儀驅動
【注】Manjaro 系統日常使用問題可以上 Manjaro 官方論壇 上逛一逛,說不定具有解決辦法。
Arch Linux AUR 源已經提供了 TR4527 列印機驅動程序 cnijfilter2 ,詳情參見 地址 。
在終端手動安裝該驅動程序即可:
Arch Linux AUR 源已經提供了 TR4527 掃描儀驅動程序 scangearmp2 ,詳情參見 地址 。
在終端手動安裝該驅動程序即可:
㈣ 怎麼在Linux上安裝列印機驅動
linux桌面下可照如下步驟添加列印機:
請您點擊左下角圖標(即開始按鈕),從系統主內菜單中選中「系容統設置」,在其中選
在左側的列表中,選擇「新建列印機」,然後在右側選擇「新建列印機」按鈕,之後 進入選擇列印機的界面,這時,系統就會自動掃描出當前網路中可用的列印機,將結果顯示在左側列表中。
從列出的可用列印機中,選擇您要配置的那一台,點擊右下角的「前進」按鈕,進入 「設置列印機類型」的界面。
從列表中選擇對應的列印機型號,比如「HP」、「Canon」等。
如果列表中沒有您列印機的類型,請選擇「General」。然後點擊「前進」按鈕,進入 「添加列印機具體驅動型號」的界面,左側列表是列印機的型號,右側列表是系統中目前 可用的所有驅動程序(左邊選擇哪個型號,右邊就顯示它對應的驅動程序)。
點擊「前進」按鈕,依次填寫:
「列印機名稱」 (可自己命名)
「描述」 (可不填寫)
「位置」 (可自己定義)
㈤ 奔圖列印機Linux系統下怎樣使用掃描功能,新手小
有多種方法,比較常見的有兩種: 1、可以先安裝列印機程序,然後根據提示接通列印機數據線和電源,它會自動安裝以下驅動程序。 2、直接在控制面板-列印機-添加列印機。然後自己搜索所對應的列印機驅動程序。
㈥ linux下如何安裝Epson驅動,急。謝謝
有Epson的for linux驅動么?有就解壓,安裝。
CUPS是很多Linux發行版預設的開源列印系統,你裝上這個CUPS,再選擇支持Epson的列印驅動包,就Ok了。
㈦ deepin linux 如何安裝V19 掃描儀
圖文開始深度系統(Deepin Linux)在...並將下載的Deepin Linux鏡像載入為DVD驅動器,以便於專安裝。如下圖:(配屬置...
tangwumo.com
Deepin教程:簡述深度安裝器專家模式_Linux教程_Linux公社...
現在使用深度安裝器安裝Deepin 2014,用戶只需要填寫用戶信息、選擇安裝的硬碟或者分區即可完成安裝配置,...
www.linuxidc.com
D
㈧ linux系統 libreoffice怎麼調出掃描儀
首先安裝掃描儀的驅動,安裝sane軟體包。
LibreOffice中,按菜單「插入---媒體---掃描」。
㈨ 掃描驅動如何下載
安裝掃描儀驅動時,需要先清楚自己掃描儀的型號,在瀏覽器搜索自己型號的掃描儀驅動下載,點進去找到下載地址,選擇本地下載後便可下載到電腦上,之後將文件夾點開,選擇set up按鈕,安裝好即可。
安裝完成後,需要將掃描儀上的USB 介面連接在電腦上,然後重啟計算機,重啟後打開電腦的控制面板,選擇設備和列印機選項,點擊「添加新硬體」,點擊下一步,將掃描儀添加在電腦上便可以使用。
㈩ 掃描儀怎麼安裝使用
掃描儀在日常生活中的應用越來越廣泛了,那麼你了解過掃描儀怎麼安裝使用了嗎?下面就由我為你介紹一下吧,希望大家喜歡!
1、在日常生活中的掃描儀也是運用越來越廣泛了。我們辦公所以的掃描儀,一般就是獨立的或者一體機帶有掃描的功能(一體機,就是把列印機、掃描儀、傳真等功能集合到一台設備上面的機器)。其實他們的安裝方法都是大同小異的,我們這里介紹獨立掃描儀的安裝。
2、在我的電腦裡面,打開控制面板。找到"掃描儀和照相機「,雙擊,進入掃描儀的窗口
3、點擊」添加圖像處理設備「,進入安裝掃描儀的向導。
4、這里的選擇你安裝的掃描儀品牌和型號。
5、這里需要注意了,這個埠是你掃描儀的鏈接埠,不能選擇錯誤。如果你選擇錯誤了,下一步使用的時候就出問題了。如果你實在不清楚是什麼,那麼建議你選擇自動檢測吧。
6、下面,直接點擊」下一步「,跟隨向導,直到安裝完成。
1.打開掃描儀開關時,掃描儀發出異常響聲。
這是因為有些型號的掃描儀有鎖,其目的是為了鎖緊鏡組,防止運輸中震動,因此在打開掃描儀電源開關前應先將鎖打開。
2.掃描儀接電後沒有任何反應。
有些型號的掃描儀是節能型的,只有在進入掃描界面後燈管才會亮,一旦退出後會自動熄滅。
3.掃描時顯示「沒有找到掃描儀」。
此現象有可能是由於先開主機,後開掃描儀所導致,可重新啟動計算機或在設備管理中刷新即可。
4.掃描儀的解析度與列印機的解析度是否是一個概念?應該怎樣根據掃描儀的解析度選購列印機?
掃描儀的解析度的單位嚴格定義應當是ppi,而不是dpi。ppi是指每英寸的pixel數,對於掃描儀來說,每一pixel不是0或1這樣簡單的描述關系,而是24bit、 36bit或CMYK(1004)的描述。列印機的解析度的dpi中的d是指英文中的dot,每一個dot沒有深淺之分,只是0或1的概念,而對於掃描儀來說,1個pixel需要若干個4種dot(CMYK)來描述,即一點的色彩由不同的dot的`疏密程度來決定。所以掃描儀的dpi與列印機的dpi概念不同。用1440dpi的列印機輸出1:l的圖像,掃描時用100-150dpi左右的掃描即可。
5.掃描儀在掃描時出現「硬碟空間不夠或內存不足」的提示。
首先,確認硬碟及內存是否夠,若空間很大,請檢查您設定的掃描解析度是否太大造成文件數據量過大。
6. 掃描使噪音奇大。
拆開機器蓋子,找一些縫紉機油滴在衛生紙上將鏡組兩條軌道上的油垢擦凈,再將縫紉機油滴在傳動齒輪組及皮帶兩端的軸承上(注意油量適中),最後適當調整皮帶的松緊。
7. 掃描時間過長。
檢查硬碟剩餘容量,將硬碟空間最佳化,先刪除無用的TMP文檔,做Scandisk,再做Defrag或Speed Disk。請注意:如果最終實際掃描解析度的設定,高於掃描儀的光學解析度,則掃描速度會變慢,這是正常現象。
1.網上下載驅動程序並安裝,要知道掃描儀的型號,一般掃描儀的型號都在機身的側面或者正面寫著;
2.下載驅動搜索掃描儀驅動程序,點擊下載;
3.安裝驅動下載完成點擊」安裝「進行程序安裝,點擊「Next」;
4.安裝完成彈出的窗口點擊」finish「,即完成了掃描儀驅動程序的安裝;
第一步:下載好驅動程序軟體,運行。
第二步:接受安裝協議,下一步。
第三步:如下IP地址,下一步。
第四步:找到了設備,下一步。
第五步:等待安裝完成,桌面上出現掃描儀的圖標。
第六步:打開快捷方式 就可以掃描了。