當前位置:首頁 » 操作系統 » linux自動載入驅動

linux自動載入驅動

發布時間: 2022-12-18 17:41:24

linux如何載入驅動

linux操作系統下,載入驅動的方式有二:

  1. 靜態載入驅動;

  2. 動態載入驅動;

作為前者,靜態載入驅動是通過將驅動程序編譯到內核而進行的一系列配置操作;對於後者而言則是向內核注冊設備信息,從而在kernel啟動後,再通過insmod指令,關聯好主、次設備號,從而以模塊的形式進行載入的;

二者各有優點,所以應用的場合也是不一樣的;

Ⅱ Linux驅動程序有幾種載入方式以及它們之間的區別

linux關於匯流排、設備、驅動的注冊順序
設備掛接到匯流排上時,與匯流排上的所有驅動進行匹配(用bus_type.match進行匹配),
如果匹配成功,則調用bus_type.probe或者driver.probe初始化該設備,掛接到匯流排上
如果匹配失敗,則只是將該設備掛接到匯流排上。
驅動掛接到匯流排上時,與匯流排上的所有設備進行匹配(用bus_type.match進行匹配),
如果匹配成功,則調用bus_type.probe或者driver.probe初始化該設備;掛接到匯流排上
如果匹配失敗,則只是將該驅動掛接到匯流排上。
需要重點關注的是匯流排的匹配函數match(),驅動的初始化函數probe()
1.
platform_bus_type--匯流排先被kenrel注冊。
2.
系統初始化過程中調用platform_add_devices或者platform_device_register,將平台設備(platform
devices)注冊到平台匯流排中(platform_bus_type)
3.
平台驅動(platform
driver)與平台設備(platform
device)的關聯是在platform_driver_register或者driver_register中實現,一般這個函數在驅動的初始化過程調用。
通過這三步,就將平台匯流排,設備,驅動關聯起來。
1.
platform
bus先被kenrel注冊。
------------------------------------------------------
do_basic_setup()
-->-driver_init()
-->-platform_bus_init()-->bus_register()
2.
系統初始化過程中調用platform_add_devices或者platform_device_register,將平台設備(platform
devices)注冊到平台匯流排中(platform_bus_type)
------------------------------------------------------
系統啟動階段,匯流排的驅動鏈表還是空的,所以啟動階段的platform_add_devices()只負責將設備添加到匯流排的設備鏈表上。

Ⅲ linux系統怎麼載入raid驅動

一般情況想常用的伺服器,ibm hp dell等,linux系統都會內置raid卡允動的,不需要自己安裝驅動,至少我是很少碰見要裝驅動的情況。如果發現安裝時認不到硬碟。可以按照以下官方說明來安裝驅動。有問題可以在上班時間HI我。都在線。

RHEL5, unlike previous RHEL version, requires additional steps for installing the OS onto an Intel(R) Embedded Server RAID Technology volume.
1) Create a RAID array using the Intel Embedded Server RAID Technology II RAID BIOS Configuration Utility.
2) Boot your system using RHEL disc one.
3) At boot prompt type 「linux nostorage」
4) Proceed with the installation and you will see a screen which provides you with ?Add device? button.
5) Click 「Add Device」, a list of all drivers will appear
6) Press F2 to select driver from floppy
7) Insert the floppy with the Installer DUD image
8 ) Select device that corresponds to the floppy drive (sda in case of USB floppy)
9) After the driver is loaded the list of all drivers will appear again
10) Scroll down the driver list and select. Update megaide driver? in the list
11) Click OK
12) The driver will be loaded and the list of detected devices will appear
13) Click Done
14) Complete installation with RHEL CD

Ⅳ 如何在linux下安裝網卡驅動

一、查看網卡型號和機器位數

1、查看網卡型號

linux系統下通過以下命令,可以查看當前的網卡驅動信息;

[box color="white" icon="none"]

[root@localhost zhangy]# lspci |grep -i eth

03:00.0 Ethernet controller: Realtek Semiconctor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 06)

[/box]

2、查看機器位數

驅動程序是要區分系統是32位系統還是64位系統的, 所以通過以下linux命令,就可以知道操作系統的位數了;

