當前位置:首頁 » 編程軟體 » linux下怎麼編譯安裝驅動

linux下怎麼編譯安裝驅動

發布時間: 2022-05-05 22:42:34

① 怎麼編譯目標機linux設備驅動

在宿主機上安裝開發工具和下載linux源碼(要求版本號和目標機上的linux內核版本一致)。開發工具主要有gcc、gdb、make等,這些工具在redhat或fc中默認就安裝了,在debian或Ubuntu中可以通過下面這個命令安裝:
apt-get install build-essential
linux源碼可以通過以下幾種途徑獲得:
將源碼解壓到/usr/src/目錄後,進入linux-source-(版本號)目錄中執行下面幾個命令:
make oldconfig
make prepare
make scripts
直接去www.kernel.org下載
通過包管理工具下載源碼,在debian和Ubuntu中可以通過下面這個命令下載,
apt-get install linux-source-(版本號) ,下載後的文件在/usr/src目錄中,解壓到該目錄即可
編寫Linux驅動程序,以一個最簡單的hello.c為例,hello.c的內容如下:

#include "linux/init.h"
#include "linux/mole.h"

static int hello_init(void)
{
printk(KERN_ALERT "Hello World linux_driver_mole\n");
return 0;
}

static void hello_exit(void)
{
printk(KERN_ALERT "Goodbey linux_driver_mole\n");
}

