加载驱动程序driverwudfrd失败(加载驱动linux)
什么是驅(qū)動(dòng)加載程序?
Linux設(shè)備驅(qū)動(dòng)程序有兩種加載方式。一種是直接編譯進(jìn)Linux內(nèi)核,在Linux啟動(dòng)時(shí) 加載;另一種是釆用內(nèi)核模塊方式,這種模塊可動(dòng)態(tài)加載與卸載。
如果希望將新驅(qū)動(dòng)程序編譯進(jìn)內(nèi)核,需要修改內(nèi)核代碼和編譯選項(xiàng)。
linux如何加載驅(qū)動(dòng)?
linux操作系統(tǒng)下,加載驅(qū)動(dòng)的方式有兩種方法:
靜態(tài)加載驅(qū)動(dòng)。通過(guò)將驅(qū)動(dòng)程序編譯到內(nèi)核而進(jìn)行的一系列配置操作。動(dòng)態(tài)加載驅(qū)動(dòng)。是內(nèi)核注冊(cè)設(shè)備信息,從而在kernel啟動(dòng)后,再通過(guò)insmod指令,關(guān)聯(lián)好主、次設(shè)備號(hào),從而以模塊的形式進(jìn)行加載。
linux加載驅(qū)動(dòng)的兩種makefile文件?
二 Makefile文件有兩種寫法:
一種是:
# Add your debugging flag (or not) to CFLAGS
ifneq ($(KERNELRELEASE),)
obj-m := boot.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
另外一種是:
# Add your debugging flag (or not) to CFLAGS
ifneq ($(KERNELRELEASE),)
obj-m := boot.o
else
KERNELDIR ?= /usr/src/linux-headers-2.6.38-8-generic
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
比較兩者可以發(fā)現(xiàn),該兩個(gè)Makefi二 Makefile文件有兩種寫法:
一種是:
# Add your debugging flag (or not) to CFLAGS
ifneq ($(KERNELRELEASE),)
obj-m := boot.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
另外一種是:
# Add your debugging flag (or not) to CFLAGS
ifneq ($(KERNELRELEASE),)
obj-m := boot.o
else
KERNELDIR ?= /usr/src/linux-headers-2.6.38-8-generic
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
比較兩者可以發(fā)現(xiàn),該兩個(gè)Makefi二 Makefile文件有兩種寫法:
一種是:
# Add your debugging flag (or not) to CFLAGS
ifneq ($(KERNELRELEASE),)
obj-m := boot.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
另外一種是:
# Add your debugging flag (or not) to CFLAGS
ifneq ($(KERNELRELEASE),)
obj-m := boot.o
else
KERNELDIR ?= /usr/src/linux-headers-2.6.38-8-generic
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
比較兩者可以發(fā)現(xiàn),該兩個(gè)Makefile的唯一差別是KERNELDIR的不同,
le的唯一差別是KERNELDIR的不同,
le的唯一差別是KERNELDIR的不同,
linux自動(dòng)加載驅(qū)動(dòng)的原理?
Linux設(shè)備驅(qū)動(dòng)程序工作原理
Linux是Unix操作系統(tǒng)的一種變種,在Linux下編寫驅(qū)動(dòng)程序的原理和思想完全類似于其他的Unix系統(tǒng)。在Linux環(huán)境下設(shè)計(jì)驅(qū)動(dòng)程序,思想簡(jiǎn)潔,操作方便,功能也很強(qiáng)大,但是支持函數(shù)少,只能依賴kernel中的函數(shù),有些常用的操作要自己來(lái)編寫,而且調(diào)試也不方便。
系統(tǒng)調(diào)用是操作系統(tǒng)內(nèi)核和應(yīng)用程序之間的接口,設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)內(nèi)核和機(jī)器硬件之間的接口。設(shè)備驅(qū)動(dòng)程序?yàn)閼?yīng)用程序屏蔽了硬件的細(xì)節(jié),這樣在應(yīng)用程序看來(lái),硬件設(shè)備只是一個(gè)設(shè)備文件, 應(yīng)用程序可以象操作普通文件一樣對(duì)硬件設(shè)備進(jìn)行操作。設(shè)備驅(qū)動(dòng)程序是內(nèi)核的一部分,運(yùn)行在核心態(tài),它完成以下的功能:
1.對(duì)設(shè)備初始化和釋放.
2.把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù).
3.讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請(qǐng)求的數(shù)據(jù).
4.檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤.
在Linux操作系統(tǒng)下有三類主要的設(shè)備文件類型:字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)接口。字符設(shè)備和塊設(shè)備的主要區(qū)別是:在對(duì)字符設(shè)備發(fā)出讀/寫請(qǐng)求時(shí),實(shí)際的硬件I/O一般就緊接著發(fā)生了,塊設(shè)備則不然,它利用一塊系統(tǒng)內(nèi)存作緩沖區(qū),當(dāng)用戶進(jìn)程對(duì)設(shè)備請(qǐng)求能滿足用戶的要求,就返回請(qǐng)求的數(shù)據(jù),如果不能,就調(diào)用請(qǐng)求函數(shù)來(lái)進(jìn)行實(shí)際的I/O操作。塊設(shè)備是主要針對(duì)磁盤等慢速設(shè)備設(shè)計(jì)的,以免耗費(fèi)過(guò)多的CPU時(shí)間來(lái)等待。
已經(jīng)提到,用戶進(jìn)程是通過(guò)設(shè)備文件來(lái)與實(shí)際的硬件打交道。每個(gè)設(shè)備文件都有其文件屬性(c/b),表示是字符設(shè)備還是塊設(shè)備?另 外每個(gè)文件都有兩個(gè)設(shè)備號(hào),第一個(gè)是主設(shè)備號(hào),標(biāo)識(shí)驅(qū)動(dòng)程序,第二個(gè)是從設(shè)備號(hào),標(biāo)識(shí)使用同一個(gè)設(shè)備驅(qū)動(dòng)程序的不同的硬件設(shè)備,比如有兩個(gè)軟盤,就可以用 從設(shè)備號(hào)來(lái)區(qū)分他們。設(shè)備文件的的主設(shè)備號(hào)必須與設(shè)備驅(qū)動(dòng)程序在登記時(shí)申請(qǐng)的主設(shè)備號(hào)一致,否則用戶進(jìn)程將無(wú)法訪問(wèn)到驅(qū)動(dòng)程序。
最后必須提到的是,在用戶進(jìn)程調(diào)用驅(qū)動(dòng)程序時(shí),系統(tǒng)進(jìn)入核心態(tài),這時(shí)不再是搶先式調(diào)度。也就是說(shuō),系統(tǒng)必須在你的驅(qū)動(dòng)程序的子函數(shù)返回后才能進(jìn)行
由于用戶進(jìn)程是通過(guò)設(shè)備文件同硬件打交道,對(duì)設(shè)備文件的操作方式不外乎就是一些系統(tǒng)調(diào)用,如 open,read,write,close...., 注意,不是fopen, fread,但是如何把系統(tǒng)調(diào)用和驅(qū)動(dòng)程序關(guān)聯(lián)起來(lái)呢?
電腦怎樣加載驅(qū)動(dòng)程序?
NT式驅(qū)動(dòng)程序的加載1. 用DriverMonitor工具加載NT式驅(qū)動(dòng)2. 在注冊(cè)表中填寫相應(yīng)的字段,Windows對(duì)NT式驅(qū)動(dòng)程序的加載,是基于服務(wù)的方式加載的,類似于Windows服務(wù)程序的加載。
設(shè)備驅(qū)動(dòng)程序的動(dòng)態(tài)加載主要是基于服務(wù)控制程序(Service Control Manager,SCM)系統(tǒng)組件完成的。
SCM組件為Windows中運(yùn)行的組件提供許多服務(wù),例如,啟動(dòng),停止,控制等服務(wù)。服務(wù)類似于Linux中的守護(hù)進(jìn)程。編寫加載驅(qū)動(dòng)程序,主要是操作SCM組件。WDM式驅(qū)動(dòng)程序的加載和NT是驅(qū)動(dòng)程序的不同,WDM式驅(qū)動(dòng)程序不能被當(dāng)做服務(wù)程序進(jìn)行加載,因此不能靠簡(jiǎn)單的修改注冊(cè)表來(lái)進(jìn)行加載。
WDM式驅(qū)動(dòng)程序的加載需要依靠一個(gè)以INF為后綴名的文本文件來(lái)描述驅(qū)動(dòng)程序的加載過(guò)程。
WDM驅(qū)動(dòng)程序相比較NT式驅(qū)動(dòng)程序增加了即插即用的功能,因此在安裝的時(shí)候需要一個(gè)INF文件來(lái)提供支持以提供必要的信息。
總結(jié)
以上是生活随笔為你收集整理的加载驱动程序driverwudfrd失败(加载驱动linux)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: intro to JNDI
- 下一篇: ps怎么让图片局部透明(ps怎么让图片局