日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

windows linux 融合,Windows和Linux的设备驱动框架的对比融合研究

發布時間:2024/9/19 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的设备驱动框架的对比融合研究的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。