KGDB调试LINUX内核

2024-01-15 19:32
文章标签 linux 调试 内核 kgdb

本文主要是介绍KGDB调试LINUX内核,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

摘要:
本文介绍了如何在DB12X板子上开启KGDB调试功能.如何运行AGENT-PROXY进行代理串口的访问.如何运行GDB单步跟踪.
1.环境
我的环境是:
一块DB12X ATHEROS AP 板子,MIPS架构,内核LINUX 2.6.31
一台UBUNTU 14.04电脑.
2.修改内核配置
进入SDK的LINUX内核目录
cd linux/kernels/mips-linux-2.6.31/arch/mips/configs/
采用DEBUG版本的配置文件
cp db12x-debug_defconf db12x_defconf

3.关闭看门狗
cd linux/kernels/mips-linux-2.6.31/arch/mips/atheros/
vi wdt.c
找到70行,然后注释掉:
//ath_reg_wr(ATH_WATCHDOG_TMR, usec);

4.编译内核

5.修改kermit的脚本启动参数
需要增加kgdboc=ttyS0,115200 kgdbwait 参数
kgdboc 指的是OVER CONSOLE的KGDB使能
KGDBWAIT指的是启动一开始就等着GDB连接
如果如下:
LINEOUT “setenv bootargs kgdboc=ttyS0,115200 kgdbwait console=ttyS0,115200 root=31:02 rootfstype=squashfs init=/sbin/init mtdparts=ath-nor0:256k(u-boot),256k(u-boot-env),6m(rootfs0),1m(uImage0),6m(rootfs1),1m(uImage1),320k(config),1m(reserved),64k(log),64k(manu),64k(ART)”
INPUT 10 “ar7240>”

6.配置串口代理
启动agent-proxy,在5550端口侦听,等待TELNET连接
在5551端口侦听,GDB的连接.
所有连接的数据都代理到串口/dev/ttyUSB0去,波特率115200
ubuntu主机上运行的结果如下:
sudo ./agent-proxy 5550^5551 0 /dev/ttyUSB0,115200
[sudo] password for snowpiaop:
Agent Proxy 1.96 Started with: 5550^5551 0 /dev/ttyUSB0,115200
Agent Proxy running. pid: 15130

  1. telnet 到串口5550
    telnet localhost 5550
    这样就相当于运行minicom连接串口了一样,能够看到串串口的输出.

  2. 启动内核
    此时会停在kdb处.
    如下:
    ar7240> boot

Booting image at 9f680000 …

Image Name: Linux Kernel Image
Created: 2016-01-23 12:33:54 UTC
Image Type: MIPS Linux Kernel Image (lzma compressed)
Data Size: 1040561 Bytes = 1016.2 kB
Load Address: 80002000
Entry Point: 80230a90
Verifying Checksum at 0x9f680040 …OK
Uncompressing Kernel Image … OK
No initrd
Transferring control to Linux (at address 80230a90) …
Giving linux memsize in bytes, 67108864

Starting kernel …

Booting Atheros AR934x
[1970-01-01 00:00:00:000000]Linux version 2.6.31–LSDK-9.2.0_U7.717(gcc version 4.2.4) #5 Sat Jan 23 20:33:42 CST 2016
[1970-01-01 00:00:00:116000]kgdb: Waiting for connection from remote gdb…

Entering kdb (current=0x83813aa8, pid 1) due to Keyboard Entry
kdb>

表示,已经进入等待远端GDB连接状态.

9.运行GDB连接内核KGDB
/opt/toolchains/mips-linux-uclibc/4.2.4/usr/bin/mips-linux-uclibc-gdb vmlinux
进入了gdb中,再输入如下命令,(gdb)是提示符:
(gdb) tar rem localhost:5551
会有如下输出:
/opt/toolchains/mips-linux-uclibc/4.2.4/usr/bin/mips-linux-uclibc-gdb ./vmlinux
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type “show copying”
and “show warranty” for details.
This GDB was configured as “–host=i386-pc-linux-gnu –target=mips-linux-uclibc”…
(no debugging symbols found)
(gdb) target remote localhost:5551
Remote debugging using localhost:5551
0x80010144 in arch_kgdb_breakpoint ()
(gdb) bt
0 0x80010144 in arch_kgdb_breakpoint ()
1 0x80057be8 in kgdb_breakpoint ()
2 0x80057efc in kgdb_register_io_module ()
3 0x80162a58 in configure_kgdboc ()
4 0x8000243c in do_one_initcall ()
5 0x802d66ac in kernel_init ()
6 0x80008cc8 in kernel_thread_helper ()
7 0x00000000 in ?? ()
(gdb) c
Continuing.

