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