0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RISC-V PMP调试

嵌入式USB开发 来源:嵌入式USB开发 作者:嵌入式USB开发 2023-06-08 11:52 次阅读

本文转自公众号,欢迎关注

RISC-V PMP调试 (qq.com)

PMP导致异常问题分析

现象和确认异常原因

触发了异常中断

查看异常原因为7 store access-fault exception.

并查看异常访问的地址为0x28382ad0

图片

gdb也确认这个地址确实只能读不能写

图片

图片

查看PMP寄存器确认根本原因

图片

Pmpcfg0 对应地址pmp0cfg~pmp3cfg

Pmpcfg1 对应地址pmp4cfg~pmp7cfg

Pmpcfg2 对应地址pmp8cfg~pmp11cfg

Pmpcfg3 对应地址pmp12cfg~pmp15cfg

pmpcfg3为0x5100即对应pmp13cfg为0x51

8位的配置属性0x51如下 只读

A=10 即NA4表示4字节区域,即pmpaddrxx对应的4字节区域

图片

L=1

A=10=2 NA4

R=1

X=0

W=0

图片

图片

对应pmp13cfg的pmpaddr13=0xa0e0ab4 是34位地址右移2位的值,所以左移两位恢复实际值是0x2C38 2AD0

图片

表示的范围是[0x2C38 2AD0,0x2C38 2AD3] 4字节

图片

我们的地址空间是0x28000000-0x2bffffff

写0x2C38 2AD0实际映射到了写0x2838 2AD0 64M绕回。

所以写0x2838 2AD0这个不具备写属性的地址触发了store access-fault

exception.异常

所以以上确认了原因是PMP设置了该地址不具备写属性,而代码中去写所以导致了异常。

代码

我们的空间最多只有128M,最多到0x2bff ffff,为什么写了个0x2C38 2AD0的地址进去,

先找到对应的代码

由于是用的所以13的配置,所以先找这个索引对应

#define PMP_FIXED_INDEX_TASK_STACK 13

然后再搜索这个索引

找到如下函数

图片

这个函数在vTaskSwitchContext调用

if (prev != pxCurrentTCB) {


          pmp_task_stack_set((uint32_t)pxCurrentTCB- >pxStack);


      }

即任务有切换时,设置栈底4字节不可写,用于栈溢出检测

加个死循环用于在设置该值时停住

图片

图片

所以要确认什么时候写了0x2838 2AD0这个地址,由于使能了PMP,所以watchpoint抓不到,先触发了pmp的异常。

所以先关闭pmp设置

if (prev != pxCurrentTCB) {


          ///pmp_task_stack_set((uint32_t)pxCurrentTCB- >pxStack);


      }

然后设置数据断点

watch (unsigned int )0x28382ad0

运行

第一次停在栈初始化,第二次停在如下处

图片

可以看到

任务栈的地址是 0x28382ad0开始但是 临时变量mem的地址是0x28382a60在栈前面去了,所以栈溢出了。

图片

图片

把栈改大即可

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4981

    文章

    18281

    浏览量

    288402
  • 调试
    +关注

    关注

    7

    文章

    527

    浏览量

    33625
  • PMP
    PMP
    +关注

    关注

    0

    文章

    43

    浏览量

    18068
  • RISC-V
    +关注

    关注

    41

    文章

    1901

    浏览量

    45045
收藏 人收藏

    评论

    相关推荐

    什么是RISC-V

    siFive搞RISC-V 赛昉搞RISC-V 香山搞RISC-V 到底什么是RISC-V? 先不问有什么用,RISC-V目前的能力来说,工
    发表于 02-02 10:41

    浅谈RISC-V

    RISC-V社区最近很热闹,也有人来问我的看法。这里胡扯两句。RISC-V这么热闹,媒体功不可没。在中国,媒体就是生产力。在2016年ARM被孙正义收购以后,一下子成为了一个大IP,关注度急剧上升
    发表于 09-11 17:44

    为什么选择RISC-V

    RISC-V是一种开放式ISA(指令集体系结构),为处理器体系结构的创新开创了新纪元。RISC-V基金会由325多家成员公司组成。这是该技术的主要优势。软件架构师/固件工程师/软件开发
    发表于 07-27 17:38

    科普RISC-V生态架构(认识RISC-V)

    RISC-V 生态架构浅析前言RISC-V最近越来越多的出现在科技新闻中,大量的公司加入到RISC-V研究和生产中。在越来越多的RISC-V研究热下,毋容置疑的是
    发表于 08-02 11:50

    RISC-V你了解多少?

    之前不断看到关于RISC-V的内容,今天周末,也学习并整理了一份关于RISC-V的内容。1.RISC-V简介RISC:Reduced Instruction Set Computer,
    发表于 08-13 15:13

    RISC-V是什么?如何去设计RISC-V处理器?

    RISC-V是什么?有哪些特点?如何去设计RISC-V处理器?
    发表于 06-18 09:24

    RISC-V是什么

    (刚刚投入芯片行业学习的新人,存在理解错误的地方欢迎指出,并探讨,还请多多包涵,谢谢!) RISC-V是区别于 INTEL x86架构、arm架构的另一种芯片内核架构。 RISC-V,主要区别于当代
    发表于 07-23 06:06

    RISC-V架构简介

    【摘要】 本文首先对RISC-V的架构做了简要的介绍,在此基础上实现了LiteOS在RISC-V架构上的适配过程的具体步骤,希望对你有所帮助。1 RISC-V架构简介RISC-V是一个
    发表于 07-28 07:46

    玄铁VirtualZone:基于RISC-V架构的安全扩展

    的TrustZone、Intel的SGX以及AMD的SEV等。本文主要描述基于RISC-V架构的玄铁C系列处理器的安全扩展,该扩展主要基于RISC-V架构提供的PMP保护机制和多层特权模型,虚拟出多个
    发表于 09-01 14:38

    什么是RISC-VRISC-V指令具有哪些特点应用?

    什么是RISC-VRISC-V指令具有哪些特点应用?自己怎么才能设计出设计一套指令集?
    发表于 10-14 09:05

    RISC-V简介

    RISC-V简介  RISC-V 是一个自由和开放的 ISA(开源指令集架构),通过开放的标准协作实现处理器创新的新时代。RISC-V ISA在架构上提供了一个新的自由、可扩展的软件和硬件自由级别
    发表于 02-27 19:56

    我了解的RISC-V

    其实很早以前就知道RISC-V,但是从来都没有接触过,因为当时做的人还比较少,自从开源了之后,国内国外很多的厂家都开是使用RISC-V来研发自己的芯片,包括国内的很多厂家,比如平头哥,北京兆易创新
    发表于 03-19 10:52

    RISC-V架构

      RISC-V架构  RISC-V(发音为“risk-five”)是一个基于精简指令集(RISC)原则的开源指令集架构(ISA)。  与大多数指令集相比,RISC-V指令集可以自由地
    发表于 04-03 15:29

    RISC-V 发展

    RISC-V 发展2015年成立了RISC-V基金会,这是个非营利性组织,主要为了维护和发展RISC-V。目前RISC-V的IP供应商大部分是国内的厂商,例如sifive、阿里平头哥、
    发表于 04-14 10:18

    RISC-V调试和完善的跟踪解决方案

    RISC-V调试和完善的跟踪解决方案ppt分享
    发表于 07-14 17:15 0次下载