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

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念