这时,就可以用GDB的命令进行内核的调试.

如果启动参数中没有指定KGDBWAIT,也没关系,进入DB12X板子串口执行
echo g >/proc/sysrq-trigger

以便让GDB停下来,进入到(gdb)提示符下,以便添加断点.

这篇关于KGDB调试LINUX内核的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/609976

相关文章

Python解析器安装指南分享(Mac/Windows/Linux)

《Python解析器安装指南分享(Mac/Windows/Linux)》:本文主要介绍Python解析器安装指南(Mac/Windows/Linux),具有很好的参考价值,希望对大家有所帮助,如有... 目NMNkN录1js. 安装包下载1.1 python 下载官网2.核心安装方式3. MACOS 系统安

Linux find 命令完全指南及核心用法

《Linuxfind命令完全指南及核心用法》find是Linux系统最强大的文件搜索工具,支持嵌套遍历、条件筛选、执行动作,下面给大家介绍Linuxfind命令完全指南,感兴趣的朋友一起看看吧... 目录一、基础搜索模式1. 按文件名搜索(精确/模糊匹配)2. 排除指定目录/文件二、根据文件类型筛选三、时间

Linux配置IP地址的三种实现方式

《Linux配置IP地址的三种实现方式》:本文主要介绍Linux配置IP地址的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录环境RedHat9第一种安装 直接配置网卡文件第二种方式 nmcli(Networkmanager command-line

Linux下修改hostname的三种实现方式

《Linux下修改hostname的三种实现方式》:本文主要介绍Linux下修改hostname的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下修改ho编程stname三种方式方法1:修改配置文件方法2:hFvEWEostnamectl命

Linux虚拟机不显示IP地址的解决方法(亲测有效)

《Linux虚拟机不显示IP地址的解决方法(亲测有效)》本文主要介绍了通过VMware新装的Linux系统没有IP地址的解决方法,主要步骤包括:关闭虚拟机、打开VM虚拟网络编辑器、还原VMnet8或修... 目录前言步骤0.问题情况1.关闭虚拟机2.China编程打开VM虚拟网络编辑器3.1 方法一:点击还原VM

Linux搭建Mysql主从同步的教程

《Linux搭建Mysql主从同步的教程》:本文主要介绍Linux搭建Mysql主从同步的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux搭建mysql主从同步1.启动mysql服务2.修改Mysql主库配置文件/etc/my.cnf3.重启主库my

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi

jdk21下载、安装详细教程(Windows、Linux、macOS)

《jdk21下载、安装详细教程(Windows、Linux、macOS)》本文介绍了OpenJDK21的下载地址和安装步骤,包括Windows、Linux和macOS平台,下载后解压并设置环境变量,最... 目录1、官网2、下载openjdk3、安装4、验证1、官网官网地址:OpenJDK下载地址:Ar

前端bug调试的方法技巧及常见错误

《前端bug调试的方法技巧及常见错误》:本文主要介绍编程中常见的报错和Bug,以及调试的重要性,调试的基本流程是通过缩小范围来定位问题,并给出了推测法、删除代码法、console调试和debugg... 目录调试基本流程调试方法排查bug的两大技巧如何看控制台报错前端常见错误取值调用报错资源引入错误解析错误

linux本机进程间通信之UDS详解

《linux本机进程间通信之UDS详解》文章介绍了Unix域套接字(UDS)的使用方法,这是一种在同一台主机上不同进程间通信的方式,UDS支持三种套接字类型:SOCK_STREAM、SOCK_DGRA... 目录基础概念本机进程间通信socket实现AF_INET数据收发示意图AF_Unix数据收发流程图A