首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

arm上backtrace的分析与实现原理

定位问题的方式通常有以下三点: 1.通过串口打印信息进行业务逻辑的梳理,结合代码设计进行分析 2.在程序死机的时候,输出的函数调用栈关系进行分析,结合符号文件进行跟踪定位 3.在程序死机时输出内存镜像,...利用gdb还原死机现场 一般来讲,这三种方法都有一定的优缺点。...02 backtrace的过程详解 当程序出现异常或者死机的时候,我们可以读取当前寄存器的状态,找到当前pc指针的情况,但是这些往往还不能说明问题,我们有时需要跟踪函数的执行过程。...以linux内核实现arm栈回溯为例, 通过向gcc传递选项-mapcs或-funwind-tables,可选择APCS或unwind的任一方 式实现栈回溯。...比如在Linux中,系统死机后,可以打印出栈的地址和函数的名称,根据这个进行回溯操作就可以进行使用了。

5.9K30

Linux下开发stm32 ③ | 寄存器工程开发

先来回顾一下前两篇 Linux下开发stm32(一) | 使用gcc-arm-none-eabi工具链编译 Linux下开发stm32(二) | 使用openocd下载与调试 前两篇我们介绍了如何创建一个空的裸机工程...main文件),并编译工程生成elf文件,然后将其转为bin格式或hex格式,使用openocd下载,最后编写了一个makefile雏形,并成功点亮了一个LED~ 但是这个LED我们是通过指针直接操作寄存器地址来完成的...,接下来,我们在此基础上,引入stm32头文件,其中包含了寄存器的宏定义,也就是使用寄存器进行开发~ 1.创建寄存器工程 首先将上一节中创建的裸机工程00-template-reg复制一份出来,改名为01...0x40010c00+0x0c) &= ~(1<<0); GPIOB->ODR &= ~(1<<0); while(1); } void SystemInit(void) { } 至此,寄存器工程创建完毕...,接下来开始编译~ 2.编译&下载寄存器工程 编译寄存器工程的重点就在于C头文件和C源文件,启动文件的编译和链接都和之前一样。

1.2K30

uos访问windows共享打印机_Linux打印机安装命令

方案一、群晖实现 因为新的系统虚拟了群晖系统,而群晖系统自带了打印共享的功能,在“控制面板 – 外接设备 – 打印机”栏目内,但是不知什么原因,添加后可以识别打印机,但是点击打印后会一直不停的打印空白页...网上的经验贴大多是利用centos等linux系统安装实现的。...5、Windows本地添加打印机 添加设备,点击下侧“我所需的打印机未列出”,选择按名称选择打印机。...偶然间看到一篇帖子,提到如果打印机有linux驱动的话,基本都能实现cups中的驱动安装,于是就上奔图网站上搜了下,竟然真有M6200系列的linux驱动,后面就好办了。...如果你的打印机是其他型号,且不在cups支持库中的话,可以上打印机官网搜索linux驱动,利用本方法安装即可。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

5.8K30

arm平台根据栈进行backtrace的方法

一、 背景 嵌入式设备开发过程中,难免会遇到各种死机问题。这类问题的定位一直是开发人员的噩梦。...死机问题常见定位手段如下: 根据打印/日志信息梳理业务逻辑,排查代码; 设备死机的时候输出函数调用栈(backtrace),结合符号文件表/反汇编文件定位问题; 输出死机时的内存镜像(coredump)...函数调用过程中涉及四个重要的寄存器:PC、LR、SP和FP。注意,每个栈帧中的PC、LR、SP和FP都是寄存器的历史值,并非当前值。...), 以及栈顶(也就是SP寄存器的值)。...这种问题,死机的地方一般不是出问题的地方,打印出来的pc指针也是乱七八糟的,对定位问题很不利。

4.9K20

段错误等造成死机问题的分析

在实际工作当中,通过会出现某个应用造成死机问题。如何解决该问题。 方法一:最简单办法,看打印,通过反复调试,看是哪条语句造成造成了死机。...方法二:让内核通过OOPS打出堆栈信息,PC指针和链接指针,进行pc指针分析或者堆栈回溯                 内核默认是不支持OOPS打印,需要内核配置开关打开。...OOPS打出来可以看到:pc指针,LR链接库指针,CPU各个寄存器信息,堆栈信息。...方法三:coredump分析法 对于死机问题,某些情况下OOPS打印出来的信息不足以分析。coreDump给了个详细的方法。...首先在内核当中打开coredup  开关,死机后就会产生一个core问题,事后可以通过 gdb调试方法来分析定位死机的位置。

1.2K20

MCU HardFault问题查找和破解方法

