kgdb调试环境的建立

2023-10-27

发信人: dubblelee (星际浪子), 信区: KernelTech
标  题: kgdb调试环境的建立
发信站: BBS 水木清华站 (Tue Jan 25 00:21:44 2005), 转信

【声明】lidlu原创,本文供linux学习使用,可自由转发,希望可以跟学习linux的朋友
多多交流,lidlu@163.com
KGDB-linux内核调试环境的创建
        前段时间由于刚开始接触linux,一切处在摸索的状态,为建立一个KGDB的内核调
试环境
, 查了很多资料费了很多周折,后来总算是完成了。但当时没来得及总结,今天乘着有
时间,写个简单的总结,希望能对那些需要构建kgdb环境的linux朋友有些许帮助.
        KGDB是个源代码级的内核调试环境,换句话说,它其实就是gdb远端调试.gdb调试
应用程
序,仅需在一台机子上就可实现,但要利用gdb调试内核,则需要两台机子,通过串口相连,
一台机子称为开发主机(Host),另外一台机子称为目标机(target),两台机子预先装有Re
d Hat linux 7.3系统.
Host运行gdb调试程序,target运行待调试的系统内核,Host的gdb程序通过串口线对目标
机运行的内核进行调试和控制.gdb调试程序是一个源代码级的调试,可对待调试的操作系
统内核进行设立断点和单步执行,由此可清楚的了解内核的工作过程以及应用程序如何由
系统内核实现.
一.     硬件配置工作:
        KGDB是通过串口实现开发主机Host对目标机的控制过程,这里首先需要准备一条
串口线
将两台机子连起来.我的串口线是用普通网线将两个9口公口串口线连接起来,只用到了三
根线,将串口的管脚2,3,5连起来.这里连的时候,需要注意两个串口管脚的连接:5-5,2-3
,3-2.即将2,3对调.因为9口串口中2为发送数据,3为接收数据,5为接地.
        测试串口工作是否正常:(windows下可直接利用超级终端就可判断),但在linux下
有所不
同.
在开发主机上:
#stty ispeed 38400 ospeed 38400 -F /dev/ttyS0   //设置串口的收发速率
#cat testfile.txt > /dev/ttyS0            //将文件testfile.txt内容输入到串口
ttyS0中
        
        在目标主机上:
stty ispeed 115200 ospeed 115200 -F /dev/ttyS0   //设定串口速率
cat /dev/ttyS0                                          //接收从串口中收到的内
容并显示到屏幕上
若目标主机屏幕上能看到testfile.txt内容,反过来目标机发,开发机收,也显示正常,则
说明串口工作正常.
二.     KGDB具体建立过程
KGDB是一个内核补丁,需要考虑版本的问题.下面我以2.4.18内核为例,具体讲一下kgdb调
试环境的建立步骤.
开发主机:
1.      下载内核源代码2.4.18并把这个文件拷贝到/usr/src/目录下,记为linux2.4.18,
为其
建立一个链接文件linux.下载kgdb内核补丁kgdb2.4.18 (kgdb补丁下载地址http://kgd
b.linsyssoft.com/downloads.htm)到目录/usr/src/linux下.
2.      转到/usr/src/linux目录,执行命令$patch -p1< kgdb2.4.18给2.4.18内核打上
kgdb
内核补丁.
3.      对内核进行编译,编译内核请参考相关文章.主要是执行几个命令
a)      make menuconfig(字符界面)/xconfig(图形界面),对要编译的内核选取选项,将
kern
el hacking选项下选取kernel support for GDB这个选项,对应于核心代码里面的宏就是
CONFIG_GDB.
b)      依次运行
#make dep
#make clean
#make bzImage
#make modules
#make modules_install 生成新的内核.
这里生成了两个文件:
/usr/src/linux/System.map
/usr/src/linux/arch/i386/bzImage
以及带调试信息的/usr/src/linux/vmlinux,作以后调试用.
目标主机:
                将开发主机上新生成的内核文件System.map, bzImage 下载到目标机
boot目录下,改名
为Systemkgdb.map与bzImagekgdb.可用ftp文件传输实现.
                修改/etc/lilo.conf配置文件,用新生成的内核启动文件
Systemkgdb.map与bzImagekg
db启动系统.
                当以此内核启动目标机系统时,它会一直等待远端的主机连接,显示如下
信息:
                        Waiting for connection from remote gdb...,
再次转到开发主机:
进入/usr/src/linux目录下,运行
<root#> gdb ./vmlinux            //含调试信息的未压缩内核
(gdb) set remotebaud 38400
(gdb) target remote /dev/ttyS0
Remote debugging using /dev/ttyS0
breakpoint () at kernel/kgdb.c:1212(源代码中所在行号)
1212:atomic_set(&kgdb_setting_breakpoint, 0);
warning: shared library handler failed to enable breakpoint
(gdb)
        若出现上述信息,则说明kgdb的调试环境已经建立起来了.输入命令c,则可看到目
标主机
继续启动,直至出现shell命令提示符.
        至此,就可在开发主机上利用gdb命令对待调试的内核设定端点,查看内核函数调
用情况
.
三.kgdb调试示例
        我编了一个简单的socket client/server程序,client运行在除开发主机与目标
机外的
另外一台机子上,同样预装有linux系统.serve程序运行在目标机上,两者进行通信,而开
发主机则对这个通信过程进行控制.
程序工作流程:server端在create,…Accept后就一直等待连接,如果有client连接过来,
server就会回馈一个信息给client,并继续等待client连接.而client一启动就会向Serv
er要求连接,然后接收信息,并在屏幕上输出这个信息后就结束.
追踪的方法是在开发主机将中断点设在sys_socketcall上,然后用step这个指令来单步跟
踪.
实现步骤:
1.      启动KGDB,在目标机开完机后,可以在Host端下,用ctrl+c让远端中断,并使Host取
得控
制权.
2.      下"break sys_socketcall"指令来设定中断点在sys_socketcall这个函数上.
3.      下"cont"释放控制权,让远端继续执行.
4.      在Target端执行Server程序,之后就可以看到控制权回到Host端,并中断在
sys_socke
tcall
5.      现在可以用"step","next"来一步步跟踪核心.
看了linux网络核心源代码可以知道,在linux下的socket通信,对socket的各种操作,包括
create,bind,connect,send,recv等都是通过sys_socketcall系统调用实现的.所以在系
统内核中的sys_socketcall系统调用上设定断点,就可跟踪到socket通信过程中所涉及到
的对核心的各种函数调用关系. 详细过程可参考【2】
总结:
        内核调试工具有许多种,如printk,kdb。Printk使用起来非常烦琐,而kdb显示
的组合
码形式,看起来非常晦涩。
        但kgdb内核调试,是基于源代码级的调试,可对照着linux源代码进行调试,看
起来非
常轻松。当然,要实现调试,首先要对源码有相当的了解才行,呵呵。
参考文献
【1】   KGDB quick start ,http://kgdb.linsyssoft.com/quickstart.htm
【2】   追踪Linux TCP/IP 核心-使用远程除错,蔡品再,林盈达。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kgdb调试环境的建立 的相关文章

  • linux硬链接与软链接

    http www cnblogs com sonic4x archive 2011 08 05 2128543 html 1 Linux链接概念 Linux链接分两种 一种被称为硬链接 Hard Link 另一种被称为符号链接 Symbol
  • cramfs文件系统制作

    参考 http blog csdn net liukun321 article details 7256456 1 首先配置内核 打开对cramfs的支持 File systems gt Miscellaneous filesystems
  • linux中如何修改文件夹的用户权限

    linux中如何修改文件夹权限 linux中 可以使用chown命令来修改文件夹的用户权限 环境 windows 7 virtualbox fedora 15 kde 下面举例给出 1 以普通用户admin登录linux 利用su 切换到r
  • 精讲!查看和控制进程相关命令

    这里写目录标题 一 查看进程的相关命令 1 ps 命令 查看静态的进程统计信息 Processes Statistic 2 top 命令 查看进程动态信息 3 pgrep 命令 查询进程信息 4 pstree 命令 查看进程树 二 控制进程
  • Linux下安装QT4.3.2

    安装qt是因为我刚安装过mplayer想装个前端上网 一查 很多都推崇用smplayer 我也就下决心装上 刚开始一直都装不上 后来静心读了读Install文件才明白要装smplayer必须要有qt4 2或者更高版本 用rpm qa qt才
  • linux驱动开发(四):ioctl()函数

    前文中我们介绍了应用程序通过使用虚拟文件系统VFS提供的接口 来控制字符驱动程序 完成字符驱动设备的open close read write操作 但是如果我们想进行除此以外的其他操作 拓展一些file operations给出的接口中没有
  • 我使用过的Linux命令之stty - 显示和修改终端行设置

    原文链接 http codingstandards iteye com blog 826924 用途说明 stty命令用于显示和修改终端行设置 change and print terminal line settings 常用参数 stt
  • 07 - 日志服务器的搭建与攻击

    目录 1 项目环境 2 拓扑图 3 思路 4 配置GW CentOS 7 4 1 配置ens33 4 2 配置ens32 4 3 配置ens34 5 配置Server CentOS 7 1804 7 配置Syslog CentOS 7 18
  • Linux下五种I/O模型详解(阻塞IO、非阻塞IO、IO复用、信号驱动、异步IO)

    https blog csdn net gui951753 article details 82348485 感谢博主 我已收藏
  • Linux文件误删除恢复操作

    本文参考http write blog csdn net postedit ticket ST 491405 OGjDDusZeyMgVQ7bHW7f passport csdn net 前言 作为一个多用户 多任务的操作系统 Linux下
  • Shell脚本中字符串截取功能

    在Shell脚本编写中 有几个地方都是要用到字符串截取的功能 那将这块的内容进行下记录 1 字符串变量的截取操作 对字符串变量的截取操作一般都是通过 操作符 的方式进行 1 从指定位置index截取固定长度 格式 string start
  • Ubuntu安装java

    转自 https www cnblogs com ziyue7575 p 13898610 html java8 apt安装 参考 https www cnblogs com zzy1024 p 11406269 html 若是没有配置国内
  • 在Fedora16中安装Qt

    首先 在http www trolltech com download上下载linux下的qt源文件 我下载时最新版是 qt everywhere opensource src 4 7 4 tar gz 将该文件放到某个目录下 进行解压缩
  • Centos 7安装mysql

    1 安装前清理工作 1 1 1 清理原有的mysql数据库 使用以下命令查找出安装的mysql软件包和依赖包 rpm pa grep mysql 显示结果如下 mysql80 community release el7 1 noarch m
  • Linux Top 命令解析

    转自 http www jb51 net LINUXjishu 34604 html TOP是一个动态显示过程 即可以通过用户按键来不断刷新当前状态 如果在前台执行该命令 它将独占前台 直到用户终止该程序为止 比较准确的说 top命令提供了
  • 挂载mount问题“wrong fs type, bad option, bad superblock on ”的解决办法

    重装系统后挂载一般会出现如下问题 problem ivy ivy OptiPlex 380 source sudo mount 192 168 9 18 home deep dev env source mount wrong fs typ
  • gdb 的使用总结

    1 设置动态库的路径 set solib search path PATH 如果需要设置多个路径 则在PATH直接用 冒号分隔 set solib search path PATH1 PATH2
  • docke的基础入门

    docker基础入门操作 一 如何安装docker 一 如何安装docker 安装docker命令通过一下命令顺序执行 即可进行安装 校验操作系统内核版本 要求是3 10以上的版本 1 安装一些必要的系统工具 其中yum utils包含yu
  • Linux系统制作Ubuntu18.04启动盘

    转自 https blog csdn net xiaoma 2018 article details 85059930 首先进入 Ubuntu 官网下载 Ubuntu18 04 ios 镜像包 下载的镜像包为 ubuntu 18 04 1
  • Fedora 10網卡消失的問題

    http itgroup blueshop com tw towns hc n convew i 6000 今天看到肉鬆Selinux的問題 想說來測試處理一下 將以備份出來的Fedora 10 VM拿出來用 啟動系統後 出現了一個怪問題

