Linux内核调试和工具使用 下载本文

3.4. 打印内核调试信息方法

在调试linux内核代码时,我们经常会用printk将调试信息打印到终端上,但如果我们调试的代码会随内核启动时一起启动,或者调试模块时出bug死机了,这时就不能查看死机前打印的全部信息了。下面就介绍将内核调试信息打印到另一台虚拟机上。

1,首先要clone或重新安装一台虚拟机,两台内核版本可以不一致。要调试内核代码的虚拟机叫做目标机,用于查看调试信息的虚拟机叫做调试机(暂且随kgbd的叫法),目标机要增加一个串口设备,配置如下:

而开发机也要增加一个串口设备,配置如下:

2,进入目标机的/boot/grub/grub.conf,这是linux系统的启动引导配置文件,将某个内核的调试信息输出到终端重定向输出到串口,如下图:

3,进入调试机,打开一个终端确认一下系统是否已经安装minicom,如果没有请自行安装。

4,配置minicom(需要root用户),执行minicom –s后出现配置界面

使用向下键选择serial port setup(串口设置),按回车出现设置界面

按A,设置串口设备为/dev/ttyS0 按E:设置为115200。 按F:设置为No

按回车,保存设定,回到主菜单,可以选择Save setup as df1(设为默认配置)。 设置完成后选择Exit退出

5,直接输入minicom,就可以像使用Windows的超级终端一样操作了。我们还可以将当前信息保存到一个文件中作为bug信息使用,按住ctrl + A + L:

4. Linux内核升级与kgdb调试环境的搭建 4.1. linux内核升级

Linux内核升级的关键是要配置好makefile的config文件,根据不同环境我们对内核可能需要添加或删除一些模块,这就要具体问题具体分析。这里只介绍简单的内核升级,我们在升级前直接将旧内核的.config文件拷贝到新内核源码中(在/usr/src/kernels/对应内核版本目录就好)。

1,终端进入要升级的内核源码目录下,敲make menuconfig配置config文件,以下是几个配置点,其他都不用操作,按原先内核配置就可。

(1)Loadable Module support选项中,选上“Module unloading”和“Automatic kernel module loading”这两项;

(2)Device Drivers--->Block Devices中选上“Loopback device support”;

Device Drivers--->Multi-device support(RAID and LVM)处要选上“device mapper support”;

Device Drivers--->Graphics support,一定要选上“ Support for frame buffer devices”; Device Drivers --->USB support --->选上“USB Mass Storage support”(如果是在实环境中,想要更多USB支持,就全选吧。我的是在虚拟机中,用不着了)

Device Drivers --->;Network device support --->Ethernet (10 100Mbit) ---><*> AMD PCnet32 PCI support

(3)File system--->(以下9个选项是关于ext2和ext3文件系统配置,全部选上)

or

Second extended fs support Ext2 extended attributes

Ext2 POSIX Access Control Lists Ext2 Security Labels

Ext3 journalling file system support Ext3 extended attributes

Ext3 POSIX Access Control Lists Ext3 Security Labels

JBD (ext3) debugging support

File system--->DOS/FAT/NT Filesystems --->选上“NTFS file system support”; 注意:

ext2和ext3文件系统配置很重要,也是必需的,如果对Ext3、Ext2文件的支持直接编译进内核,在你reboot时机器就会当掉,出现如下错误信息:

kernel panic : no init found ,try passing init = option to kernel..... 或者是:

VFS:Cannot open root device \ Please append a correct \

kernel panic:VFS:Unable to mount root fs on unknown-block(0,0) 或者是:

mount: error 19 mounting ext3