linux驅動載入
① 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;
}
}
② Linux怎麼裝驅動
1、將驅動程序文件bcm5700src.rpm復制到一個臨時目彎虧錄中,並在此目錄中運行以下命令;
2、運行以下命令切換到驅動目錄中;
3、此目錄中會生成一個名字為bcm5700.spec的文件,運行以下命令對驅動程序進行編譯;
4、運行以下命令切換到RPM目錄中;
5、運行以下命令安裝驅動程序;
6、運行以下命令埋知神載入驅動模塊;
7、運行kudzu命令,系猛笑統會自動搜索到硬體,進行配置即可。
③ linux系統中哪個命令可以用來載入驅動程序
在2.4內核中,載入驅動命令為:insmod ,刪除模塊為:rmmod;
在2.6以上內核中,除了insmod與rmmod外,載入命令還有modprobe;
insmod與modprobe不同之處:
insmod 絕對路徑/××.o,而modprobe ××即可,不用加.ko或.o後綴,也不用加路徑;最重要的一點是:modprobe同時會載入當前模塊所依賴的其它模塊;
lsmod查看當前載入到內核中的所有驅動模塊,同時提供其它一些信息,比如其它模塊是否在使用另一個模塊。
④ Linux下編寫和載入 .ko 文件(驅動模塊文件
一、.ko 文件介紹
.ko文件是kernel object文件(內核模塊),該文件的意義就是把內核的一些功能移動到內核外邊, 需要的時候插入內核,不需要時卸載。
二、優點
(1)這樣可以縮小內核體積;
(2)使用方便。
三、.ko文件一般的用處
(1)作為一個功能模塊,需要使用時,直接插入運行就行。如在imx6上連接模擬攝像頭,先運行模擬攝像頭對應的驅動模塊 camera.ko文件,然後對應的工程執行文件運行就行。
四、使用.ko 文件
1、載入驅動模塊test.ko
(1)方法一
進入test.ko驅動模塊文件所在的目錄,然後直接 insmod test.ko
(2)方法二
將test.ko文件拷貝到/lib/mole/#uname-r#/目錄下,這里,#uname -r#意思是,在終端中輸入
uname -r後顯示的內核版本及名稱,例如mini2440中#uname-r#就是2.6.32.2-FriendlyARM。
然後 depmod(會在/lib/moles/#uname -r#/目錄下生成moles.dep和moles.dep.bb文件,表明模塊的依賴關系)
最後 modprobe test(注意這里無需輸入.ko後綴) 即可
註:兩種方法的區別
modprobe和insmod類似,都是用來動態載入驅動模塊的,區別在於modprobe可以解決load mole時的依賴關系,它是通過/lib/moles/#uname -r/moles.dep(.bb)文件來查找依賴關系的;而insmod不能解決依賴問題。也就是說,如果你確定你要載入的驅動模塊不依賴其他驅動模塊的話,既可以insmod也可以modprobe,當然insmod可以在任何目錄下執行,更方便一些。而如果你要載入的驅動模塊還依賴其他ko驅動模塊的話,就只能將模塊拷貝到上述的特定目錄,depmod後再modprobe。
⑤ 在LINUX中如何載入驅動網卡
顯卡安裝:
一、下載驅動程序
首先要找到顯卡for
Linux的驅動程序。現在絕大多數的3D顯卡都已有了for
Linux的驅動程序,可到各顯卡廠商的主頁或Linux的相關站點上去尋找。在安裝顯卡時,伺服器根據顯卡的情況來載入不同的顯示模塊,如果顯示模塊載入不正確,顯卡就不能正常顯示。
二、裝載磁碟驅動器
Linux需要裝載磁碟驅動器才能讀取文件。啟動Linux後,在字元界面下輸入「mount
-t
vfat
/dev/hda1
/mnt/winc」命令,將C盤裝載到Linux下。需要注意的是,如果下載的是壓縮文件,選擇的是在Linux下解壓,就得先進行裝載磁碟驅動器這一步,再進行文件的解壓縮。
三、拷貝文件
將XF86_SVGA文件拷貝到/usr/X11R6/bin目錄下。注意,這是針對Red
Hat版本來說,其它版本的路徑不一定相同。「cp
/mnt/winc/win98/TEMP/XF86_SVGA
/usr/X11R6/bin」(根據自己的情況靈活掌握,關鍵是路徑一定要正確,還要分清字母的大小寫)。如果系統提示有同名文件,問是否覆蓋,一定要選擇「y」。這些舊文件可能是以前安裝顯卡時載入的,沒有實際用處。在輸入文件名的時候,輸完XF86後按一下Tab鍵,再接著輸SVGA,下劃線_就可以出來了,按鍵盤上的下劃線鍵是沒用的,切記。
四、配置顯卡
文件拷貝完成後,輸入Xconfigurator,啟動顯卡配置程序。我在顯卡列表中仍然沒有找到Trident
Blade
3D,於是選最後一個選項「Unlist」,然後選擇載入的顯示模塊為SVGA,再選擇顯示器型號、顯存大小、刷新頻率
總結:在Linux下安裝顯卡驅動程序,首先要下載顯卡支持Linux的驅動程序,再將其拷貝到/usr/X11R6/bin目錄下,然後啟動顯卡配置程序進行配置即可。
網卡、音效卡等驅動安裝可以依此類推
⑥ 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