vmware串口调试

在调试内核态程序时,发现内核里面的打印信息在默认的情况下只能在控制台输出,由于控制台能看到得信息有限,这就导致不能看到很多有用的调试信息。经过试验,可以有两种办法解决这个问题。

1.
使用串口调试。把调试信息通过串口输出,然后再用别的自己觉得好用程序读出打印信息。具体步骤如下
  
1)在vmare中增加一个串口。在虚拟机的.vmx文件中加入以下信息
          serial0.present = "TRUE"
          serial0.autodetect = "TRUE"
          serial0.tryNoRxLoss = "TRUE"
          serial0.fileType = "pipe"
          serial0.fileName = "//./pipe/com_1"
(2)
修改linux/boot/grub/menu.lst信息与/etc/inittab
    /boot/grub/menu.lst
的示范:

   serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
terminal --timeout=10 serial console
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title Fedora (2.6.18)
        root (hd0,0)
        kernel /boot/vmlinuz-2.6.18 ro root=LABEL=/ console=tty0 console=ttyS0,115200n8
        initrd /boot/initrd-2.6.18.img

/etc/inittab中加入以下行

T0:23:respawn:/sbin/getty -L ttyS0 115200 vt100

3)下载Named Pipe TCP Proxy,并安装 。见附件
4)打开Named Pipe TCP ProxyEdit->New,然后输入vmware设置的管道名称,在这里是//./pipe/com_1,设置成端口自己随便取,别冲突就可以,这里以2001为例。
5)然后打开cmd,输入telnet 127.0.0.1  2001。可以看到attaching consol,wait...然后输入系统信息。

如果遇到printk打印不出来时,可能是系统的console_loglevel设置不对。查看/proc/sys/kernel/printk,如果里面的信息不是6  4 1 7,则要修改。修改的办法有两种(1sysctl   -w   kernel.printk="6   4   1  7" 2dmesg -n 6

 

设置系统启动的时候就自动修改:在/etc/rc.local最后添加dmesg –n 6

你可能感兴趣的:(vmware串口调试)