[box color="white" icon="none"]

[root@localhost ~]# uname -a

Linux localhost.localdomain 2.6.18-308.13.1.el5PAE #1 SMP Tue Aug 21 17:50:26 EDT 2012 i686 i686 i386 GNU/Linux

[/box]

下載前先看一下你的網卡驅動,如果是最新的就不用在重新裝了。

[box color="white" icon="none"]

[root@localhost zhangy]# ethtool -i eth0

driver: r8169

version: 2.3LK-1-NAPI

firmware-version:

bus-info: 0000:03:00.0

[/box]

RTL8111/8168B就是網卡的型號,這樣你可以網卡的型號來找一下網卡驅動的官方網站,然後下載最新的網卡驅動,驅動分64位和32位的,i386,i686是32位的機器,x86_64表示是64位的機器,不要選錯驅動了。

二、下載驅動,並安裝

1、解壓

[box color="white" icon="none"]

[root@localhost download]# tar jxvf r8168-8.032.00.tar.bz2

[/box]

2、安裝

[box color="white" icon="none"]

[root@localhost r8168-8.032.00]# make && make install

[/box]

如果報以下錯誤

make -C /lib/moles/2.6.18-308.8.2.el5PAE/build SUBDIRS=/home/zhangy/r8168-8.032.00/src INSTALL_MOD_DIR=kernel/drivers/net moles_install

make: *** /lib/moles/2.6.18-308.8.2.el5PAE/build: 沒有那個文件或目錄。 停止。

make: *** [install] 錯誤 2

說明你kernel源碼沒有安裝。安裝kernel源碼

[box color="white" icon="none"]

[root@localhost r8168-8.032.00]# yum install kernel-xen kernel-xen-devel kernel

> kernel-PAE kernel-PAE-devel kernel-devel kernel-headers

[/box]

安裝完以後,一定要重啟機器。不然下面操作就過不去了,會報FATAL: Mole r8168 not found.

[box color="white" icon="none"]

[root@localhost r8168-8.032.00]# depmod -a

[root@localhost r8168-8.032.00]# modprobe r8168

[/box]

編輯配置文件/etc/modprobe.cof,如果以前沒有添加alias eth0 r8168,如果已經有了修改一下成alias eth0 r8168。

查一下驅動是不是載入了,如果有以下內容說明驅動安裝成功了。

[box color="white" icon="none"]

[root@localhost r8168-8.032.00]# lsmod |grep r8168

r8168 231132 0

[/box]

必須重新啟動一下機器,用ethtool查看驅動才會改變,不然還是老樣子。下面是新的驅動。

[box color="white" icon="none"]

[root@localhost ~]# ethtool -i eth0

driver: r8168

version: 8.032.00-NAPI

firmware-version:

bus-info: 0000:02:00.0

[/box]

Ⅳ linux系統中哪個命令可以用來載入驅動程序

在2.4內核中,載入驅動命令為:insmod ,刪除模塊為:rmmod;
在2.6以上內核中,除了insmod與rmmod外,載入命令還有modprobe;
insmod與modprobe不同之處:
insmod 絕對路徑/××.o,而modprobe ××即可,不用加.ko或.o後綴,也不用加路徑;最重要的一點是:modprobe同時會載入當前模塊所依賴的其它模塊;
lsmod查看當前載入到內核中的所有驅動模塊,同時提供其它一些信息,比如其它模塊是否在使用另一個模塊。

Ⅵ linux中動態載入驅動的過程是怎麼樣的,能給個詳細的嗎

介紹個動態載入模塊的過程

在該驅動中,我們假設對鍵盤的獲取是以0.2s為周期執行。源代碼如下

static struct timer_list timer;///////我們定義的定時器,也許你會問timer_list是什麼來的,其實一看名稱就應該就知道了,而為什麼要用到list那麼多定時器呢?其實在linux中還有很多相同的定義,比如說信號,我們定義的也是信號集,你可以定義該list是一個元素的,也可以是多個的。所以對於 timer_list就可以這樣描述:在未來某一個特定時刻執行某一系列特定任務的功能。下面我們還會給出內核中timer_list的具體描述,^_^ 好像我的話又說多了

