转载文章请注明作者和二维码及全文信息。
不会编程的程序员,不是好的架构师,编程和内核调试也是出色架构师的必修课。谈起编程人员的数量,基于Linux平台的软件工程师肯定是最多的,没有之一。那今天我们就以Linux为例,深入讲一下内核模块和内核的调试技术和调试工具KGDB。
1 KGDB背景
KGDB是在内核2.6.26版本中正式支持的,对应发行版即SLES11及以上、RHEL6及以上,在此之前的内核版本由Linsyssoft Technologies公司提供补丁以支持KGDB,但并不是所有内核版本都有补丁可用,同时打补丁操作也比较繁琐且问题多多,因此可用性不高。
2 调试环境搭建
注:以下称 “被调试的主机”为目标机,运行gdb进行调试的主机为开发机
2.1 目标机配置
2.1.1 配置串口
物理机串口根据实际环境要求配置,虚拟机按如下方式配置,pipe名字可以修改,但要保证和开发机一致:
2.1.2 更新内核以支持kgdb
注:本文以SLES11SP1作为目标机为例,内核源码直接安装RPM包就可以使用,RHEL要稍微麻烦一些,需要下载源码包,进行编译后进行安装。
更新内核前准备
加入调试信息后内核及各个ko的体积会增大数倍,因此编译内核前一定要确认磁盘有7G以上剩余空间(保险起见建议预留10G),执行make后源码目录空间占用超过5G。
执行make modules_install后/lib/modules目录还要占用1.4G
SLES系列默认内核源码目录是/usr/src/linux-xxx/,但由于试验用的虚拟机创建时磁盘选择默认大小只有8G,因此额外创建了一块20G的磁盘挂载到/home目录作为内核编译目录,可直接将目录usr/src/linux-xxx/拷贝到/home/linux-xxx/不影响编译。
更新内核步骤
1、执行uname –r确认当前运行内核的类型,拷贝/boot/目录下对应内核类型的config文件到内核源码目录并重命名为.config;大多数情况下编译内核后启动失败都是因为内核配置不当,因此最好在系统原有配置文件基础上修改。
2、在内核源码目录执行make menuconfig进行内核配置;