在本節中,我們將學習驅動層的記憶體管理,介紹記憶體管理中常用的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...