HardFault回溯的原理 四、操作分析流程: 心里明白徒手分析法 CmBacktrace 天龙大法 五、总结 一、HardFault产生原因和常规分析方法 在嵌入式开发中,偶尔会遇到Hard Fault死机的异常...,例如Kinetis中未打开外设时钟去配置外设的寄存器; 不当的用法操作,例如非对齐的数据访问、除0操作(默认情况下M3/M4/M7,除0默认都不会触发Fault,因为ARM内核CCR寄存器DIV_0_...首先,产品真机调试时可以断开仿真器,并将错误信息输出到控制台上,甚至可以将错误信息使用 Easy Flash 的 Log 功能保存至 Flash 中,待设备死机后重启依然能够读取上次的错误信息。...Step6: 运行代码,观察打印结果,可以看到打印信息中包含出错的任务名称、出错前的任务压栈的8个通用寄存器名称和内容,从图中可以一目了然的找出出错的PC指针,如果进一步去结合汇编代码可以清晰的看到其能够准确定位到代码出错的位置...至于如何将错误信息使用 Easy Flash 的 Log 功能保存至 Flash 中,待设备死机后重启依然能够读取上次的错误信息部分,时间关系笔者没有深入研究,有兴趣的可以尝试实现。

4.2K21

Linux 系统使用 CUPS 打印文件相关命令

OpenPrinting CUPS:https://openprinting.github.io/cups/ 由 OpenPrinting 为 Linux® 和其他类 Unix® 的操作系统开发的基于标准的开源打印系统...The current standards-based, open source printing system developed by OpenPrinting for Linux® and other...安装 PDF 打印机 仅用于测试执行打印命令,实际打印请使用真实的打印机名称。...使用默认打印打印文件 filename 替换为实际文件路径: 1lp filename ---- 内容声明 标题: Linux 系统使用 CUPS 打印文件相关命令 链接: https://zixizixi.cn.../linux-unix-cups-printers-shell-command 来源: iTanken 本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可,转载请保留此声明。

3.2K20

全志D1s裸机开发之体验第一个程序

(以汇编代码为单位) step s 一次执行一行,包括函数内部 setpi si 执行下一行 list l 显示函数或行 print p 显示表达式,比如: print a print $pc // 打印寄存器...print *0x20000//打印内存 print /x a // 16进制打印 x 显示内存内容,比如: x 0x20000 x /x 0x20000 //16进制 info registers...infor r 打印所有寄存器的值 set 设置变量,比如: set var a=1 set *(unsigned int *)0x28000 = 0x55555555 set var $pc=0x22000...(gdb) x /x 0x20000 // 检查0x20000是否被正确写入, // 我们调试程序时可能因为上次的死机导致无法load // 这时可以让板子进入烧录模式,再重新连接、重新加载 0x20000...,它表示在 Linux 系统下它是一个隐藏文件。在 Windows 的文件浏览器里我们可以看见它,但是在 Git Bash 里执行 ls 命令看不到它,需要执行 ls -a 命令才能看见。

13410

Linux下用CUPS的打印机服务

目前的Linux发行版本基本上都使用cups作为Linux下管理打印的服务应用。CUPS软件为Unix/Linux用户提供了有效而可靠的方式来管理打印的方法。...CUPS本身可以提供网络打印机功能,使用它可以非常方便的令LinuxLinux之间、Linux与Windows之间实现打印共享。  ...今天提到这个问题,是由于发现很多的用户在使用Linux的时候,沿用的是Windows下的习惯,用Samba进行打印机共享。...其实Linux下的Samba打印机共享,是Samba连接本地的cups服务,然后提供出来的,这样会有几个问题: 引用 1、打印状态在Windows下看不到; 2、从Windows下访问Samba需要访问密码...但有个前提,就是客户端必须有打印机在linux下的驱动,否则机器是不能打印打印有错的。

3.3K50

【嵌入式开发】ARM 看门狗 Watchdog ( 看门狗概念 | 看门狗原理 | 时钟控制寄存器 | 定时器数据寄存器 | 定时器计数寄存器 | 定时器中断清理寄存器 | 关闭看门狗代码编写 )

看门狗 简介 (1) 看门狗作用 ---- 看门狗 作用 : 1.嵌入式产品 : 嵌入式产品在运行过程中, 经常出现各种故障, 死机 等情况, 当出现故障的时候 就需要一种纠错重启机制, 看门狗就是应对这些问题的...; 2.看门狗本质 : 看门狗是一个 硬件模块 ; 3.主要作用 : 在 系统出现故障 死机后, 重启系统; ---- (2) 看门狗 工作方式 ---- 看门狗 工作方式 : 1.实现定时器功能...必须在指定的时间重新开始计时; 2.喂狗 : 喂狗 操作 就是 重新计时 的 形象的称呼; 3.重启机制 : 如果在规定的时间内, 没有重新开始计时 ( 喂狗 ), 那么 该硬件模块 就会 认为 系统死机..., 重启系统; ---- (3) 看门狗 在启动时 的 关闭策略 ---- 看门狗启动时 关闭 : 1.看门狗的作用周期 : 看门狗主要是在 Linux 内核运行起来之后, 操作系统 来负责 定时...链接器脚本, ③输出文件是 gboot.elf 这是个中间文件, ④ 依赖文件是 ^ 代表所有的依赖; ( 3 ) 转换成可执行二进制文件 : arm-linux-objcopy -O binary

3.1K40

Cache一致性导致的踩内存问题

2.1 原理 本平台的backtrace并不是基于libc的(平台不支持),而是采用很原始的方法,当程序异常时,捕获PC寄存器和SP寄存器的值,依次回溯栈帧,从栈帧中搜索历史PC指针,进而还原出函数调用栈...r5寄存器的值是0x00000000, 从下面的反汇编代码可以看出死机时在尝试访问该值偏移20字节的内存地址)。...不过,我们的程序托管(非hook,只是基于系统接口重新封装了一套接口)了内存申请/释放的接口,死机的时候会把当前已申请但还未释放的内存打印出来。...后台检测线程每秒执行一次检测任务,检测到内存被破坏后打印相关信息。...该机制并未检测到这个错误,可能是由于下面两个原因: 检测周期较长,死机的时候还没检测到,设备就挂了 检测到了,但是打印还没来得及输出(输出是异步的,有缓冲),设备就挂了 抱着试试看的态度,把检测周期改为

2.8K53
领券