单vmware虚拟机中的FreeBSD调试内核

STEP
1
编译不含siokernel(注释掉device.hintsdevice sio), 并以附件中的sio.c编译
sio.ko
2
备份当前系统的kernelsio.ko,并更新kernel, 并重启

3
加载虚拟串口驱动
#kldload /path/to/sio.ko
4
测试串口
#ll /dev/cuad*
(可以看到2个串口,如cuad2,cuad3
终端1#cat /dev/cuad2
终端2
#echo test > /dev/cuad3
如果在终端1上看到输出的test,则表明虚拟串口连接成功

在终端1上按CTRL+c终止cat
5
调试内核

为串口联调配置好vmware虚拟机,配置虚拟机中的串口为/dev/cuad2
在主机中执行#kgdb -r /dev/cuad3 kernel.debug进行联调
ADVANTAGE
1
超越硬件的限制

2
软件模拟串口,传输速度可以不受串口速度的限制 BUG
1
对控制信号的模拟不够精确

2
该驱动的加载会导致物理串口不能正常工作(如需使用物理串口,kldunload sio.kokldload备份的sio.ko即可)
3
性能尚有待改进
REFERENCE
1 zzy
Debugging with GNU Project Debugger

2 Interfacing the Serial / RS232 Port
http://www.beyondlogic.org/serial/serial.htm
3 The RS232 Standard
http://www.camiresearch.com/Data_Com_Basics/RS232_standard.html ============================================================================= vmware其实是非常方便的。

首先要配置好各个虚拟机,着重要配置的各个虚拟机的串口,一个作server,一个作client,被调试的当然是server
1.
配置调试机 2. 配置被调试机 3. 在内核中增加调试选项
options     DDB                                        makeoptions DEBUG=-g                                  device    sio0 at isa? port IO_COM1 flags 0x10 irq 4device    sio1 at isa? port IO_COM2 flags 0x80 irq 3
串口1一般用作控制台,在此保留了,串口2才是调试口,注意其标志位为0x80
# config -d /tiny TINY ; cd /tiny; make depend;make   
一是直接在调试机上编译内核,

二是在其他服务器上编译,然后将包含源码以及kernel.debug的目录nfs共享,调试机挂接
三是通过pxe远程引导一个系统在服务器上一目录中单独安装一个相应版本的系统(4.x5.x是不兼容的,请注意),所有的编译操作都在这个目录下进行
当然要chroot到这个目录下。
pxe
远程引导这个系统。这个目录无论在服务器上还是在pxe引导的客户机上的目录映射都是相同的,编译速度和便捷都有保证。
kernel拷贝到被调试机上,启动。同时启动调试机。按ctrl-alt-esc,进入db状态进入调试机
# gdb -k kernel.debug                                  
(kgdb) target remote /dev/cuaa0                     
连接完成后
(kgdb) c                                             
继续执行,在以后的操作中,可以随时在被调试机上中断,进入gdb中。在调试机上就可以设置断点,跟踪调试了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值