ARM硬件断点

这篇具有很好参考价值的文章主要介绍了ARM硬件断点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

hw_breakpoint 是由处理器提供专门断点寄存器来保存一个地址,是需要处理器支持的。处理器在执行过程中会不断去匹配,当匹配上后则会产生中断。

内核自带了硬件断点的样例linux-3.16\samples\hw_breakpoint\data_breakpoint.c

static void sample_hbp_handler(struct perf_event *bp,
			       struct perf_sample_data *data,
			       struct pt_regs *regs)
{
	printk(KERN_INFO "%s value is changed\n", ksym_name);
	dump_stack();
	printk(KERN_INFO "Dump stack from sample_hbp_handler\n");
}

static int __init hw_break_module_init(void* addr)
{
	int ret;
	struct perf_event_attr attr;

	hw_breakpoint_init(&attr);
	attr.bp_addr = addr;
	attr.bp_len = HW_BREAKPOINT_LEN_4;//监控addr开始的4字节
	attr.bp_type = HW_BREAKPOINT_W | HW_BREAKPOINT_R;//读写该地址都能触发

	sample_hbp = register_wide_hw_breakpoint(&attr, sample_hbp_handler, NULL);
	if (IS_ERR((void __force *)sample_hbp)) {
		ret = PTR_ERR((void __force *)sample_hbp);
		goto fail;
	}

	printk(KERN_INFO "HW Breakpoint for write installed\n");

	return 0;

fail:
	printk(KERN_INFO "Breakpoint registration failed\n");

	return ret;

 看网上说ARM Architecture Reference Manual Supplement ARMv8.1, for ARMv8-A architecture profile这些文档的degug register里面有。文档可以在这个网站下载

https://developer.arm.com/documentation

Documentation – Arm Developer

样例代码

#include <linux/perf_event.h>
#include <linux/hw_breakpoint.h>

struct perf_event * __percpu *sample_hbp;

static void sample_hbp_handler(struct perf_event *bp,
			       struct perf_sample_data *data,
			       struct pt_regs *regs)
{
	printk(KERN_INFO "value is changed\n");
	dump_stack();
	printk(KERN_INFO "Dump stack from sample_hbp_handler\n");
	unregister_wide_hw_breakpoint(sample_hbp);
}

static int hw_break_module_init(void* addr)
{
	int ret;
	struct perf_event_attr attr;

	hw_breakpoint_init(&attr);
	attr.bp_addr = addr;
	attr.bp_len = HW_BREAKPOINT_LEN_4;
	attr.bp_type = HW_BREAKPOINT_W;

	sample_hbp = register_wide_hw_breakpoint(&attr, sample_hbp_handler, NULL);
	if (IS_ERR((void __force *)sample_hbp)) {
		ret = PTR_ERR((void __force *)sample_hbp);
		goto fail;
	}

	printk(KERN_INFO "HW Breakpoint for write installed\n");

	return 0;

fail:
	printk(KERN_INFO "Breakpoint registration failed\n");

	return ret;
}

int arr[10] = {0};
int hw_bp_test = 0;
static int __init msm_serial_init(void)
{
	..............................
	pr_info("xxx msm_serial: driver initialized\n");
	//arr[10] = local_var_test[5];
	hw_break_module_init(&hw_bp_test);
	hw_bp_test = 1;
	return ret;
}

实际效果展示

ARM硬件断点,arm开发

此次实验是用qemu模拟一个aarm64环境,可以看到支持6个断点 

ARM硬件断点,arm开发

可以看到应该是每个cpu都注册了一个。感觉应该是在一个cpu上注册,所有cpu都会去检查(原理不清楚,上面的文档没有看明白,猜测的)

struct perf_event * __percpu *
register_wide_hw_breakpoint(struct perf_event_attr *attr,
			    perf_overflow_handler_t triggered,
			    void *context)
{
	struct perf_event * __percpu *cpu_events, *bp;
........................................
	for_each_online_cpu(cpu) {
		bp = perf_event_create_kernel_counter(attr, cpu, NULL,
						      triggered, context);
...................................................
}

暂时不写了文章来源地址https://www.toymoban.com/news/detail-727713.html

到了这里,关于ARM硬件断点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【ARM Coresight Debug 系列 16 -- Linux 断点 BRK 中断使用详细介绍】

    请阅读 【ARM Coresight SoC-400/SoC-600 专栏导读】 ARMv8 架构的 BRK 指令是用于生成一个软件断点的。当处理器执行到 BRK 指令时,会触发一个断点异常。 BRK 指令的格式如下: 其中 imm 是一个 16 位的立即数,它可以在断点异常发生时将立即数保存到 ESR.ISS 域中,从可以用来区分不同

    2024年02月03日
    浏览(60)
  • 【ARM 裸机】硬件平台简介

    硬件平台采用的是正点原子的 I.MX6ULL-MINI 开发板,分为底板和核心板; 正点原子 Mini 开发板的外形尺寸为 100mm*130mm,I.MX6U-Mini 开发板底板板载资源如下: ◆ 1 个核心板接口,支持 I.MX6ULL 核心板。 ◆ 1 个电源指示灯(蓝色)。 ◆ 1 个状态指示灯(红色)。 ◆ 1 路 CAN 接口,

    2024年04月14日
    浏览(38)
  • ARM DIY 硬件调试

    之前打样的几块 ARM 板,一直放着没去焊接。今天再次看到,决定把它焊起来。 为了提高焊接效率,先使用加热台焊接。不过板子为双面贴片,使用加热台只能焊接一面,那就优先焊主芯片那面,并把 Type C、SD 卡座还有一些关键电阻电容一并焊接。 (不过后来发现这个决定

    2024年02月12日
    浏览(38)
  • ARM day4 汇编及硬件编程

    load -- 加载 读 store -- 存储 写  在ARM 架构下, 数据从内存到cpu 直接的移动只能通过 LDR/STR来完成      mov 只能在寄存器之间移动数据 ,或把立即数移动到寄存器 ,并且数据长度不能超过 8 位 str  r2,  [r0]   //把r2 的数据  存储(写)到 r0 地址      *((int *) r0)  = r2 往

    2024年01月20日
    浏览(46)
  • ARM day5、day6 硬件编程

    fs4412  sd卡  串口线  电源           点灯(亮 or 灭)         2.1 外设原理图 devboard                  查找LED2-CHG_COK(核心板)         2.2 核心板原理图 coreboard                 查找CHG_COK- XEINT23/KP_ROW7/ALV_DBG19/GPX2_7         2.3 看芯片手册                 GPIO控制(第六

    2024年01月19日
    浏览(39)
  • 在amd64与arm上用paddlelite部署paddelOCR(Ascend硬件)

    由于部署的硬件是华为昇腾 NPU(Ascend310),参考网址https://www.paddlepaddle.org.cn/lite/v2.10/demo_guides/huawei_ascend_npu.html#npu-paddle-lite 先拉取paddlelite用来编译库 先在amd64上部署的,于是编译并生成 PaddleLite+NNAdapter+HuaweiAscendNPU for amd64 and arm64 的部署库 编译到一半的时候会出现未知原因

    2024年02月06日
    浏览(46)
  • 基于STM32 ARM+FPGA的电能质量分析仪方案(一)硬件设计

    本章主要给出了本系统的设计目标和硬件设计方案,后面详细介绍了硬件电路的设计 过程,包括数据采集板、 FPGA+ARM 控制板。 3.1系统设计目标 本系统的主要目的是实现电能质量指标的高精度测量和数据分析,其具体技术指标如 下所示: 1.电能质量指标测量精度: (1) 电压:

    2024年02月10日
    浏览(55)
  • NXP i.MX 8M Mini工业核心板硬件说明书(四核ARM Cortex-A53 + 单核ARM Cortex-M4,主频1.6GHz)

    创龙科技SOM-TLIMX8是一款基于NXP i.MX 8M Mini的四核ARM Cortex-A53 + 单核ARM Cortex-M4异构多核处理器设计的高端工业级核心板,ARM Cortex-A53(64-bit)主处理单元主频高达1.6GHz,ARM Cortex-M4实时处理单元主频高达400MHz。处理器采用14nm最新工艺,支持1080P60 H.264视频硬件编解码、1080P60 H.265视频硬

    2024年02月11日
    浏览(51)
  • “一日之际在于晨”,欢迎莅临WAVE SUMMIT上午场:Arm 虚拟硬件早餐交流会

    8月16日,盛夏的北京将迎来第九届WAVE SUMMIT深度学习开发者大会。在峰会主论坛正式开启前,让我们先用一份精美的元气早餐,和一场“ Arm虚拟硬件交流会 ”,唤醒各位开发小伙伴的开发魂! 8月16日,WAVE SUMMIT大会当天上午9:00-11:00,北京望京凯悦酒店,位于二楼的“智能

    2024年02月12日
    浏览(39)
  • 基于RK3588+Codesys+Xenomai的ARM+LINUX实时硬件平台的软PLC解决方案

    产品概述 公司推出基于瑞芯微RK3588架构的AI边缘计算主板,RK3588是 新一代国产旗舰高性能6 4 位八核处理器,采用8nm工艺, 具有高算力、低功耗、超强多媒体、丰富数据接口等特点。搭载四核A76+四核A55的八核CPU和ARM G610MP4 GPU,内置6 TOPs算力的NPU,搭载Hailo   AI算力芯片,单芯

    2024年03月15日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包