12.26.2006

driver, user mode, kernel mode

因為我不知道 CE 5.0 的driver 到底是在user mode還是在kernel mode,還有各個driver 是不是共用一個位址空間。所以..凡而要由 CE 6.0 的文章來看 5.0 的說明:

from : http://blogs.msdn.com/mikehall/archive/2006/09/07/745261.aspx

Windows CE 是 32-bit OS,所以定址能力是 4GB ,從 CE 1.0 到through CE 5.0 高位址 2GB 空間是給 kernel 使用, 低 2GB 則是給..memory mapped files 和切割成很多 32MB 的"slots" 給process - "core o/s" services, 包含device.exe,GWES, file system manager。
With CE 6.0 一些 core o/s services 移到 kernel space :driver manager, GWES, file system manager。
以往 CE 的device driver 都是user mode driver,到了 CE 6.0 你可以選擇是要user mode還是kernel mode.

CE 5.0 所有的driver 都是在 device.exe 中的一個instance, CE 6.0 你可以讓每個 user mode driver 有自己的process。
所以 5.0 中,所有driver 似乎共用一個memory space (pointer 不用轉換 ? ),而且都是在user mode (所以要call virtual - physical 轉換 allocate, transfer 一塊記憶體位址。

其他

Windows 的device driver 只是為了統一API,不是為了保護或管理 hardware resource。

http://www.windowsfordevices.com/articles/AT5839010990.html
Windows 的 driver 只是 DLL. DLLs 被載入 parent process 的位址空間。

parent process 可以呼叫 DLL expose 的funcion .
parent process 用 LoadLibrary( ) or LoadDriver( ) 載入DLL.
LoadDriver 載入 DLL ,同時設定DLL不會被pageout

build Device Driver Dll 和一般Dll 有什麼不同?
Device Driver 最後會被DEVICE.EXE load進入memory。

Dll 可以用DOS Toool : dumpbin 看看exports出來的function 有哪些。


http://blogs.msdn.com/ce_base/archive/2006/02/02/Inside-Windows-CE-API-Calls.aspx
說明 device.exe, service.exe, coredll.exe 也不是在kernel space。而是在所屬的process 自己的space。
device driver 由device.exe load,所以屬於 device.exe 的address space。

沒有留言: