如何单步调试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方式)相关推荐

  1. Android驱动开发之Hello实例(基于高通msm8909)

    点击打开链接 Android驱动开发之Hello实例: 驱动部分 modified:   kernel/arch/arm/configs/msm8909-1gb_w100_hd720p-perf_de ...

  2. Android驱动开发之Hello实例

    Android驱动开发之Hello实例: 驱动部分 modified:   kernel/arch/arm/configs/msm8909-1gb_w100_hd720p-perf_defconfig ...

  3. iOS开发之Xcode常用调试技巧总结

    转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...

  4. 微信公众号开发之VS远程调试

    目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 (四)微信公众号开发之网页授权获取用户基本信息 (五)微信公众号开发之网页中及 ...

  5. Linux驱动开发之IIC驱动实验【完整教程】

    本实验基于正点原子ALPHT开发板上的AP3216C作为实验开展对象 基础知识 1.IIC总线驱动   IIC总线驱动是对IIC硬件体系结构中适配器端的实现,适配器可由CPU控制,甚至可以直接集成在C ...

  6. ⑭tiny4412 Linux驱动开发之cpufreq子系统驱动程序

    本次我们来说一下CPU动态调频子系统. 首先来看一下三星Exynos 4412的datasheet,如下: 上图就是Exynos 4412的时钟分布图,可以看到CPU的频率可以在1.4GHz~200M ...

  7. linux驱动开发之spi-omap-100k.c源码分析

    代码分析 对于linux的驱动代码来说,我们要从后往前分析: /** OMAP7xx SPI 100k controller driver* Author: Fabrice Crohas <fc ...

  8. ⑨tiny4412 Linux驱动开发之1-wire子系统(DS18B20)驱动程序

    本来这次想做LCD背光灯的调节的,但是没有调通,时间很紧迫,就转向了其它东西,昨天调了一下DHT11,今天又调了一下DS18B20,还算有个安慰,本来是想用1-wire子系统做的,但是时间上有点紧,要 ...

  9. ㉕AW-A33 Linux驱动开发之audio子系统驱动程序

    在Linux源码里,Aduio这一部分现在是一个独立文件夹叫sound,在2.x的版本时,sound这个目录是在drivers里的,后来从这个里面剥离出来了,很多人不知道其中的原因,我也不知道,我们先 ...

最新文章

  1. lzg_ad:使用Virtual PC 部署和测试XP Embedded 发布镜像
  2. 使用 WebIDE 三分钟上手函数计算
  3. WINCE6.0+S3C2443自动重启的实现
  4. Java 接口和抽象类可以被new么?
  5. mysql表空间大小_浅谈mysql中各种表空间(tablespaces)的概念
  6. 韩顺平循序渐进学java 第13讲 抽象类.接口
  7. 【T-SQL系列】新的排序函数
  8. java 假设当前时间_Java中与日期和时间相关的类和方法
  9. DPDK | 如何在用户空间使用大页内存hugepage
  10. 第二章 html标记语言,第二章-认识HTML标签
  11. Linux: Shared MIME
  12. jmeter404_JMeter – 如何记录失败的响应的完整请求?
  13. qq2018旧版本7.3.1下载_qq音乐2018老版本下载
  14. Amesim液压仿真基础与液压知识经验结合专题
  15. 链表大小排序方法c语言,链表排序——选择排序法(纯C语言版)
  16. 华为手机root的最简单方法教程!附专用root工具!详细
  17. Yii2基本概念之——行为(Behavior)
  18. 嵌入式学习——使用STM32F103基于HAL库移植uCOS-III
  19. 生命与负熵---宇宙的心弦
  20. layer.open打不开弹窗的问题

热门文章

  1. 馒头店,普遍是开在菜市场附近。
  2. 机器学习——逻辑回归原理(python实现)
  3. office skill
  4. ITRA 2021 组委会 积分申请流程
  5. 444句常用英文生活用语
  6. python字符类型判断以及转换
  7. 马云第3次高考的成绩,放今年能上个什么档次的大学
  8. 使用github搭建个人网站(HTTP服务器)
  9. prepend 和 prependTo的区别
  10. 获取oracle 当前时间前10分钟数据