1、修改Makefile编译优化级别

编译器优化后,很多调试信息看不到,不好调试,修改linux-4.5.3/Makefile的KBUILD_CFLAGS优化级别为“-O1”。("-O0"会导致部分代码编译不过)

2、打开编译内核生成调试信息开关

Kernel hacking  --->

Compile-time checks and compiler options  --->

[*] Compile the kernel with debug info

3、JLinkGDBServer连接开发板

由于在linux下使用JLink,JLink_Linux_V600h_x86_64没有GUI界面,因此需要命令行启动JLinkGDBServer。

s3c6410属于ARM11,JLinkGDBServer指定device为ARM11即可(Windows JLinkGDBServer GUI会弹出窗口选择,列表里面可以看到支持的device及其他参数),JLinkGDBServer启动命令如下:

JLinkGDBServer -device ARM11

连接开发板后如下:

"GDB Server Listening port:     2331"显示JLinkGDBServer监听的端口,与gdbserver一样,使用gdb连接2331该端口即可远程调试ARM开发板。

如果要调试ARM linux内核的启动代码,可以让开发板停止在u-boot里面,等JLinkGDBServer及gdb连接后,在内核解压地址设置断点,再启动linux内核,即可从内核启动第一条指令开始调试。

4、gdb连接JLinkGDBServer

使用arm-linux-gnueabihf-gdb连接JLinkGDBServer,gdb加载vmlinux不是zImage。

执行命令如下:

arm-linux-gnueabihf-gdb vmlinux

在gdb命令行执行"target remote :2331"即可。(target remote指定JLinkGDBServer监听的ip地址及port),命令如下:

target remote :2331

gdb连接上之后,ARM开发板会暂停halt,连接过程如下:

5、ARM linux内核断点示例

通过编译生成的System.map查看内核有哪些函数,对感兴趣的函数设置断点,如内核定时器do_timer。

执行命令“break do_timer”。

命中断点,查看do_timer函数调用栈。

从调用栈可以看到do_timer的最上层调用函数为__irq_svc,也就是定时器中断是发生在svc模式下,即此中断发生时,cpu运行在内核模式。

通过frame命令查看函数调用栈代码。"frame 11"查看handle_one_vic代码,代码如下:

从图中可以看到,内核通过“readl_relaxed(vic->base + VIC_IRQ_STATUS)”读取向量中断控制器的状态寄存器VICxIRQSTATUS,通过ffs获取VICxIRQSTATUS第一个为1的比特位,为1的比特位表示对应的中断被激活。(由于编译器优化原因,函数栈显示的hwirq并不一定准确,为了获取更准确的信息,可以通过“__attribute__((optimize("O0")))”对感兴趣的函数单独设置优化级别)

JLinkGDBServer调试ARM linux内核相关推荐

  1. ARM DS-5单步调试ARM64 linux 内核

    目录 1 介绍 2 开发环境 3 准备工作 3.1 Ubuntu环境准备 3.2 源代码准备 3.3 DS-5准备 3.4 使用DS-5调试源码 3.4.1 建立源码工程 3.4.2 创建debug配 ...

  2. arm linux 内核崩溃,用sysrq-trigger实现ARM Linux一键内核崩溃、一键关机、一键dump信息等...

    原创 宋宝华 Linux阅码场 2018-01-12 sysrq有多种功能,对于ARM Linux这种嵌入式没键盘的系统来说,也可以通过/proc/sysrq-trigger来进行操作. 实验平台:Q ...

  3. ARM Linux 内核 panic 之cache 一致性 ——cci-400 cache一致互联

    ARM Linux 内核 panic 之cache 一致性 --cci-400 cache一致互联 CCI-400 集合了互联和一致性功能,有 2 个 ACE slave 接口和 3 个 ACE-Li ...

  4. 第四十一期-ARM Linux内核的系统调用(1)

    作者:罗宇哲,中国科学院软件研究所智能软件研究中心 上一期中我们介绍了工作队列相关的关键函数,这一期我们将介绍ARM Linux内核中的系统调用. 一.ARM Linux内核中的系统调用 在ARM L ...

  5. 第四十二期-ARM Linux内核的系统调用(2)

    作者:罗宇哲,中国科学院软件研究所智能软件研究中心 上一期中我们介绍了ARM Linux内核中的系统调用和定义系统调用的流程,这一期我们将介绍系统调用的执行过程. 一.ARM Linux内核中系统调用 ...

  6. 第三十四期-ARM Linux内核的中断(4)

    作者:罗宇哲,中国科学院软件研究所智能软件研究中心 上一期中我们介绍了ARM Linux内核中外设中断处理的部分流程,这一期我们将继续介绍ARM Linux内核的外设中断处理流程中与中断描述符相关的部 ...

  7. 【openwrt】如何编译和运行一个arm linux 内核

    如何编译和运行一个arm linux 内核 1. 准备工具 linux4.0 内核 busybox工具包 2. busybox手工编译一个最小的文件系统 cd busybox export ARCH= ...

  8. linux arm panic,ARM Linux 内核 panic 之cache 一致性 ——Cortex-A9多核cache和TLB一致性广播...

    ARM Linux 内核 panic 之cache 一致性 --Cortex-A9多核cache和TLB一致性广播 Cortex-A9的多喝CPU可以接收和执行一致性广播操作,当其使能并处于SMP模式 ...

  9. 针对ARM Linux内核swapper_pg_dir简单分析

    在分析ARM Linux内核的内存管理的时候不小心考到了System.map有个特别的地方: 0000000c A cpu_arm926_suspend_size c0004000 A swapper ...

最新文章

  1. mysql存储过程 php_PHP调用MYSQL存储过程实例
  2. php 数据集转换树、递归重组节点信息多维数组(转)
  3. C# SQLite 数据库操作实例2
  4. Inside Kolla - 04 Kolla 目录结构
  5. ceb怎么转换成word_PDF怎么转换成Word?分享免费转换技巧!
  6. 谷歌浏览器书签栏怎么隐藏 谷歌Chrome浏览器书签栏隐藏教程
  7. 重装系统Win10电脑磁盘被写保护怎么办
  8. ViewStub基本用法,include merge
  9. 华为推送:应用中的百度地图jar包和华为Push SDK中的百度地图相冲突
  10. 使用Python修改图片格式
  11. .rpt 文件怎麽打開?Crystal Reports 打開.rpt失敗 ?
  12. matlab个版本介绍,matlab软件功能简要介绍及版本描述
  13. 地图比例尺与空间分辨率之间的关系_航高、分辨率与比例尺的关系
  14. 【Response】全面总结并理解response
  15. vite创建vue保姆级教程
  16. 路由器wifi信号测试软件,顶级无线路由器信号强度测试(5GHz)_网络设备无线网络和技术-中关村在线...
  17. 资讯_计算机屏幕_镜面屏;
  18. Linux shell:fsck命令使用方法
  19. 【Storm】【一】简介
  20. Java生成条形码图片到本地

热门文章

  1. layui点击某列打开并跳转指定tab
  2. RE《歌舞伎町案内人》
  3. 餐饮企业数据可视化大屏(智慧餐饮)
  4. 雾里探花之Hadoop初识
  5. 基于大数据的个性化推荐系统(转)
  6. JavaWeb实现成语图片验证码
  7. 计算机的内存储器是由许多存储单元组成的,计算机一级笔试一
  8. 嵌入式linux下u盘升级的设计
  9. 【C++】类和对象(中篇)(万字)
  10. 【9条收藏】减瘦要领,在精不在多