WRK内核编译调试环境搭建

Posted pro-love

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WRK内核编译调试环境搭建相关的知识,希望对你有一定的参考价值。

阅读WRK源码,可以更深入的理解Windows内核原理。现将它的编译调试过程记录下来。

 (一)准备工具:

  1. WRK-v1.2-kernel源码
  2. Windows Server 2003 SP1 (32位)镜像,网址:https://msdn.itellyou.cn/
  3. VMWare WorkStation 8
  4. 最新的Windbg,网址:http://www.windbg.org/
  5. Windows 7 (64位)笔记本电脑

(二)配置流程

1.VMWare安装Windows Server 2003 iso,网上资料比较多,略过。

2.将WRK源码拷贝到windows虚拟机中,方法很多,我这边是通过【文件夹共享】的方式把源码放到C盘根目录【C:\\】。关于如何设置共享文件夹,如下图,共享文件夹功能需要安装VMWare Tools。

技术图片

3.在虚拟机中,将【C:\\WRK-v1.2\\toos\\x86】的路径加到Path系统环境变量中。

技术图片

打开CMD命令行窗口模式,cd C:\\WRK-v1.2\\base\\ntos文件夹,输入

nmake -nologo x86= 开始编译。

技术图片

大概2分钟左右,编译完后,会在C:\\WRK-v1.2\\base\\ntos\\BUILD\\EXE目录下产生内核文件wrkx86.exe

技术图片

将编译好的wrkx86.exe拷贝到C:\\WINDOWS\\system32目录下。

4.WRK提供了针对多处理器版本的硬件抽象层HAL支持,为了知道机器实现的HAL类型,

在CMD命令模式下,执行以下命令:

link -dump -all \\WINDOWS|system32\\hal.dll | findstr pdb

 

技术图片

在WRK中,根据以下关系选择相应的HAL库:

halacpi.dll -> halacpim.dll

halaacpi.dll->halmacpi.dll

halapic.dll->halmps.dll

由于我已经替换为halmacpi.dll,没替换之前是显示为halaacpi.dll,所以需要将halmacpi.dll拷贝到C:\\WINDOWS\\system32目录下。

halmacpi.dll位于C:\\WRK-v1.2\\WS03SP1HALS\\x86\\halmacpi目录下。

5.在虚拟机设置中添加串口,"Add..."-->“Serial port”-->"Next"-->"output to named pipe"-->名字为"\\\\.\\pipe\\com_1",

选择“This end is the server.”,"The other end is an application."

技术图片

编辑隐藏文件C:\\boot.ini,最后一行添加以下内容:

multi(0)disk(0)rdisk(0)partition(1)\\WINDOWS="WRK V1.2" /kernel=wrkx86.exe /hal=halmacpi.dll
multi(0)disk(0)rdisk(0)partition(1)\\WINDOWS="WRK V1.2" /kernel=wrkx86.exe /hal=halmacpi.dll /debug /debugport=com1 /baudrate=115200

6.在windows 7 64笔记本中,Windbg快捷方式后面增加下面参数:,

-k com:port=//./pipe/com_1,baud=11520,pipe

设置Windbg的符号路径和源码路径。

C:\\Symbols; SRV*C:\\MyLocalSymbols*http://msdl.microsoft.com/download/symbols

同时将wrkx86.pdb,halmacpi.pdb符号文件放到笔记本中C:\\Symbols目录下。

7.启动虚拟机,选择调试模式,打开Windbg,Windbg会通过com串口与虚拟机通信,这样就可以调试wrkx86内核。

最终呈现的效果如下:

技术图片

大功告成,可以随心所欲的修改和学习内核代码并进行调试了,慢慢加油吧!

以上是关于WRK内核编译调试环境搭建的主要内容,如果未能解决你的问题,请参考以下文章

linux内核调试环境搭建

构建调试Linux内核网络代码的环境MenuOS系统

Linux——Linux驱动之设备树编译环境搭建实践总结(设备树uboot内核编译及镜像烧写)

Linux——Linux驱动之设备树编译环境搭建实践总结(设备树uboot内核编译及镜像烧写)

Linux疑难杂症解决方案100篇(十五)-万字长文带你深入Linux 内核学习:环境搭建和内核编译

Linux疑难杂症解决方案100篇(十五)-万字长文带你深入Linux 内核学习:环境搭建和内核编译