=================================版权声明=================================
版权声明:原创文章 谢绝转载
请通过右侧公告中的“联系邮箱(wlsandwho@foxmail.com)”联系我
勿用于学术性引用。
勿用于商业出版、商业印刷、商业引用以及其他商业用途。
本文不定期修正完善。
本文链接:http://www.cnblogs.com/wlsandwho/p/4856272.html
耻辱墙:http://www.cnblogs.com/wlsandwho/p/4206472.html
=======================================================================
狠下心来买了个8G内存条(2014年还500多的万紫千红呢),又下决心做了64位系统,终于可以开(zhan)开(zhan)心(jing)心(jing)的学点东西了。
=======================================================================
硬件环境:
CPU i3-4150(勉强够用了,可有钱还得上E3,8个框框神秘加成不可小觑。)
内存 2+2+8(就是这么任性。以后还得买个8G,因为插满好评。)
硬盘 ssd+hdd
=======================================================================
软件环境:
操作系统 Windows7 64
虚拟机 VMware Workstation10.0.2 build-1744117
虚拟串口 VSPD
串口调试助手 随意
=======================================================================
防揪心,我决定全部在虚拟机里进行开发和测试。(不信邪的仁人志士可以直接使用本机电脑和一个虚拟机来做驱动开发以及相关测试。)
=======================================================================
安装虚拟串口(我用的这个)。添加串口2和串口4。务必重启电脑。
创建两个虚拟机,一个作为开发虚拟机,另一个作为测试虚拟机。各分配30G硬盘和2G内存。开发虚拟机存放在SSD,测试虚拟机存放在HDD。
为虚拟机添加串口。
在开发虚拟机里,选择串口2,发送数据。
可以在测试虚拟机里收到数据。
=======================================================================
上面仅表示串口已通可用,但是想让两个虚拟机双机调试,还得做额外的设置。
=======================================================================
将测试虚拟机设置成调试模式:
1 查看下有什么加载器
2 备份当前的加载器(以便直接进行配置,备份的那个加载器用于正常(非调试)启动。)
3 开启“调试”和“启动调试”
4 先查看下调试设置
发现使用的是串口1,波特率为115200。
因为之前用串口助手测试时,配置的是串口2,所以这里也要改一下。(我的虚拟机安装完成时,默认自带的串口1和串口3,当给虚拟机添加新的串口时,自动使用的串口2。当然串口名可以自己改,跟改盘符差不多的样子。)
5 修改调试设置
要注意的是还要同时设置波特率,不然波特率的设置就丢失了。(不信可以自己试试呀。)
6 再查看下调试设置
测试虚拟机就配置完了。
=======================================================================
下面设置开发虚拟机。
1 安装VS2013+WDK8.1或者VS2015+WDK7.1。
第一套配置的好处是微软官方页面上写的就是它,而且可以创建各种驱动项目,缺点是开始菜单下没有命令行环境等,而且跟各种书籍对不上号;第二种的配置的好处当然就是有命令行环境而且能跟当下的书籍对上号啦。
所以,我做了两个开发虚拟机,目前先用VS2015+WDK7.1的那个。
(安装WDK7.1之后还能安上WDK8.1,可是VS2015里面并没有可以用于创建驱动的项目。亲测不骗人!不知道会不会有问题。)
2 设置一下WinDbg快捷方式的目标,给它弄一些参数。
图片中“目标(T)”里的命令为:
1 "C:\Program Files\Windows Kits\8.1\Debuggers\x86\windbg.exe" -b -k com:port=2,baud=115200
如果不设置快捷方式也可以哦,只是每次都要在管理员权限的CMD里敲同一个命令行感觉并没有什么实际意义。
3 据说WinDbg要设置符号表。据说要按下Ctrl+S来输入SRV*C:\symbolcache*http://msdl.microsoft.com/download/symbols
开发虚拟机也配置完了。
=======================================================================
下面需要自己实际的双机调试一下。
测试虚拟机:
依次执行net start 和net stop 命令
开发虚拟机会在测试虚拟机运行net start时触发设置的int 3中断。
此时在卸载程序里加断点,则可以在测试虚拟机运行net stop时触发断点。
下面附上测试驱动“HelloDriver”的代码以及其他小文件。
1 #include <ntddk.h> 2 3 VOID DriverUnload(PDRIVER_OBJECT pDriverObj) 4 { 5 DbgPrint("Goodbye Driver!"); 6 } 7 8 NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObj, PUNICODE_STRING pUnicodeStrPath) 9 { 10 #if DBG 11 _asm int 3 12 #endif 13 DbgPrint("Hello Driver!"); 14 15 pDriverObj->DriverUnload = DriverUnload; 16 17 return STATUS_SUCCESS; 18 }
makefile文件
1 !IF 0 2 This file is created by WLS. 3 !ENDIF 4 !INCLUDE $(NTMAKEENV)\makefile.def
SOURCES文件
1 TARGETNAME=HelloDriver 2 TARGETTYPE=DRIVER 3 SOURCES=HelloDriver.c