在KernelIoControl加一个DEBUGLED分支,原以为很简单
。
首先定义一个全局变量g_pGPIOReg,在DllMain的case DLL_PROCESS_ATTACH 分支调用VirtualAlloc、VirtualCopy 申请虚拟内存和物理内存定位初始化g_pGPIOReg指针,在DLL_PROCESS_ATTACH 分支 调用VirtualFree释放内存。在IOControl 里面加个分支case IOCTL_DEBUGLED: 点灯。
思路很清晰,代码编译也没问题
,在APP里面调用希望之灯却始终不亮
。难道是VirtualCopy不支持配置寄存器的物理地址
,在网上搜了一下终于看到了曙光了
,VirtualCopy是以页为单位来申请在传递committed memory要除以256也就是右移8位,MSDN 里面这样解释:
PAGE_PHYSICAL
Used to map a physical memory region. When using this flag, divide the physical address, that is, lpvSrc, by 256. PAGE_PHYSICAL must only be used for memory not known to the kernel.
E文不是很懂
大概意思和上面说的差不多,移位一下从新Build And Sysgen oalioctrl 下载内核,运行APP搞定
。
总结还是基础没扎实,调这个花去了近一天的时间。建议以后对不熟悉的API还是多看看MSDN解释避免再出现类似的问题,不要把时间白白的浪费在调试上。磨刀不负砍,呵呵。
在KernelIoControl加DEBUGLED分支
最新推荐文章于 2018-02-23 17:08:27 发布
本文记录了作者在KernelIoControl中加入DEBUGLED分支的过程。通过解决VirtualCopy配置寄存器物理地址的问题,成功实现了点亮调试指示灯的功能。文章强调了熟悉API的重要性。
。
,在APP里面调用希望之灯却始终不亮
。难道是VirtualCopy不支持配置寄存器的物理地址
,在网上搜了一下终于看到了曙光了
,VirtualCopy是以页为单位来申请在传递committed
memory要除以256也就是右移8位,MSDN 里面这样解释:
。
1248

被折叠的 条评论
为什么被折叠?



