FreeBSD中使用串行通信进行远程内核调试

探索在不影响系统性能的情况下,如何远程调试正在目标计算机上运行的 FreeBSD 内核。本文讨论如何使用串行通信端口设置调试环境、如何编译经过修改的内核代码、如何进行调试,并介绍了一些故障诊断提示。

引言

FreeBSD 是从 BSD 衍生而来的高级操作系统,BSD 则是加利福尼亚大学伯克力分校开发的 UNIX 版本。它提供了很高的性能,与其他系统的兼容性更强,并且需要的系统管理更少。FreeBSD 包含了内核级的状态式 (Stateful) IP 防火墙以及许多其他服务,如 IP 代理网关、访问控制列表、强制访问控制、基于 Jail 的虚拟主机以及加密保护的存储。

在开发内核代码或运行开发内核时,偶尔会发生内核崩溃。重要的是诊断核心转储以便提取有用的信息。如果尝试使用同一台开发计算机来调试此核心转储,则可能影响系统的性能。每次只能调试一个核心转储。要想高效地调试内核的核心转储,最好是在开发计算机和目标计算机之间建立远程调试会话,然后使用串行通信远程调试内核。

kgdb 实用程序是基于 gdb 的调试器,允许调试内核核心文件。FreeBSD 5.3 及更高版本提供了 kgdb 实用程序。如果您有早期版本的 FreeBSD,那么仍然可以使用 gdb -k 来读取核心转储文件。kgdb 可帮助在内核代码中放置断点,这样您就可以逐步通过断点来观察变量。

本文介绍如何使用串行通信端口来设置调试环境、如何编译经过修改的内核代码,以及如何开始内核调试。还介绍了一些故障诊断提示。

设置调试环境

要设置进行 FreeBSD 内核调试的远程调试环境,您需要两台计算机:一台目标计算机和一台开发计算机。目标计算机上运行需要调试的新内核映像。开发计算机用于调试目标计算机上运行的内核。为了获得更好的性能,您可以使用配置较好的计算机作为开发计算机。

零调制解调器电缆 (Null modem cable)

零调制解调器 (Null modem) 是一种使用 RS-232 串行电缆连接两台计算机的通信方式。原始 RS-232 标准只定义了使用调制解调器连接计算机的方式。使用零调制解调器连接时,发送线和接收线要交叉连接。根据使用目的而定,有时需要交叉连接一个或多个握手线。有多种连接方式可供选择,因为标准中并未涵盖零调制解调器连接。

如果将零调制解调器电缆连接到串行端口,与使用调制解调器时的速率 (9600 bps) 相比,调试器能够以它当前的最高速率 (19200 bps) 运行。通常认为这种配置比使用调制解调器更可靠,其原因在于:

零调制解调器电缆是一种允许在两个串行端口之间发送数据的串行电缆。通常,将串行端口与串行设备连接。在本例中,必须配置目标计算机以接受串行端口到串行端口的连接。有一点很重要,那就是要使用零调制解调器电缆,如果您使用普通的串行电缆,目标计算机则期望与串行设备通信,而不是与另一个串行端口通信,这样您就无法调试该计算机。

当您使用零调制解调器电缆在两台计算机之间建立直接串行连接时,您的电缆必须按下面 清单 1 中显示的方式连接。

清单 1. 25 针零调制解调器电缆   
2  3  Transmit Data
3  2  Receive Data
4  5  Request to Send
5  4  Clear to Send
6  20 Data Set Ready and Carrier Detect
7  7  Signal Ground
20 6  Data Terminal Ready

时间: 2024-11-17 06:22:37

FreeBSD中使用串行通信进行远程内核调试的相关文章

PHP中利用Xdebug进行远程错误调试

Xdebug提供了客户端与PHP脚本进行交互的接口,这一章将会介绍如何让PHP和Xdebug开启这个特性,并且介绍一些常用的客户端. 概述 Xdebug(远程)调试器允许测试数据结构,步进并且调试你的代码.Xdebug提供了两种协议用于与其进行交互:在Xdebug1.3和2中旧的GDB协议和Xdebug2中实现的DBGp协议. 客户端 Xdebug2 为DBGp协议提供了一个简单的基于命令行的客户端,当然,也有一些其它的客户端实现(免费的和商业的).我不是这些客户端的作者,所以请到作者的网站寻找

在FreeBSD中安装双网卡实例

