荣新IT培训中心
全国咨询热线:400-1335-066
您现在的位置:首页>技术文章 > 正文

Linux培训之内核级软件调试技术(3)

时间:2017-09-21 11:14:34 来源:荣新IT教育培训 作者:荣新科技
荣新科技今天分享的Linux培训之内核级软件调试技术第三部分,想学习的打卡上车了,老司机要发车了。打过卡的一起来看看吧。
Linux培训之内核级软件调试技术(3)

 Kgdb的装置与设置

下面我们将以Linux 2.6.7内核为例细致引见kgdb调试环境的树立过程。

软硬件准备

以下软硬件配置取自笔者停止实验的系统配置状况:

kgdb补丁的版本遵照如下命名形式:Linux-A-kgdb-B,其中A表示Linux的内核版本号,B为kgdb的版本号。以实验运用的kgdb补丁为例,linux内核的版本为linux-2.6.7,补丁版本为kgdb-2.2。

物理衔接好串口线后,运用以下命令来测试两台机器之间串口衔接状况,stty命令能够对串口参数停止设置:

在development机上执行:

stty ispeed 115200 ospeed 115200 -F /dev/ttyS0

在target机上执行:

stty ispeed 115200 ospeed 115200 -F /dev/ttyS0

在developement机上执行:

echo hello > /dev/ttyS0

在target机上执行:

cat /dev/ttyS0

假如串口衔接没问题的话在将在target机的屏幕上显现"hello"。

装置与配置

下面我们需求应用kgdb补丁到Linux内核,设置内核选项并编译内核。这方面的材料相对较少,笔者这里给出细致的引见。下面的工作在开发机(developement)上停止,以上面引见的实验环境为例,某些详细步骤在实践的环境中可能要做恰当的改动:

I、内核的配置与编译

[root@lisl tmp]# tar -jxvf linux-2.6.7.tar.bz2 [root@lisl tmp]#tar -jxvf linux-2.6.7-kgdb-2.2.tar.tar [root@lisl tmp]#cd inux-2.6.7

请参照目录补丁包中文件README给出的阐明,执行对应体系构造的补丁程序。由于实验在i386体系构造上完成,所以只需求装置一下补丁:core-lite.patch、i386-lite.patch、8250.patch、eth.patch、core.patch、i386.patch。应用补丁文件时,请遵照kgdb软件包内series文件所指定的次第,否则可能会带来料想不到的问题。eth.patch文件是选择以太网口作为调试的衔接端口时需求运用的补丁。

应用补丁的命令如下所示:

[root@lisl tmp]#patch -p1 <../linux-2.6.7-kgdb-2.2/core-lite.patch

假如内核正确,那么应用补丁时应该不会呈现任何问题(不会产生*.rej文件)。为Linux内核添加了补丁之后,需求停止内核的配置。内核的配置能够依照你的习气选择配置Linux内核的恣意一种方式。

[root@lisl tmp]#make menuconfig

在内核配置菜单的Kernel hacking选项当选择kgdb调试项,例如:

[*] KGDB: kernel debugging with remote gdb Method for KGDB communication (KGDB: On generic serial port (8250)) ---> [*] KGDB: Thread analysis [*] KGDB: Console messages through gdb [root@lisl tmp]#make

编译内核之前请留意Linux目录下Makefile中的优化选项,默许的Linux内核的编译都以-O2的优化级别停止。在这个优化级别之下,编译器要对内核中的某些代码的执行次第停止改动,所以在调试时会呈现程序运转与代码次第不分歧的状况。能够把Makefile中的-O2选项改为-O,但不可去掉-O,否则编译会出问题。为了使编译后的内核带有调试信息,留意在编译内核的时分需求加上-g选项。

不过,中选择"Kernel debugging->Compile the kernel with debug info"选项后配置系统将自动翻开调试选项。另外,选择"kernel debugging with remote gdb"后,配置系统将自动翻开"Compile the kernel with debug info"选项。

内核编译完成后,运用scp命令停止将相关文件拷贝到target机上(当然也能够运用其它的网络工具,如rcp)。

[root@lisl tmp]#scp arch/i386/boot/bzImage root@192.168.6.13:/boot/vmlinuz-2.6.7-kgdb [root@lisl tmp]#scp System.map root@192.168.6.13:/boot/System.map-2.6.7-kgdb

假如系统启动使所需求的某些设备驱动没有编译进内核的状况下,那么还需求执行如下操作:

[root@lisl tmp]#mkinitrd /boot/initrd-2.6.7-kgdb 2.6.7 [root@lisl tmp]#scp initrd-2.6.7-kgdb root@192.168.6.13:/boot/ initrd-2.6.7-kgdb
选择荣新,了解更多的Linux培训知识,这里是学习的圣殿,是求知的天堂,高薪前途都在这里,荣新科技助你起飞!