mole_init(hello_init);
mole_exit(hello_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("lpj");

寫Makefile文件,一個示例如下,裡面各項參數根據實際情況更改:

#sample driver mole
obj-m := hello.o
KDIR = /usr/src/linux-source-2.6.24/

all:
$(MAKE) -C $(KDIR) M=$(PWD)

.PHONY:clean
clean:
rm -f *.mod.c *.mod.o *.ko *.o *.tmp_versions

編譯,在hello.c和Makefile所在目錄下執行 make 即可,編譯後在當前目錄生成hello.ko文件
載入並測試:載入使用insmod或modprobe命令來實現,如在當前路徑執行如下代碼:
insmod hello.ko 或 modprobe hello
注意,如果在虛擬終端載入內核的話,將看不到內核列印信息,因為內核列印信息不會輸出到虛擬終端,而是輸出到/proc/kmsg文件中,所以可以通過以下方式查看內核信息:
cat /proc/kmsg 會一直列印,需要Ctrl-C手動終止
dmesg 或 dmesg | tail -N ,N為一數字,表示顯示最後N行
卸載:使用rmmod命令卸載驅動模塊,如 rmmod hello

② 如何編譯一個linux下的驅動模塊

首先,我們要了解一下模塊是如何別被構造的。模塊的構造過程與用戶空間
的應用程序的構造過程有顯著不同;內核是一個大的、獨立的程序
,
對於它的各
個部分如何組合在一起有詳細的明確的要求。
Linux2.6
內核的構造過程也與以
前版本的內核構造過程不同;
新的構造系統用起來更加簡單,
並且可產生更加正
確的結果
,
但是它看起來和先前的方法有很大不同。內核的構造系統非常復雜
,
我們所看到的只是它的一小部分。
如果讀者想了解更深入的細節,
則應閱讀在內
核源碼中的
Document/kbuild
目錄下的文件。

在構造內核模塊之前,
有一些先決條件首先應該得到滿足。
首先,
讀者要保證你
有適合於你的內核版本的編譯器、模塊工具
,
以及其他必要工具。在內核文檔目
錄下的文件
Documentation/Changes
里列出了需要的工具版本;
在開始構造內
核前,
讀者有必要查看該文件,
並確保已安裝了正確的工具。
如果用錯誤的工具
版本來構造一個內核
(
及其模塊
)
,可能導致許多奇怪的問題。另外也要注意
,
使
用太新版本的編譯器偶爾可能也會導致問題。

一旦做好了上面的准備工作之後
,
其實給自己的模塊創建一個
makefile
則非常
簡單。實際上
,
對於本章前面展示的
" hello world"
例子
,
下面一行就夠了
:
obj-m := hello.o
如果讀者熟悉
make

但是對
Linux2.6
內核構造系統不熟悉的話
,
可能奇怪這個
makefile
如何工作。畢竟上面的這一行不是一個傳統的
makefile
的樣子。問
題的答案當然是內核構造系統處理了餘下的工作。上面的賦值語句
(
它利用了由
GNU make
提供的擴展語法
)
說明有一個模塊要從目標文件
hello.o
構造,而從
該目標文件構造的模塊名稱為
hello.ko.
如果我們想由兩個源文件
(
比如
file1.c

file2.c )
構造出一個名稱為
mole.ko
的模塊
,
則正確的
makefile
可如下編寫
:
obj-m := mole.o
mole-objs := file1.o file2.o
為了讓上面這種類型的
makefile
文件正常工作
,
必須在大的內核構造系統環境
中調用他們。假設讀者的內核源碼數位於
~/kernel-2.6
目錄
,
用來建立你的模
塊的
make
命令
(
在包含模塊源代碼和
makefile
的目錄下鍵入
)
應該是
:
make -C ~/kernel-2.6 M=`pwd` moles
這個命令首先是改變目錄到用
-C
選項指定的位置
(
即內核源代碼目錄
)
,其中保
存有內核的頂層
makefile
文件。這個
M=
選項使
makefile
在構造
moles

標前
,
返回到模塊源碼目錄。
然後,
moles
目標指向
obj-m
變數中設定的模塊,
在上面的例子里,我們將該變數設置成了
mole.o


上面這樣的
make
命令對於多個文件的編譯顯得不是很方便
,
於是內核開發者就
開發了一種
makefile
方式
,
這種方式使得內核樹之外的模塊構造變得更加容易。
代碼清單
1.4
展示了
makefile
的編寫方法:

代碼清單
1.4 makefile
ifeq ($(KERNELRELEASE),)

KERNELDIR ?= /source/linux-2.6.13
PWD := $(shell pwd)

moles:
$(MAKE) -C $(KERNELDIR) M=$(PWD) moles

moles_install:
$(MAKE) -C $(KERNELDIR) M=$(PWD) moles_install

clean:
rm -rf *.o *~ core .depend .*. *.ko *.mod.c .tmp_versions

.PHONY: moles moles_install clean

else
obj-m := hello.o
endif
我們再次看到了擴展的
GNU
make
語法在起作用。在一個典型的構造過程中,這

makefile
將被讀取兩次。當從命令行中調用這個
makefile ,
它注意到
KERNELRELEASE
變數尚未設置。我們可以注意到,已安裝的模塊目錄中存在一
個符號連接,
它指向內核的構造樹,
這樣這個
makefile
就可以定位內核的源代
碼目錄。如果讀者時間運行的內核並不是要構造的內核,則可以在命令行提供
KERNELDIR=
選項或者設置
KERNELDIR
環境變數
,
或者修改
makefile
中設置
KERNELDIR
的那一行。在找到內核源碼樹
,
這個
makefile
會調用
default:


,
這個目標使用先前描述過的方法第二次運行
make
命令
(
注意,在這個
makefile

make
命令被參數化成
$(MAKE))
,以便運行內核構造系統。在第二
次讀取
makefile
時,
它設置了
obj-m,
而內核的
makefile
負責真正構造模塊。

這種構造模塊的機制看起來很繁瑣,可是,一旦我們習慣了使用這種機制
,
則會
欣賞內核構造系統帶給我們的便利。需要注意的是
,
上面
makefile
並不完整,
一個真正的
makefile
應包含通常用來清除無用文件的目標
,
安裝模塊的目標等
等。一個完整的例子可以參考例子代碼目錄的
makefile

③ Ubuntu linux如何安裝硬體驅動

inux的驅動一般有兩種格式,分別為: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命令,系統會自動搜索到硬體,進行配置即可。

④ 高手進階:Linux操作系統驅動編譯與運行

一、手工載入測試
1、insmod
./key_test.ko
載入驅動模塊到內核
2、cat
/proc/moles
|grep
key_test
查看key_test模塊在內核中的地址,不加過濾器可以看到全部載入的模塊。
3、lsmod
顯示模塊,這時可以看到所有的模塊名字,後面跟的是主設備號和次設備號。
4、rmmod
key_test
把模塊從內核里卸載。
二、動態載入
1、把key_test.c源代碼放到內核源代碼的/drives/char/下,因為這是屬字元型驅動,放在這編譯到zImage中。
2、這時我們make
menuconfig
編譯內核是看不到key_test這個選項的。我們把這個選項寫到菜單裡面才行。在內核源代碼的/drives/char/下有一個Kconfig文件,打開
(1)
vi
Kconfig
加幾行到裡面:
config
ConFig_key_test
bool
"key
test"
//前面那個bool換成tristate就是支持模塊化編譯
上面句是在make
menuconfig時會出現key
test這個選項在drive/char子菜單下,bool前面是TAB鍵
------help----------
這句是出現在菜單選項下面的
This
key
test
help.
這句是你的驅動的說明會出現在help裡面
(2)在/drivers/char目錄下的Makefile文件里加上一句:
obj-$(CONFIG_key_test)
+=
key_test.o
上面這句是讓Make時把key_test編譯到內核中.
(3)
make
menuconfig
把key_test選項選取上
(4)
make
zImage
生成zImage文件,重啟動載入這個新編的內核。
3、lsmod就能看到key_test了,但是還不能用,沒有介面,也就是/dev下面沒有
4、mknod
/dev/key_test
c
121
0
這是創建設備到/dev下,使普通程序可以調用了,121是在源代碼里定義的它的主設備號,0是次設備號。
5、cat
/dev/key_test
這是相當於open這個設備了,或者寫一個程序直接調用open、write等函數。
fd=("/dev/key_test",ORW);

⑤ 在linux系統中如何安裝各種硬體的驅動

看格式,如果是自己開發的驅動,就是****.ko格式
使用如下指令掛載:
insmod ****.ko
如果是官方提供的,常見有兩種,一種是可執行的(在linux終端下綠色,用ll看,該文件有x屬性),直接到那個目錄下執行
./****.bin
如果是gz,很可能需要編譯和安裝,那個就是
./configure
make
make install

⑥ 如何編寫Linux 驅動程序

以裝載和卸載模塊為例:

1、首先輸入代碼

#include <linux/init.h>

#include <linux/mole.h>

⑦ linux系統下安裝usb網卡驅動圖文

  1. 確認usb-wifi設備型號 , 根據確認結果選擇驅動信息。

  2. 安裝驅動 mt7601u , 如果已經自帶跳過此步驟

  3. 配置驅動啟動後自動載入。

  4. 重啟驗證是否成功的自動載入驅動模塊。

  5. 確認usb-wifi設備型號 , 根據確認結果選擇驅動信息。


## 初始USB接入時載入顯示

lsusb| grep Ralink

Bus 001 Device 003: ID 148f:2878 Ralink Technology, Corp.

## lsusb執行後顯示信息中有 usb-wifi設備時繼續執行如下命令,進行模式切換(對於存在多模式設備可以正確顯示出wifi設備的真實型號)

usb_modeswitch -KW -v 148f -p 2878

## 模式切換後載入顯示

lsusb| grep Ralink

Bus 001 Device 003: ID 148f:7601 Ralink Technology, Corp.


可以看到型號為 7601 ,據此我們選擇 mt7601u 驅動進行『安裝。


安裝驅動 mt7601u , 如果已經自帶跳過此步驟

方法1:有可能系統內核已經集成好了你需要的驅動模塊,只需要手工載入以下驗證是否有效,如果無效再選擇方法2.

方法2:github 搜索型號的驅動源碼,手動編譯安裝 。


安裝完畢後,需要配置下 wlan0 的配置信息, 創建一個ifcfg-wlan0文件(如果使用的是 NetworkManager 服務可能不需要配置就可以使用了)


$ cat /etc/sysconfig/network/ifcfg-wlan0

BOOTPROTO='dhcp'

BROADCAST=''

DHCLIENT_SET_DEFAULT_ROUTE='yes'

ETHTOOL_OPTIONS=''

IPADDR=''

MTU=''

NAME=''

NETMASK=''

NETWORK=''

REMOTE_IPADDR=''

STARTMODE='auto'

WIRELESS_AP=''

WIRELESS_AP_SCANMODE='1'

WIRELESS_AUTH_MODE='psk'

WIRELESS_BITRATE='auto'

WIRELESS_CA_CERT=''

WIRELESS_CHANNEL=''

WIRELESS_CLIENT_CERT=''

WIRELESS_CLIENT_KEY=''

WIRELESS_CLIENT_KEY_PASSWORD=''

WIRELESS_DEFAULT_KEY='0'

WIRELESS_EAP_AUTH=''

WIRELESS_EAP_MODE=''

WIRELESS_ESSID='CPE_05010'

WIRELESS_FREQUENCY=''

WIRELESS_KEY=''

WIRELESS_KEY_0=''

WIRELESS_KEY_1=''

WIRELESS_KEY_2=''

WIRELESS_KEY_3=''

WIRELESS_KEY_LENGTH='128'

WIRELESS_MODE='Managed'

WIRELESS_NICK=''

WIRELESS_NWID=''

WIRELESS_PEAP_VERSION=''

WIRELESS_POWER='no'

WIRELESS_WPA_ANONID=''

WIRELESS_WPA_IDENTITY=''

WIRELESS_WPA_PASSWORD=''

WIRELESS_WPA_PSK='Abcd1234'

配置驅動啟動後自動載入。

具體配置方法可以參考 man moles-load.d 信息可以詳細理解。


創建一個 mt7601u.conf 文件, 內容如下


# echo "mt7601u" > /etc/moles-load.d/mt7601u.conf

# cat /etc/moles-load.d/mt7601u.conf

mt7601u

重啟驗證是否成功的自動載入驅動模塊。

⑧ 如何通過命令行為Linux安裝驅動程序

在Linux下安裝驅動程序的實施步驟如下:
第一步:首先使用lsmod|grep "*" *為你需要查看的驅動模塊;
第二步:首先去相應設備提供商官網下載相應的Linux版本驅動程序包,可以是rpm包也可以是源碼包,下載完畢後使用rpm或者make命令進行編譯安裝;
第三步:使用insmod或者modprobe將安裝後的模塊載入到內核中去即完成了驅動程序的安裝。
最後一步在載入模塊時主機維護人員可能會碰到成功安裝後無法載入到內核的問題,現我詳細介紹一下inmod和modprobe的用法。
1)modprobe:
在掛載某個內核模塊的同時,這個模塊所依賴的模塊也被同時掛載;這是於insmod掛載模塊有區別的地方。當然modprobe也有列出內核所有模塊的功能modprobe -l,還有移除模塊的功能modprobe -r 模塊名稱;
2)insmod:
insmod掛載模塊這個工具和modprobe有點類似,但功能上沒有modprobe強,modprobe在掛載模塊是不用指定模塊文件的路徑,也不用帶文件的後綴.o 或.ko;而insmod需要的是模塊的所在目錄的絕對路徑,並且一定要帶有模塊文件名後綴。
在以後管理員使用modprobe工具無法載入安裝的模塊時用建議可以使用insmod或者modprobe -f進行強制載入。

⑨ 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社區看看吧

⑩ LINUX下怎麼安裝各種驅動。(已經解決,謝謝)

通常的硬體驅動安裝盤自帶,安裝時會檢測硬體,然後對應安裝。特殊的硬體就要到硬體商的網站上下載對應當驅動程序來安裝,還不行的話,重新編譯內核。

熱點內容
安卓機微信怎麼設置紅包提醒 發布:2025-05-14 19:00:15 瀏覽:270
androidsystem許可權設置 發布:2025-05-14 18:56:02 瀏覽:970
mq腳本 發布:2025-05-14 18:45:37 瀏覽:25
仙境傳說ro解壓失敗 發布:2025-05-14 18:45:01 瀏覽:867
betweenand的用法sql 發布:2025-05-14 18:39:25 瀏覽:249
tplink攝像頭存儲卡格式化 發布:2025-05-14 18:37:08 瀏覽:346
安卓平板怎麼安裝excel的軟體 發布:2025-05-14 18:35:44 瀏覽:41
廣州數控圓弧編程實例 發布:2025-05-14 18:25:00 瀏覽:400
搭建伺服器能使用nodejs開發嗎 發布:2025-05-14 18:24:14 瀏覽:135
alook瀏覽器安卓哪個版本上網最快 發布:2025-05-14 18:22:33 瀏覽:457