当我们使用FreeBSD作网关或防火墙时,会要求在系统中安装两块网卡,分别跨越两个网络,一块卡用于外部网络,而另一块用于内部网络.好了,就象大家知道的那样,现在需要让系统支持这些新设备,而对于网络适配器,FreeBSD是通过定制内核来支持的.当然,首先要让内核了解设备所用的硬件资源,对于使用PCI接口的网卡,我只能说,拥有高科技真是幸福,因为这类网卡在PCI PnP BOIS的支持下,只要在内核中多添一个设备配置就可在新内核引导时自动检测并启动:而对于ISA的卡,就没有这样简单了,不过只要去Pn

FreeBSD中的SYSINIT框架

SYSINIT是一个通用的调用排序与分别执行机制的框架.FreeBSD目前使用它来进行内核的动态初始化.SYSINIT使得FreeBSD的内核各子系统可以在内核或模块动态加载链接时被重整.添加.删除.替换,这样,内核和模块加载时就不必去修改一个静态的有序初始化安排表甚至重新编译内核. 这个体系也使得内核模块(现在称为KLD可以与内核不同时编译.链接.在引导系统时加载,甚至在系统运行时加载.这些操作是通过"内核链接器"(kernel linker)和"链接器集合"(l

使用Virtual PC进行Windows内核调试

下面以Virtual PC 2004为例,介绍一下利用Virtual PC进行Windows内核调试的详细过程. 1,下载并安装Virtual PC 2004,从略. 2,启动Virutal PC Console(控制台),创建一台新的虚拟PC,安装向导的提示配置硬盘.内存等参数. 3,在刚才创建的虚拟PC上安装操作系统,这个操作系统应该是你要调试的Windows版本.比如你想调试你的驱动程序在Windows Server 2003上出现的问题,那么就安装Windows Server 2003.

驱动-内核调试,加法后打印不正常

问题描述 内核调试,加法后打印不正常 我在调试MTD驱动的时候,想不明白这打印怎么回事. 解决方案 看相关变量的定义:loff_t: typedef __kernel_loff_t loof_ttypedef long long __kernel_loff_tmtd_part.offset类型为uint64_t其真正类型为unsigned long (32bit CPU)或者unsigned long long (64bit CPU) 你的代码里面有两点需要注意:1. part->offset

sqlite-如何将导入到数据库表中的数据保存在程序中,而不用每次换调试机时还得重新导入数据

问题描述 如何将导入到数据库表中的数据保存在程序中,而不用每次换调试机时还得重新导入数据 如题:我有一张excel的表,我将其存为.csv文件,然后通过dos命令下的sqlite3命令导入到了数据库表中,问题是如果不换机子,导入到该数据库表中的数据永久有效.如果我换机子调试的话,该数据库表中的数据就不存在了,会报错,请问有没有解决办法?谢谢! 解决方案 最好存入远程数据库每次启动同步下来数据就可以了,sqlite是系统自带的数据库具体的就是http://blog.csdn.net/tianyit

Linux与FreeBSD中TCP协议栈实现之比较

作为两个最有名的开源操作系统,Linux和FreeBSD是网管们的首选.Linux以开放性和 众多的驱动支持著称,而FreeBSD有着优良的UNIX传统,是公认的最稳定的操作系统. 那么,在这两个操作系统间,该如何选择呢?幸好,我们有源码,可以从协议栈的实现中寻找答案.TCP/IP协议栈是网络中广泛使用的事实网络通信标准.最初的TCP实现源自4.4BSDlite,在Linux兴起后,也不可避免得支持它.但Linux的实现自成体系,仅与传统实现保持接口上的兼容,下面我们将针对源码级的实现,来分析一

javascript中5个常用web debug调试插件介绍

在前端开发中,调试技术是必不可少的技能,本文将介绍五种前端开发必备的调试技术. Weinre移动调试 DOM 断点 debugger断点 native方法hook 远程映射本地调试 Weinre 在移动上面开发调试是很复杂的,所以就有了weinre.安装weinre可以实现pc来调试手机页面,所以对于移动开发调试是很重要的哦~ 安装weinre weinre可以通过npm来安装:  代码如下 复制代码 npm install -g weinre 安装完之后,可执行下面的命令来启动:  代码如下

Windows Server中的 WINS 服务器远程内存损坏漏洞分析

本文讲的是Windows Server中的 WINS 服务器远程内存损坏漏洞分析, 漏洞概要 在2016年12月,FortiGuard Labs发现并报告了Microsoft Windows Server中的WINS Server远程内存损坏漏洞.在2017年6月,微软向FortiGuard实验室答复说:"要修复程序漏洞需要对代码进行全面彻底的检查,WINS所提供的功能会被DNS所取代,微软已经建议客户将其迁移出去.也就是说,由于修复漏洞所需要的工作量,Microsoft不会修补此漏洞.相反,M