驅動linux
1. 在linux上怎樣安裝顯卡驅動
linux安裝顯卡驅動程序:
1、網路輸入nvidia or amd 找到官網
2、在官網中找到顯卡驅動程序(包括顯卡型號、操作系統位數)
3、點擊搜索、進入下載頁面。但是有時候會出現網頁。可能因為31M太大,網頁會出現未能響應的情況。所以在點前一個按鈕的時候可以選擇右鍵。使用迅雷下載連接
4、復制下載包到linux 目錄下面。可以用u盤考,推薦使用winSCP 工具。這個在windows和linux系統直接傳送文件還是很好用的。當然還有好用的遠程執行linux 命令的工具——putty (1-4步是在windows系統下完成的)
5、linux下切換到命令行頁面:init 3
6、執行安裝命令
[root@localhost ~] sh NVIDIA-Linux-x86-173.14.18-pkg1.run,系統彈出安裝頁面 更詳細的Linux介紹可以參考書籍《Linux就該這么學》。
2. linux如何安裝驅動
在Intel網站直接下載的Linux驅動是e1000-5.2.52.tar.gz(版本可能會有改變),這個壓縮包裡面沒有編譯好的.o的文件,需要在Linux系統下編譯之後才能使用,
因為網卡需要編譯,所以要先確認將內核源文件安裝好,下面是關於內核源文件的安裝
● Linux下添加內核源文件
1. 用rpm –qa|grep kernel-source查看是否安裝了這個包;
如果返回結果中有kernel-source-xxx(其中xxx為當前redhat的內核版本,如rhel3為2.4.21-4EL), 即已經 安裝。如無返回結果則需要安裝kernel-source包。到安裝光碟中找到kernel-source-xxx.i386.rpm,用下面命令安裝此rpm包:
2.如果安裝了用rpm -V kernel-source校驗是否有文件丟失,如果沒有輸出,表示文件完整;
3.如果有丟失用rpm -ivh --force kernel-source-xxxx...把包重新安裝一下;
這個kernel-source包,在您的RH安裝光碟中,在Redhat/RPMS中,如果以前沒有安裝過這個包,那麼用rpm -ivh kernel-source-xxxx...來安裝,如果安裝過,需要覆蓋安裝,使用rpm -ivh --force kernel-source-xxxx...這個命令強制安裝。
註:AS 4 開始,沒有kernel-source這個包了,取而代之的是kernel-dev這個包,檢查這個包有沒有安裝的方法同上
● 驅動安裝步驟:
1. 把這個tar文件拷貝到用戶自己定義的目錄中,例如:
/home/username/e1000 or /usr/local/src/e1000
2. 用tar命令解這個壓縮包:
tar zxf e1000-5.2.52.tar.gz
3. 切換到驅動的src目錄下:
cd e1000-5.2.52/src/
4. 編譯這個驅動模塊:
make
然後安裝這個模塊
make install
這個二進制元將被安裝到如下位置:
/lib/moles//kernel/drivers/net/e1000.o
以上的路徑是默認的安裝位置,在某些linux版本中可能是其他位置,具體信息可以查看在驅動的 tar壓縮包中的ldistrib.txt文件.
5. 安裝模塊:
insmod e1000 (2.6以上的版本最好使用全路徑安裝 P insmod /lib/moles//kernel/drivers/net/e1000/e1000.ko)
6. 設定網卡IP地址:
ifconfig ethx <IP_address> x是網卡介面的號
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
若多個網卡的晶元相同可以cp ifcfg-eth0 ifcfg-eth1~~~~~~
修改下裡面的drive名稱就OK
!!!!!!!!!!!!!!!!!!!
在網卡的編譯中很可能不能進行下去~這個原因除了kernel的開發包沒有安裝外還可能是由於開發環境不完全所引起的!
這時就需要你講開發環境安裝完成,最簡單的辦法就是通過 sysconfig-config-packet 安裝gcc
安裝完成後繼續執行 make ;make install
了解更多開源相關,去LUPA社區看看吧
3. linux 安裝了驅動後,怎麼運行驅動
linux的驅動一般有兩種格式,分別為:tar和rpm格式。
rpm安裝步驟:
1.將驅動程序文件bcm5700-.src.rpm復制到一個臨時目錄中,並在此目錄中運行以下命令:
rpm –ivh bcm5700-.src.rpm
2.運行以下命令切換到驅動目錄中:
cd /usr/src/redhat/SPECS/
3.此目錄中會生成一個名字為bcm5700.spec的文件,運行以下命令對驅動程序進行編譯:
rpmbuild –bb bcm5700.spec (對4.x.x版本的RPM適用)或 rpm -bb bcm5700.spec
4.運行以下命令切換到RPM目錄中:
cd /usr/src/redhat/RPMS/i386/
5.運行以下命令安裝驅動程序:
rpm –ivh bcm5700-.i386.rpm (對於Red Hat 7.2, 7.3, 2.1AS和其他包含老版本驅動的系統需要使用--force的參數,強制用新的驅動替換系統自帶的老版本驅動)
6.運行以下命令載入驅動模塊:
insmod bcm5700
7.運行kudzu命令,系統會自動搜索到硬體,進行配置即可。
或者重新啟動系統,啟動過程中系統會自動找到硬體,進行相應配置即可。
tar格式安裝步驟:
1. 將驅動程序壓縮文件bcm5700-.tar.gz復制到一個臨時目錄中,並使用以下命令解壓縮:
tar xvzf bcm5700-.tar.gz
2.構建驅動程序為運行內核可載入模塊
cd bcm5700-/src
make
3.載入測試
insmod bcm5700
4.載入驅動程序
make install
5.重新啟動系統,啟動過程中找到硬體,進行相應配置。
或者直接運行kudzu命令,系統會自動搜索到硬體,進行配置即可。
4. Linux驅動的軟體架構
Linux不是為了某單一電路板而設計的操作系統,它可以支持約30種體系結構下一定數量的硬體,因此,它的驅動架構很顯然不能像RTOS下或者無操作系統下那麼小兒科的做法。Linux設備驅動非常重視軟體的可重用和跨平台能力。譬如,如果我們寫下一個DM9000網卡的驅動,Linux的想法是這個驅動應該最好一行都不要改就可以在任何一個平台上跑起來。
#ifdef BOARD_Xxx
#define DM9000_BASE 0x100oo#define DM900o_IRQ 8
#elif defined(BOARD_YYY)#define DM9000_BASEox200oo#define DM90oo_IRo 7
#elif defined (BOARD_Z2Z)#define DM9000_BASEox3000o#define DM9o0o_IRQ9...
#endif
上述代碼主要有如下問題:
1)此段代碼看起來面目可憎,如果有100個板子,就要iflelse 100次,到了第101個板子,又得重新加ifelse。代碼進行著簡單的「復制—粘貼」,「復制—粘貼」式的簡單重復通常意味著代碼編寫者的水平很差。
2)非常難做到一個驅動支持多個設備,如果某個電路板上有兩個DM9000網卡,則DM9000_BASE這個宏就不夠用了,此時勢必要定義出來DM9000_BASE 1、DM9000_BASE 2、DM9000_IRQ 1、DM9000_IRQ 2類的宏;定義了DM9000_BASE 1、DM9000_BASE2後,如果又有第3個DM9000網卡加到板子上,前面的代碼就又不適用了。
3)依賴於make menuconfig選擇的項目來編譯內核,因此,在不同的硬體平台下要依賴於所選擇的BOARD_XXX、BOARD_YYY選項來決定代碼邏輯。這不符合ARM Linux 3.x一個映像適用於多個硬體的目標。實際上,我們可能同時選擇了BOARD_XXX、BOARD_YYY、BOARD_ZZZ。
我們按照上面的方法編寫代碼的時候,相信自己編著編著也會覺得奇怪,代碼不好。這個時候,我們有沒有辦法把設備端的信息從驅動裡面剝離出來,讓驅動以某種標准方法拿到這些平台信息呢Linux匯流排、設備和驅動模型實際上可以做到這一點,驅動就可以放之四海而皆準了。
5. linux如何載入驅動
linux操作系統下,載入驅動的方式有二:
靜態載入驅動;
動態載入驅動;
作為前者,靜態載入驅動是通過將驅動程序編譯到內核而進行的一系列配置操作;對於後者而言則是向內核注冊設備信息,從而在kernel啟動後,再通過insmod指令,關聯好主、次設備號,從而以模塊的形式進行載入的;
二者各有優點,所以應用的場合也是不一樣的;
6. linux驅動程序如何調用
驅動程序工作在
內核空間
,由內核來調用
比如某硬體的驅動程序中實現了hd_write()函數,則用戶在
用戶空間
打開這硬體的設備文件並調用
系統調用
函數write()時,內核就調用hd_write()函數。
7. LINUX 終端設備驅動
在Linux系統中,終端是一種字元型設備,它有多種類型,通常使用tty (Teletype)來簡稱各種類型的終端設備。對於嵌入式系統而言,最普遍採用的是UART (Universal Asynchronous Receiver/Transmitter)串列埠,日常生活中簡稱串口。
Linux內核中tty的層次結構它包含tty核心tty_10.c、tty或路規在n_tty.C(頭現N_11Y線路規程)和tty驅動實例xxx_tty.c,tty線路規程的工作是以特殊的方式格式化從一個用戶或者硬體收到的數據,這種格式化常常採用一個協議轉換的形式tty _io.c本身是一個標準的字元設備驅動,它對上有字元改備的職貢,買現tle_operatIonS雙貝圖效。但是tty核心層對下又定義了tty_driver的架構,這樣tty設備驅動的主體工作就變成了琪允tty_driVeT依構體中的成員,實現其中的tty_operations的成員函數,而不再是去實現file_operations這一級的工作。tty設備發送數據的流程為:tty核心從一個用戶獲取將要發送給一個tty設備的數據,tty核心將數據傳遞給tty線路規程驅動,接著數據被傳遞到tty驅動,tty驅動將數據轉換為可以發送給硬體的格式。接收數據的流程為:從tty硬體接收到的數據向上交給tty驅動,接著進入tty線路規程驅動,再進入tty核心,在這里它被一個用戶獲取。盡管一個特定的底層UART設備驅動完全可以遵循上述tty_driver的方法來設計,即定義tty_driver並實現tty_operations中的成員函數,但是鑒於串口之間的共性,Linux考慮在文件drivers'ttyliserial'serial_core.c中實現了UART設備的通用tty驅動層(我們可以稱其為串口核心層)。這樣,UART驅動的主要任務就進一步演變成了實現serial-core.c中定義的一組uart_xxx介面而不是tty_xxx介面。因此,按照面向對象的思想,可以認為tty_driver是字元設備的泛化、serial-core是tty_driver的泛化,而具體的串口驅動又是serial-core的泛化。
8. 如何編寫Linux 驅動程序
以裝載和卸載模塊為例:
1、首先輸入代碼
#include <linux/init.h>
#include <linux/mole.h>
9. linux驅動有哪些
1、將驅動程序文件bcm5700src.rpm復制到一個臨時目錄中,並在此目錄中運行以下命令;
2、運行以下命令切換到驅動目錄中;
3、此目錄中會生成一個名字為bcm5700.spec的文件,運行以下命令對驅動程序進行編譯;
4、運行以下命令切換到RPM目錄中;
5、運行以下命令安裝驅動程序;
6、運行以下命令載入驅動模塊;
7、運行kudzu命令,系統會自動搜索到硬體,進行配置即可。
linux是文件型系統,在linux中,一切皆文件,所有硬體都會在對應的目錄(/dev)下面用相應的文件表示。 文件系統的linux下面,都有對於文件與這些設備關聯的,訪問這些文件就可以訪問實際硬體。 通過訪問文件去操作硬體設備,一切都會簡單很多,不需要再調用各種復雜的介面。 直接讀文件,寫文件就可以向設備發送、接收數據。 按照讀寫存儲數據方式,我們可以把設備分為以下幾種:字元設備(character device)、塊設備(Block device)和網路設備( network interface)。
字元設備(character device):指應用程序採用字元流方式訪問的設備。這些設備節點通常為傳真、虛擬終端和串口數據機、鍵盤之類設備提供流通信服務, 它通常只支持順序訪問。字元設備在實現時,大多不使用緩存器。系統直接從設備讀取/寫入每一個字元。
塊設備(Block device):通常支持隨機存取和定址,並使用緩存器,支持mount文件系統。典型的塊設備有硬碟、SD卡、快閃記憶體等,但此類設備一般不需要自己開發,linux對此提過了大部分的驅動。
網路設備(network interface):是一種特殊設備,它並不存在於/dev下面,主要用於網路數據的收發。網路驅動同塊驅動最大的不同在於網路驅動非同步接受外界數據,而塊驅動只對內核的請求作出響應。
上述設備中,字元設備驅動程序適合於大多數簡單的硬體設備,算是各類驅動程序中最簡單的一類,一般也是從這類驅動開始學習,然後再開始學習採用IIC、SPI等通訊介面的一些設備驅動。可以基於此類驅動調試LKT和LCS系列加密晶元。注意7位IIC地址是0x28。
10. Linux輸入設備驅動
輸入設備(如按鍵、鍵盤、觸摸屏、滑鼠等)是典型的字元設備,其一般的工作機理是底層在按鍵、觸摸等動作發送時產生一個中斷(或驅動通過Timer定時查詢),然後CPU通過SPI、I-C或外部存儲器匯流排讀取鍵值、坐標等數據,並將它們放入一個緩沖區,字元設備驅動管理該緩沖區,而驅動的read ()介面讓用戶可以讀取鍵值、坐標等數據。顯然,在這些工作中,只是中斷、讀鍵值/坐標值是與設備相關的,而輸入事件的緩沖區管理以及字元設備驅動的file operations介面則對輸入設備是通用的。基於此,內核設計了輸入子系統,由核心層處理公共的工作。drivers/input/keyboardgpio_keys.c基於input架構實現了一個通用的GPIO按鍵驅動。該驅動是基於platform_driver架構的,名為「gpio-keys」。它將與硬體相關的信息(如使用的GPIO號,按下和抬起時的電平等)屏蔽在板文件platform_device的platform_data中,因此該驅動可應用於各個處理器,具有良好的跨平台性。GPIO按鍵驅動通過input_event () 、input_sync()這樣的函數來匯報按鍵事件以及同步事件。從底層的GPIO按鍵驅動可以看出,該驅動中沒有任何file_operations的動作,也沒有各種IO模型,注冊進入系統也用的是input_register_device ()這樣的與input相關的API。這是由於與Linux VFS介面的這一部分代碼全部都在drivers/input/evdev.c中實現了。