linux内核单步调试,Linux内核驱动开发之KGDB单步调试内核(kgdboc方式)
如何单步调试Linux内核一直困扰着linux驱动开发人员,内核有其代码量大、逻辑复杂、与硬件交互的特性。因此,有着不同于应用程序的调试方法,据统计Linux内核开
Linux内核驱动开发之KGDB原理介绍及kgdboe方式配置》。
/**********************************************************************************************************************************/
/**********************************************************************************************************************************/
关键步骤:
一、配置Linux内核,,使其支持KGDB。
依次进行如下配置:
Kernel hacking--->
-*- Magic SysRq key
[*] Kernel debugging
[*] Compile the kernel with debug info
[*] KGDB: kernel debugging with remote gdb --->
KGDB: use kgdb over the serial console
并生成
二、修改u-boot的启动参数bootargs以支持kgdb调试:
setenv bootargs 'console=ttyS0,115200n8 kgdboc=ttyS0,115200 kgdbwait …… nfsroot=……'
主要增加以上红色字体部分,指定kgdb使用开发板上的哪个串口,注意这里是串口名而不是设备文件/dev/ttyS0。
OMAP3_EVM # tftp
smc911x: detected LAN9220 controller
smc911x: phy initialized #by guoqingbo
smc911x: MAC 02:01:05:96:02:01
Using smsc911x-0 device
TFTP from server 192.168.1.93; our IP address is 192.168.1.94
Filename 'uImage'.
Load address: 0x82000000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
##########################
done
Bytes transferred = 2459200 (258640 hex)
Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
serial8250.0: ttyS0 at MMIO 0x4806a000 (irq = 72) is a ST16654
console [ttyS0] enabled #by guoingbo
serial8250.1: ttyS1 at MMIO 0x4806c000 (irq = 73) is a ST16654
serial8250.2: ttyS2 at MMIO 0x49020000 (irq = 74) is a ST16654
kgdb: Registered I/O driver kgdboc.
kgdb: Waiting for connection from remote gdb...
截图来说明一下:
五、使用gdb调试vmlinux文件。使用前述博文《在ubuntu10.04成功移植gdbserver及gdbserver使用介绍(用于CCSV5.2远程调试ARM
CORTEX-A8程序)
set remotebaud 115200
target remote /dev/ttyS1
然后同样在Linux内核源码目录下运行如下命令:
arm-none-linux-gnueabi-gdb ./vmlinux
Reading symbols from /home/ss/develop_environment/v2/sys/dvsdk/ti-dvsdk_dm3730-evm_4_02_00_06/psp/linux-2.6.32-psp03.00.01.06.sdk/vmlinux...done.
During symbol reading, DW_AT_name missing from DW_TAG_base_type.
During symbol reading, unsupported tag: 'DW_TAG_const_type'.
During symbol reading, Child DIE 0x408b33 and its abstract origin 0x4085ee have different parents.
During symbol reading, DW_AT_type missing from DW_TAG_subrange_type.
kgdb_breakpoint () at kernel/kgdb.c:1744
1744
arch_kgdb_breakpoint();
(gdb)
截图:
DDD调试内核的界面
linux内核单步调试,Linux内核驱动开发之KGDB单步调试内核(kgdboc方式)相关推荐
- Android驱动开发之Hello实例(基于高通msm8909)
点击打开链接 Android驱动开发之Hello实例: 驱动部分 modified: kernel/arch/arm/configs/msm8909-1gb_w100_hd720p-perf_de ...
- Android驱动开发之Hello实例
Android驱动开发之Hello实例: 驱动部分 modified: kernel/arch/arm/configs/msm8909-1gb_w100_hd720p-perf_defconfig ...
- iOS开发之Xcode常用调试技巧总结
转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...
- 微信公众号开发之VS远程调试
目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 (四)微信公众号开发之网页授权获取用户基本信息 (五)微信公众号开发之网页中及 ...
- Linux驱动开发之IIC驱动实验【完整教程】
本实验基于正点原子ALPHT开发板上的AP3216C作为实验开展对象 基础知识 1.IIC总线驱动 IIC总线驱动是对IIC硬件体系结构中适配器端的实现,适配器可由CPU控制,甚至可以直接集成在C ...
- ⑭tiny4412 Linux驱动开发之cpufreq子系统驱动程序
本次我们来说一下CPU动态调频子系统. 首先来看一下三星Exynos 4412的datasheet,如下: 上图就是Exynos 4412的时钟分布图,可以看到CPU的频率可以在1.4GHz~200M ...
- linux驱动开发之spi-omap-100k.c源码分析
代码分析 对于linux的驱动代码来说,我们要从后往前分析: /** OMAP7xx SPI 100k controller driver* Author: Fabrice Crohas <fc ...
- ⑨tiny4412 Linux驱动开发之1-wire子系统(DS18B20)驱动程序
本来这次想做LCD背光灯的调节的,但是没有调通,时间很紧迫,就转向了其它东西,昨天调了一下DHT11,今天又调了一下DS18B20,还算有个安慰,本来是想用1-wire子系统做的,但是时间上有点紧,要 ...
- ㉕AW-A33 Linux驱动开发之audio子系统驱动程序
在Linux源码里,Aduio这一部分现在是一个独立文件夹叫sound,在2.x的版本时,sound这个目录是在drivers里的,后来从这个里面剥离出来了,很多人不知道其中的原因,我也不知道,我们先 ...
最新文章
- lzg_ad:使用Virtual PC 部署和测试XP Embedded 发布镜像
- 使用 WebIDE 三分钟上手函数计算
- WINCE6.0+S3C2443自动重启的实现
- Java 接口和抽象类可以被new么?
- mysql表空间大小_浅谈mysql中各种表空间(tablespaces)的概念
- 韩顺平循序渐进学java 第13讲 抽象类.接口
- 【T-SQL系列】新的排序函数
- java 假设当前时间_Java中与日期和时间相关的类和方法
- DPDK | 如何在用户空间使用大页内存hugepage
- 第二章 html标记语言,第二章-认识HTML标签
- Linux: Shared MIME
- jmeter404_JMeter – 如何记录失败的响应的完整请求?
- qq2018旧版本7.3.1下载_qq音乐2018老版本下载
- Amesim液压仿真基础与液压知识经验结合专题
- 链表大小排序方法c语言,链表排序——选择排序法(纯C语言版)
- 华为手机root的最简单方法教程!附专用root工具!详细
- Yii2基本概念之——行为(Behavior)
- 嵌入式学习——使用STM32F103基于HAL库移植uCOS-III
- 生命与负熵---宇宙的心弦
- layer.open打不开弹窗的问题