static int Keypad_starttimer(void)
{
init_timer(&timer);//初始化定時器結構
timer.function=Keypad_timer;//超時服務程序
timer.expires=jiffies+20;//當前時刻加0.2s
add_timer(&timer);
return 0;
}
///超時服務程序
static void Keypad_timer(unsigned long data)
{
read_xy();
}

/////////接下來說下timer-list這個數據結構,如果你不感興趣的話可以跳過,該結構在include\linux\timer.h中定義
struct timer_list
{
struct list_head entry;
unsigned long expries;
spinlock_t lock;
unsigned long magic;
void (*function)(unsigned long);
unsigner long data;
struct tvec_t_base_s *base;
}

七.利用等待隊列實現阻塞型I\O

在用戶程序執行讀操作的時候有可能尚且沒有數據可以讀取,為此需要讓read操作等待,直到有數據可以讀取,這就是阻塞型i\o,阻塞型io可以通過使用進程休眠方法實現。在無數據可以讀取的時候,採用等待隊列讓進程休眠,直到有數據到達的時候才喚醒進程完成數據的讀操作。

在本驅動中的read,若循環隊列緩沖區中沒有數據,則進程進入休眠態,定時器函數每隔0.2s讀取鍵值一次,將按鍵狀態放入緩沖並且適時喚醒進程讀取數據。

等待隊列的使用流程如下:

1.聲明一個等待隊列

2.把當前進程加入到等待隊列中

3.把進程的狀態設置為TASK_INTERRUPTIBLE或TASK_UNINTERRUPTIBLE;

4.調用schele,以讓出cpu

5.檢測所需要的資源是否可用,若是,把當前進程從等待隊列中刪除,否則轉3循環

接下來我們在對read中有關等待隊列阻塞實現做具體的解釋

static ssize_t Keypad_read(struct file *filp,char *buf,ssize_t count,loff_t *l)
{
DECLEARE_WAITQUEUE(wait,current);//聲明等待隊列,將當前進程加入到等待隊列中
KEY_EVENT t;
ulong out_buf[2];
if(head==tail)//當前循環隊列中沒有數據可以讀取
{
if(filp->f_flags & O_NONBLOCK)//假如用戶採用的是非堵塞方式讀取
return _EAGAIN;
add_wait_queue(&queue,&wait);//將當前進程加入等待隊列
current->state=TASK_INTERRUPTIBLE;//設置當前進程的狀態
while((head==tail)&&!signal_pending(current))//假若還沒有數據到循環隊列並且當前進程沒有受到信號(該類信號具體來說是未決的休眠)
{
shele();//進程調度
current->state=TASK_INTERRUPTIBLE;
}
current->state=TASK_RUNNING;//該進程恢復執行
remove_wait_queue(&queue,&wait);//移出等待隊列
if(head==tail)
return count;
t=get_data();//調用get_data()函數,得到緩沖區中的數據,下面將給予詳細的 介紹
out_buf[0]=t.status;
out_buf[1]=t.click;
_to_user(buf,&out_buf,sizeof(out_buf));//將得到的鍵值拷貝到用戶數據區
return count;
}
}

熱點內容
郵政登陸密碼是什麼意思 發布:2025-07-15 01:53:23 瀏覽:229
演算法與程序設計vb 發布:2025-07-15 01:50:39 瀏覽:719
什麼是測試腳本 發布:2025-07-15 01:44:58 瀏覽:514
商湯科技存儲負責人 發布:2025-07-15 01:24:21 瀏覽:252
文件夾如何批量替換文件名 發布:2025-07-15 01:19:15 瀏覽:68
ftp上傳網頁 發布:2025-07-15 01:13:09 瀏覽:182
音樂文件夾圖標 發布:2025-07-15 01:03:41 瀏覽:495
安卓機怎麼反向充電 發布:2025-07-15 01:03:40 瀏覽:501
電腦使用華為雲伺服器 發布:2025-07-15 00:48:10 瀏覽:534
中考應該如何排解壓力 發布:2025-07-15 00:17:54 瀏覽:363