随机推荐

  • Android TV开发总结【焦点】

    一 焦点获取 首先 TV端的开发和我们手机端开发最大的区别就在于TV端存在焦点的概念 如下图 可想而知 手机端我们直接通过点击 长按某个区域处理响应事件处 但是TV端只能通过遥控器的上下左右来操控焦点 从而选中特定的区域处理相应事件 在TV
  • Dialog、Drawer 点击浏览器回退、前进,遮罩层不消失问题

    文章目录 问题 一 modal append to body 二 解决方案 方案1 给组件添加 modal append to body false 属性 方案2 全局 推荐此方法 问题 Vue 项目中使用 element ui Dialo
  • 《计算机网络》速成

    课时1 计算机网络体系结构 考点 重要程度 占分 题型 计算机网络的组成和功能 选择题 计算机网络的分类 选择题 性能指标 选择题 计算题 体系结构与参考模型 选择题 1 1计算机网络概述 计算机网络的组成 从组成部分看 一个完整的计算机网
  • 解析Python爬虫常见异常及处理方法

    作为专业爬虫程序猿长期混迹于爬虫ip解决方案中 我们经常会遇到各种各样的异常情况 在爬虫开发过程中 处理这些异常是不可或缺的一部分 本文将为大家总结常见的Python爬虫异常 并分享相应的处理方法 帮助你避免绊倒在爬虫之路上 一 网络连接异
  • mysql 存储过程 多行_MySQL结果由存储过程中的多行组成

    我正在处理的存储过程有时会出错 我得到的结果包含多个行错误 但仅限于某些JOB ID INPUT值 我明白是什么导致了这个错误 所以我试着非常小心地确保我的返回值在它们应该是标量时 很难看到存储过程 所以我不确定可以在哪里生成错误 由于错误
  • 使用FullCalendar做日程安排

    自定义实现了加载 删除 样式的定义 鼠标悬停的显示 如图 单击弹出编辑框 其中日周天的选择器都是作为插件引入的 这个组件还是蛮庞杂的 功能也强大 需要时间去研究
  • 华为面试技巧

    我今年大四 通信工程专业 国庆前签了华为研发 因为之前在网上看了很多关于各大公司的面试笔试总结 对我帮助很大 所以 我也奉献出自己的一点力量 为找工作的同学提供一些参考 希望大家找到好作 只针对软件研发 一 准备 非常重要 没错 这一点特别
  • css列表带点,CSS 列表

    CSS 列表 CSS 列表属性作用如下 设置不同的列表项标记为有序列表 设置不同的列表项标记为无序列表 设置列表项标记为图像 列表 在 HTML中 有两种类型的列表 无序列表 ul 列表项标记用特殊图形 如小黑点 小方框等 有序列表 ol
  • 爬虫scrapy框架中间件的使用

    1 scrapy中间件的分类和作用 1 1 scrapy中间件的分类 根据scrapy运行流程中所在位置不同分为 中间件离哪个模块近就称为什么中间件 下载中间件 爬虫中间件 1 2 scrapy中间的作用 预处理request和respon
  • vue3和vite双向加持,uni-app性能再次提升

    uni app对vue3 Vite的升级 是一个渐进式过程 2020年9月 小程序平台支持 vue3 开发 小程序平台编译器依然使用webpack 2021年5月 H5平台支持 vue3 开发 H5平台编译器升级为 Vite 2021年8月
  • 对数及运算法则

    1 对数源于指数 是指数函数反函数 因为 y ax 所以 x logay 2 对数的定义 定义 如果 N ax a gt 0 a 1 即a的x次方等于N a gt 0 且a 1 那么数x叫做以a为底N的对数 logarithm 记作 x l
  • 滨州医学院做计算机作业的网站,滨州医学院教务网(点击进入)

    滨州医学院是山东省省属普通高等医学院校 60余年来 几代滨医人坚持 教学第一 质量至上 育人为本 德育为先 的办学传统 艰苦奋斗 求真务实 开拓创新 学校各项事业取得长足发展 为区域和国家经济社会发展做出了积极贡献 历史沿革滨州医学院的前身
  • 微信小程序:更改页面背景颜色

    微信小程序的页面背景色默认是白色 但可以自主更改 如果想所有页面的背景色都同时一种颜色 只需在app wass里修改 如果想每个页面的背景色都不一样 则需要在每个页面对应的 wass文件里修改 一开始犯了一个错误 以为在json文件里的wi
  • OCR/STR生僻字数据训练

    1 印章如何识别 使用带tps的识别网络或abcnet 2 使用极坐标变换将图片拉平之后使用crnn 2 多语言的字典里是混合了不同的语种 这个是有什么讲究吗 统一到一个字典里会对精度造成多大的损失 统一到一个字典里 会造成最后一层FC过大
  • xshell,winscp,xftp无法用root用户登录

    1 编辑vim etc ssh sshd config文件 把PermitRootLogin Prohibit password 添加 注释掉 新添加 PermitRootLogin yes 更改PermitEmptyPasswords为
  • 计算机网络—DNS协议

    写在前面 DNS协议 应用层协议 主要内容 功能 将机器的域名转换成IP地址 因为IP难以记忆使用域名会非常容易记忆 DNS是一套分布式的域名服务系统 每个DNS服务器存放着大量的机器名和IP地址的映射 并动态更新 Linux在 etc r
  • Infinity插件 让Chrome浏览器实现添加10+N个快捷方式(不限制)

    Infinity插件 让Chrome浏览器实现添加10 N个快捷方式 不限制 文章目录 Infinity插件 让Chrome浏览器实现添加10 N个快捷方式 不限制 前言 一 Infinity下载安装 1 1 下载 1 2 解压zip 1
  • 白盒测试工具CodeTest

    转载自 http www shangxueba com jingyan 97515 html 1 CodeTest 概述 CodeTest是嵌入式系统测试工具 同时也能做嵌入式部分模块测试 要求 目标板和操作系统能正确运行 2 CodeTe
  • 人生百味-1:人际关系的分支语句--10个switch,1个if else

    人与人之间的关系 就像计算机网络 不同的连接 协议类型不同 协议处理也不相同 1 对待领导 要么会哭 要么会笑 领导也是人 同情心 善意 讨好 2 对待下属 要么容忍 要么走人 下属的人能力有三种 超过自己 危险 对方主动走人 低于自己 正
  • kgdb调试环境的建立

    发信人 dubblelee 星际浪子 信区 KernelTech 标 题 kgdb调试环境的建立 发信站 BBS 水木清华站 Tue Jan 25 00 21 44 2005 转信 声明 lidlu原创 本文供linux学习使用 可自由转发