标题中的101请参阅70bK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6W2L8W2)9J5k6i4N6A6K9$3W2H3k6h3c8A6j5g2)9J5k6h3!0J5k6#2)9J5c8Y4N6A6K9$3W2Q4x3V1j5I4x3o6q4Q4y4h3k6Q4x3U0S2@1L8%4m8A6j5#2)9J5z5g2!0q4x3#2)9^5x3q4)9^5x3R3`.`.
我们在上一篇文章——本地内核调试环境搭建,就这么简单!中总结了本地内核调试的开启方法。本地内核调试有很多限制(比如,不能执行.crash来让系统蓝屏,不能执行.dump保存转储,不能下断点 ……),双机内核调试完全没有这方面的限制,可以说是真正意义上的内核调试。
双机内核调试主要分两种情况:
不论被调试系统运行在虚拟机中,还是运行在另外一台物理机中,系统设置都是一样的。本文简单梳理了常用的内核调试设置方法及连接方法。
可以通过1394,串口(Pipe),USB2.0,USB3.0,网络等方式进行双机内核调试。我只使用过串口和网络在两台真实的物理机上进行双机内核调试,并没有使用过1394,USB2.0,USB3.0的方式。当被调试系统运行在虚拟机中的时候,我们可以使用Pipe和VirtualKD两种方式进行双机调试。
被调试系统设置:
温馨提示:
调试主机连接方法:

被调试系统设置:
调试主机连接方法:

说明:
内核调试支持的波特率有9600、19200、38400、57600和115200几种。数值越大,传输速率越大。我们通常选最大的115200。
关于波特率的介绍请参考百度百科:d92K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1j5h3W2C8k6g2)9J5k6h3u0S2K9h3c8#2i4K6u0W2j5$3!0E0i4K6u0r3K9i4c8W2L8g2)9J5c8W2)9J5y4f1f1$3i4K6t1#2b7U0y4Q4x3U0g2m8x3W2)9J5y4f1f1%4i4K6t1#2z5o6W2Q4x3U0g2n7z5g2)9J5y4f1f1%4i4K6t1#2z5p5g2Q4x3U0f1^5y4#2)9J5c8U0t1I4y4e0x3I4z5o6f1`.
当被调试的系统在虚拟机中时,我们可以通过命名管道模拟串口来进行双机内核调试。
被调试系统设置:(和串口一样)
调试主机连接方法:

简单介绍下相关参数:
1394:我机器上没有1394端口,所以没有实际尝试过。
usb2.0:要求使用 0 号端口。而且对数据线也有要求:一般的usb2.0的数据线不行,因为需要同时连接两台物理机。没尝试过。
usb3.0:需要买专用的线,或者制作特殊的线,之前工作电脑上还没有usb3.0的接口,所以也没尝试过。强烈推荐大家参考张银奎老师的文章:13aK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3q4V1N6X3c8T1k6#2)9J5k6h3!0J5k6#2)9J5c8X3u0D9L8$3N6K6i4K6u0r3j5h3c8$3k6r3u0Y4i4K6g2X3M7%4W2K6N6r3g2E0i4K6u0r3j5i4u0@1K9h3y4D9k6i4y4Q4x3V1j5#2z5e0f1@1i4K6u0W2j5i4y4H3P5q4!0q4x3#2)9^5x3q4)9^5x3W2!0q4y4#2)9&6b7#2)9^5b7W2!0q4y4#2)9&6b7g2)9^5y4q4!0q4y4W2)9^5z5q4)9&6x3g2!0q4y4W2)9^5z5g2)9^5b7W2!0q4y4g2)9^5c8W2)9^5z5q4!0q4y4#2)9&6y4#2)9&6x3W2!0q4y4#2)9&6y4#2)9&6x3W2!0q4y4q4!0n7b7g2)9^5y4W2!0q4x3#2)9^5x3q4)9^5x3W2)9K6b7g2)9J5z5b7`.`.
eXDI:请参考张银奎老师的文章:a76K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3q4V1N6X3c8T1k6#2)9J5k6h3!0J5k6#2)9J5c8X3u0D9L8$3N6K6i4K6u0r3j5h3c8$3k6r3u0Y4i4K6g2X3M7%4W2K6N6r3g2E0i4K6u0r3j5i4u0@1K9h3y4D9k6i4y4Q4x3V1j5&6x3o6y4Q4x3X3g2S2M7%4m8^5i4@1f1K6i4K6R3H3i4K6R3J5
因为以上几种形式我没实战过,就不搬文档了。而且,设置起来不算复杂。如果有需要,请参考官方文档1beK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1L8$3y4K6i4K6u0W2L8h3W2U0M7X3!0K6L8$3k6@1i4K6u0W2j5$3!0E0i4K6u0r3k6h3&6Q4x3X3c8#2M7#2)9J5c8Y4N6A6L8X3c8G2N6%4y4Q4x3X3c8Z5j5i4u0V1N6$3q4J5k6g2)9J5c8X3c8J5K9i4k6W2M7Y4y4Q4x3V1k6V1k6h3u0#2k6$3N6W2M7W2)9J5c8Y4y4W2N6s2c8A6L8X3N6Q4x3X3c8#2M7q4)9J5k6r3E0W2M7X3&6W2L8q4)9J5k6r3#2G2k6r3g2Q4x3X3c8V1k6h3u0#2k6$3N6A6L8X3N6Q4x3X3c8A6L8W2)9J5k6s2N6A6L8X3c8T1k6#2)9J5k6q4)9J5k6r3y4V1j5W2)9J5k6q4)9J5k6r3!0J5i4K6u0V1L8Y4c8K6k6q4!0q4x3#2)9^5x3q4)9^5x3R3`.`.
做好设置后,在开始搭建物理环境前,我们需要确保设置正确。我们可以执行bcdedit /enum {ID}来检查对应启动项是否开启了Debug,并且执行bcdedit /dbgsettings来检查当前设置的参数是正确的。下图是我设置内核调试方式为网络的截图:

我通过网络和串口两种方式成功的进行过双机内核调试。
网络:不需要做特殊设置。但是需要注意以下几点:
串口:需要制作特殊的线,一般的串口线不行。当时买了一根,找了同学帮忙焊了下,成功的连上了。串口线连接方法,请参考dfeK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1L8$3y4K6i4K6u0W2L8h3W2U0M7X3!0K6L8$3k6@1i4K6u0W2j5$3!0E0i4K6u0r3k6h3&6Q4x3X3c8#2M7#2)9J5c8Y4N6A6L8X3c8G2N6%4y4Q4x3X3c8Z5j5i4u0V1N6$3q4J5k6g2)9J5c8X3c8J5K9i4k6W2M7Y4y4Q4x3V1k6V1k6h3u0#2k6$3N6W2M7W2)9J5c8Y4y4W2N6s2c8A6L8X3N6Q4x3X3c8#2M7q4)9J5k6r3q4Q4x3X3c8F1N6h3I4D9i4K6u0V1L8h3!0V1k6h3#2Q4x3X3c8U0j5h3u0D9k6g2)9J5k6r3y4G2L8X3&6W2j5%4c8A6L8$3&6Q4c8e0y4Q4z5o6m8Q4z5o6t1`.
我通过Pipe和VirtualKD两种方式成功的进行过双机内核调试。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课