windows linux 融合,Windows和Linux的设备驱动框架的对比融合研究
摘要:把驅動框架分為三層,針對各層在Windows和Linux中的實現方法的不同,對Windows和Linux的設備驅動框架進行對比研究。從接口函數,應用程序訪問驅動程序的路徑,驅動程序具體實現及安裝展開對比研究。通過對比,提煉出設備驅動框架的通用性,認清平臺的特殊性,區分出實現方法的不同,融合出一套新的分層過濾式設備節點式的驅動框架,進而推廣到其它操作系統上,以指導驅動程序的編寫。
關鍵字:Windows,Linux,驅動,對比,融合
The contrast and mix of driver framework of Windows and Linux
Li YiJun
Abstract: Divide the driver framework to three layer, Study every layer’s realization’s difference for Windows and Linux. The three layer is interface, the path from application to system, the driver’s realization. Through the contrast, get the generalization, recognize the difference of platform, distinguish the difference of the driver framework, through mix, form a new driver framework with device inode style and delamination filter style, spread to the other operation system, guide the driver developer to program correctly.
Keyword: Windows, Linux, driver, contrast, mix
文獻分類號:TP316 文獻識別碼:A
引言
從系統分為內核空間和用戶空間角度看,驅動一般分為三層(見表1)。層1為接口層,供應用程序訪問。層2為中間轉換層,負責把上層的接口函數對應到驅動程序中的具體設備函數。層3作為具體驅動程序的底層,編寫和統一接口層對應相對應的具體函數。從這三層展開對比研究,國內外對驅動框架對比研究很少,融合更少,主要是各系統有自己特色,有較大的差異性,本文給出了兩系統的異同之處,并提出了一種融合方案。
表1層1
上層為統一接口層
層2
中間層
層3
具體驅動程序的底層
1.接口函數對比
1.1Windows接口函數的具體解釋
接口函數,是供用戶操作,應用程序訪問的函數,表2為主要的接口函數。Windows主要特色為I/O管理器,I/O系統提供了設備的抽象描述,是Windows的一個子系統。系統調用先到達I/O管理器,再由I/O管理器將系統調用轉化為相對應的IRP請求包發給相應的驅動程序,見圖1,接口函數和IRP功能碼的對應關系見表2。表2中的接口函數滿足了設備描述符的建立,讀寫,關閉的過程。CreatFile負責打開一個設備,ReadFile和WriteFile負責讀寫設備,DeviceIoControl負責對設備進行一些控制操作。CloseHandle負責關閉設備。
表2windows系統的訪問接口函數
接口函數
調用號
IRP功能碼
CreatFile
0x25
IRP_MJ_CREATE
ReadFile
0xb7
IRP_MJ_READ
WriteFile
0x112
IRP_MJ_WRITE
DeviceIoControl
0x42
IRP_MJ_DEVICE_CONTROL
CloseHandle
0x19
IRP_MJ_CLOSE
linux系統的訪問接口函數
接口函數
調用號
系統調用
open
5
sys_open
read
3
sys_read
write
4
sys_write
close
6
sys_close
ioctl
54
sys_ioctl
1.2Linux接口函數的具體解釋
Linux為單內核系統,表2中的Linux接口函數為主要接口函數,接口函數通過系統調用直接訪問設備驅動,見圖2。接口函數滿足了文件描述符的建立,讀寫,關閉的過程,open打開設備,read和write讀寫設備,ioctl對設備進行一些控制操作。 Linux的接口函數形式簡單,在內核中能直接找到接口函數相應系統調用函數,名字為在接口函數之前加 sys_字符串,見表2。
1.3主要相同和不同之處
相同之處,CreatFile和open, ReadFile和read, WriteFile和write, CloseHandle和close, DeviceIoControl和ioctl這幾個操作,有類似性。read, write操作都是在用戶模式應用程序與核心模式驅動程序之間共享一段內存緩沖區的方法傳遞數據。不同之處,體現在中間層的實現方法不一樣,windows中間層為一個I/O管理器,把系統調用轉化為IRP請求包發給經過分層化的驅動程序,幾個驅動程序可以處理同一個IRP請求包,而Linux將系統調用直接傳遞給驅動程序。
2.應用程序訪問驅動程序的路徑對比
2.1Windows的訪問路徑
在HKEY_LOCAL_MACHINE的SYSTEM\CurrentControlSet\Control\Class目錄下,有設備類的鍵值,也就是命名設備,一個設備接口被一個128位的GUID唯一標識。應用程序先通過SetupDiGetClassDevs,SetupDiEnumDeviceInterfaces,SetupDiGetInterfaceDeviceDetail等函數,得到ClassGuid相對應設備的符號鏈接名,Windows用符號鏈接表示內存的設備對象,如C:符號鏈接到\Device\HarddiskVolume1,COM1符號鏈接到\Device\Serial0等。符號鏈接名作為參數調用CreateFile函數,得到設備句柄hDevice。之后其它接口函數ReadFile, WriteFile, DeviceIoControl等通過hDevice作為參數訪問具體驅動的相對應接口函數。
2.2Linux的訪問路徑
主要特色為設備節點,把設備當作文件看待,一個設備被主次設備號唯一確定,通過訪問/dev目錄下的設備文件,也就是設備的inode,得到設備類型、設備的主次設備號,從而正確訪問設備。open函數獲得文件描述符結構及結構號、設備驅動中的具體函數定位。open系統調用sys_open函數,通過sys_open->do_sys_open中的語句fd = get_unused_fd_flags(flags),得到文件描述符結構號。
通過sys_open->do_sys_open->do_flip_open->nameidata_to_filp->__dentry_open到達_dentry_open函數,通過語句f->f_op = fops_get(inode->i_fop);獲得驅動操作函數地址。之后其它接口函數read,write,ioctl通過系統調用和fd文件描述符訪問驅動程序中的操作函數。
總結
以上是生活随笔為你收集整理的windows linux 融合,Windows和Linux的设备驱动框架的对比融合研究的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么微粒贷还了款没有额度
- 下一篇: 基金的估值和净值为什么差那么大 可能这