菜鳥之驅動開發11

2021-08-26 04:01:13 字數 998 閱讀 2746

在本節中,我們將學習驅動層的記憶體管理,介紹記憶體管理中常用的api,並與應用層內管理api相對應。

核心中常用的記憶體管理api與應用層記憶體管理api對應關係如下:

核心api

應用層c api

說明rtlcopymemory

memcpy

記憶體拷貝

rtlcopybytes

memcpy

記憶體拷貝

rtlmovememory

memmove

記憶體移動

rtlzeromemory

memset

記憶體初始化

rtlfillmemory

memset

記憶體初始化

rtlequalmemory

memcmp

記憶體比較

exallocatepool/exallocatepoolwithtag

alloc

記憶體分配

exfreepool/exfreepoolwithtag

free

記憶體釋放

如果想在核心中運用new, delete c++的方式分配記憶體,那麼需要過載new,delete關鍵字。如下:

void * __cdecl operator new(size_t size,pool_type pooltype=pagedpool) //過載delete void __cdecl operator delete(void* pointer)

下面有乙個核心記憶體應用的例項:

void memtest() else kdprint(("111 d和s 記憶體塊不相同\n")); //清空s指標指向位址 rtlzerobytes(s,length); ulret = rtlcomparememory(d,s,length); if (ulret==length) //如果返回值 else kdprint(("222 d和s 記憶體塊不相同\n")); exfreepool(s) ; return; }

具體參看完整原始碼。

菜鳥之驅動開發7

驅動是ring0的程式 我們ring3代的程式如果想控制ring0級的功能,那麼就需要學會ring0與ring3之間的通訊。今天就開始學習驅動與應用程式之間的通訊。我們需要在驅動產現乙個加法運算,然後我們在應用程式將兩個運算數傳入到驅動層,由驅動層計算了結果返回給應用程。我們向驅動傳輸命令需要用到 ...

菜鳥之驅動開發12

在本節中,我們學習在驅動中如何操作雙向鍊錶 鍊錶的建立,初始化,遍歷,刪除。驅動中有自己的鍊錶接構,也有相專用的操作鍊錶函式,也可以用c c 中自已實現的鍊錶。驅動中的鍊錶接構是 list entry 操作鍊錶的主要api有 initializelisthead 初始化鍊錶 islistempty ...

Linux驅動開發之DRM驅動

qq群 852283276 b站 主頁 drm 驅動程式開發 開篇 drm 驅動程式開發 vkms 最簡單的drm應用程式 single buffer drm 驅動是如何建立 fb device 的 linux中的drm 介紹 linux graphic dri 顯示子系統 介紹1 xilinx d...