导航:首页 > 操作系统 > linux内核debug

linux内核debug

发布时间:2022-10-01 14:27:23

‘壹’ 怎么搭建学习linux内核的运行,调试环境

‘贰’ linux内核调试的主要方法

1。printk ,以及系统日志。阅读源码,想象代码运行的情况,结合打印的信息,推测问题所在。

2。内核调试器,例如 Kgdb 。

3。user mode linux 。

4。在虚拟机上调试。例如 Bochs 。

‘叁’ 编译进Linux内核的驱动能否进行单步调试

您好:
只能在汇编代码级进行调试;

优点是不需要两台机器进行调试。

gdb:在调试模块时缺少一些至关重要的功能,它可用来查看内核的运行情况,包括反汇编内核函数。

kgdb:能很方便的在源码级对内核进行调试,缺点是kgdb只能进行远程调试,它需要一根串口线及两台机器来调试内核(也可以是在同一台主机上用vmware软件运行两个操作系统来调试)

printk() 是调试内核代码时最常用的一种技术。在内核代码中的特定位置加入printk()
调试调用,可以直接把所关心的信息打打印到屏幕上,从而可以观察程序的执行路径和所关心的变量、指针等信息。 Linux 内核调试器(Linux kernel
debugger,kdb)是 Linux 内核的补丁,它提供了一种在系统能运行时对内核内存和数据结构进行检查的办法。Oops、KDB在文章掌握 Linux
调试技术有详细介绍,大家可以参考。 Kprobes 提供了一个强行进入任何内核例程,并从中断处理器无干扰地收集信息的接口。使用 Kprobes
可以轻松地收集处理器寄存器和全局数据结构等调试信息,而无需对Linux内核频繁编译和启动,具体使用方法,请参考使用 Kprobes 调试内核。

‘肆’ 在Linux下如何设置kernel-debug和 kernel-debug-devel,使得可以用crash来分析kernel的mp file

安装kernel-debug和kernel-debug-devel这两个包就可以了。
这两个包可以在安装光盘的/Server/Package中找到
安装命令:rpm -ivh kernel-debug*

‘伍’ 如何打开linux kernel的debug

【1】配置Kconfig,添加要调试驱动模块的DDEBUG选项,如
kernel_imx\drivers\mxc\pmic\mc13892\Kconfig
config MXC_PMIC_DEBUG
bool "Support MXC PMIC DEBUG"
depends on MXC_PMIC

【2】配置Makefile,添加编译支持驱动模块 EXTRA_CFLAGS += -DDEBUG ,如
kernel_imx\drivers\mxc\pmic\core\Makefile
ifeq ($(CONFIG_MXC_PMIC_DEBUG),y)
EXTRA_CFLAGS += -DDEBUG
endif

【3】配置内核,使支持动态调试
make menuconfig
| | Kernel hacking --->
| | [*] Tracers --->
| | [*] Trace max stack
| | [*] Enable dynamic printk() support

| | Device Drivers --->
| | MXC support drivers --->
| | MXC PMIC support --->
| | [*] Support MXC PMIC DEBUG

【4】重烧内核启动后,改变控制台debug消息显示级别,可以打印printk(DEBUG ...)信息
echo > /proc/sys/kernel/printk "8"

‘陆’ 如何调试0.11版的linux内核

编译64位程序,不一定要编译机器是64位的,但是32位机器默认安装的gcc编译环境还是不能用来编译64位程序。编译64位程序,需要加上-m64编译器参数,默认安装的gcc已经支持该参数,但是缺少64位机器指令相关的文件,所以不能编译,会出现下面的错误
In file included from /usr/include/features.h:378,
from /usr/include/assert.h:37,
from ../../../include/tinyxml/tinystr.h:42,
from ../../../src/tinyxml/tinystr.cpp:32:
/usr/include/gnu/stubs.h:9:27: error: gnu/stubs-64.h: 没有那个文件或目录
这时候需要安装 gcc所有支持文件 sudo apt-get install gcc-multilib
将会安装下列额外的包:
cpp-4.4 g++-4.4 gcc-4.4 gcc-4.4-base gcc-4.4-multilib lib64gcc1 lib64gomp1 libc6-amd64 libc6-dev-amd64 libgcc1 libgomp1

‘柒’ linux debug filesystem怎么用

在进行系统调试的时候,有可能会使用到debug file system。
下面讲解如何具体使用debug file system
1. 在kernel中使用debug file system
make menuconfig --> Kernel hacking --> 选中Debug Filesystem (CONFIG_DEBUG_FS)选项。
make menuconfig --> kernel hacking --> 选中Kernel debugging (CONFIG_DEBUG_KERNEL)选 项。
注:"kernel debugging"选项必须使能,否则在进行第三步的时候,会报“mount: unknown filesystem type 'debugfs'”
2. 编译kernel,下载并且运行之。
3. 挂载debug file system
# mount -t debugfs none /sys/kernel/debug
或者
# mkdir /debug
# mount -t debugfs none /debug
进入/debug文件夹及其子文件夹获得想要的信息。

‘捌’ 如何debuglinux内核,我用ubuntu

可是有没有一种比较快捷的方法比如说在终端里面查看呢?答案是肯定的。为了查看 Ubuntu 的版本号,可以采用以下两种方法之一。方法一在终端中执行下列指令: cat /etc/issue 可以查看当前正在运行的 Ubuntu 的版本号。其输出结果类似下面的内容: Ubuntu 8.04 /n /l方法二使用 lsb_release 命令也可以查看 Ubuntu 的版本号,与方法一相比,内容更为详细。执行指令如下: sudo lsb_release -a 将输出结果: Distributor ID: Ubuntu Description: Ubuntu 8.04 Release: 8.04 Codename: hardy 查看内核版本号的方法是:打印一个终端,输入命令uname -r

‘玖’ Linux内核调试工具KGDB

内核工具KGDB调试环境需要为Linux 内核加上 kgdb补丁,补丁实现GDB远程调试所需要的功能,包括命令处理、陷阱处理及串口通信3个主要的部分。KGDB补丁的主要作用是在Linux 内核中添加了一个调试Stub。调试Stub是Linux 内核中的一小段代码,是运行GDB的开发机和所调试内核之间的一个媒介。GDB和调试stub之间通过GDB串行协议进行通信。GDB串行协议是-种基于消息的ASCII 码协议,包含了各种调试命令。当设置断点时,KGDB将断点的指令替换为一条 trap指令,当执行到断点时控制权就转移到调试 stub中去。此时,调试stub 的任务就是使用远程串行通信协议将当前环境传送给GDB,然后从GDB处接收命令。GDB命令告诉stub 下一步该做什么,当stub收到继续执行的命令时,将恢复程序的运行环境,把对 CPU的控制权重新交还给内核。KGDB补丁给内核添加以下3个部件:
(1 ) GDB stub
GDB stub被称为调试插桩(简称为stub),是KGDB调试器的核心。它是Linux内核中的一小段代码,用来处理主机上: GDB发来的各种请求;并且在内核处于被调试状态时,控制目标机板上的处理器。
(2)修改异常处理函数
当这个异常发生时,内核将控制权交给KGDB调试器,程序进入KGDB提供的异常处理函数中。在里面,可以分析程序的各种情况。
(3)串口通信
GDB和 stub之间通过GDB串行协议进行通信。它是一种基于消息的ASCII 码协议,包含了各种调试命令。除串口外,也可以使用网卡进行通信。以设置内核断点为例说明KGDB与GDB之间的工作过程。设置断点时,KGDB修改内核代码,将断点位置的指令替换成一条异常指令(在ARM中这是一条未定义的指令)。当执行到断点时发生异常,控制权转移到stub 的异常处理函数中。此时,stub的任务就是使用GDB串行通信协议将当前环境传送给GDB,然后从GDB处接收命令,GDB命令告诉stub下一步该做什么。当stub收到继续执行的命令时,将恢复原来替换的指令、恢复程序的运行环境,把对CPU的控制权重新交还给内核。

‘拾’ linux debug filesystem怎么用

在进行系统调试的时候,有可能会使用到debug
file
system。
下面讲解如何具体使用debug
file
system
1.
在kernel中使用debug
file
system
make
menuconfig
-->
Kernel
hacking
-->
选中Debug
Filesystem
(CONFIG_DEBUG_FS)选项。
make
menuconfig
-->
kernel
hacking
-->
选中Kernel
debugging
(CONFIG_DEBUG_KERNEL)选
项。
注:"kernel
debugging"选项必须使能,否则在进行第三步的时候,会报“mount:
unknown
filesystem
type
'debugfs'”
2.
编译kernel,下载并且运行之。
3.
挂载debug
file
system
#
mount
-t
debugfs
none
/sys/kernel/debug
或者
#
mkdir
/debug
#
mount
-t
debugfs
none
/debug
进入/debug文件夹及其子文件夹获得想要的信息。

阅读全文

与linux内核debug相关的资料

热点内容
jpg转换成pdf免费软件 浏览:741
范里安pdf 浏览:443
伪造pdf 浏览:75
能删除android文件夹吗 浏览:446
LINUX使用V2ray 浏览:797
找人帮忙注册app推广是什么 浏览:820
独立服务器如何恢复初始化 浏览:11
优秀到不能被忽视pdf 浏览:316
导游程序员家政 浏览:586
22乘28的快速算法 浏览:337
软通动力程序员节2021 浏览:845
安卓系统如何卸载安装包 浏览:870
短信删除助手文件夹 浏览:688
java办公自动化 浏览:342
php中超链接 浏览:254
linux默认路由设置 浏览:36
linux如何挂载iso 浏览:432
vs程序换文件夹后不能编译 浏览:558
安卓源码编译输入脚本没反应 浏览:47
phpmysql自增 浏览:167