OK6410A 开发板 (八) 118 linux-5.11 OK6410A linux对arm异常处理的相同部分解析

发布者:月光男孩最新更新时间:2022-08-10 来源: csdn关键字:OK6410A  开发板  11  异常处理 手机看文章 扫描二维码
随时随地手机看文章

    .section .vectors, "ax", %progbits

.L__vectors_start:

    W(b)    vector_rst

    W(b)    vector_und

    W(ldr)  pc, .L__vectors_start + 0x1000

    W(b)    vector_pabt

    W(b)    vector_dabt

    W(b)    vector_addrexcptn

    W(b)    vector_irq

    W(b)    vector_fiq


每种处理方式中相同的部分 // 8个入口


1. 直接定义 2个


vector_rst:

ARM(   swi SYS_ERROR0  )

THUMB( svc #0      )

THUMB( nop         )

    b   vector_und


vector_addrexcptn:

    b   vector_addrexcptn


2. 利用vector_stub宏 5个

irq

dabt

pabt

und

fiq

3. 利用链接脚本  // __vectors_start + 0x1000 的位置是 vector_swi  1个

pc, .L__vectors_start + 0x1000

vector_swi

// 参考 https://blog.csdn.net/u011011827/article/details/115900559 中的 链接布局 关键字 : "__vectors_start"

// 参考 https://blog.csdn.net/u011011827/article/details/117475336 的 关键字 "vectors"


vector_stub

arm-linux-gnueabi-gcc -Wp,-MMD,arch/arm/kernel/.entry-armv.o.d  -nostdinc -isystem /home/suws/ok6410/system/tools/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi/bin/../lib/gcc/arm-linux-gnueabi/7.4.1/include -I./arch/arm/include -I./arch/arm/include/generated  -I./include -I./arch/arm/include/uapi -I./arch/arm/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/kconfig.h -D__KERNEL__ -mlittle-endian -D__ASSEMBLY__ -fno-PIE -mabi=aapcs-linux -mfpu=vfp -funwind-tables -marm -Wa,-mno-warn-deprecated -D__LINUX_ARM_ARCH__=6 -march=armv6k -mtune=arm1136j-s -include asm/unified.h -msoft-float   

-c -o arch/arm/kernel/entry-armv.o arch/arm/kernel/entry-armv.S


可改为

-E -o arch/arm/kernel/entry-armv.i arch/arm/kernel/entry-armv.S


 .macro vector_stub, name, mode, correction=0

 .align 5


vector_name:

 .if correction

 sub lr, lr, #correction

 .endif


 @

 @ Save r0, lr_ (parent PC) and spsr_

 @ (parent CPSR)

 @

 stmia sp, {r0, lr} @ save r0, lr

 mrs lr, spsr

 str lr, [sp, #8] @ save spsr


 @

 @ Prepare for SVC32 mode. IRQs remain disabled.

 @

 mrs r0, cpsr

 eor r0, r0, #(mode ^ 0x00000013 | 0)

 msr spsr_cxsf, r0


 @

 @ the branch table must immediately follow this code

 @

 and lr, lr, #0x0f 

  // 该指令运行前,lr 中是 spsr 的值

// cpsr 低4位是用来区分 mode

// 0000 user

// 0001 fiq

// 0010 irq

// 0011 svc

// 0111 abort

// 1011 und

// 1111 sys


 mov r0, sp

 ldr lr, [pc, lr, lsl #2] 

  // lr 中存着 pc + lr*4 

  // pc 的值 是 vector_stub 下面的第一个 .long xxx 中变量的地址

  // 所以 .long 申请的变量值 和 mode的值 一一对应

  // __irq_usr 代表 之前 是 user mode , 跳到了 irq mode

  // __irq_svc 代表 之前 是 svc  mode  ,跳到了 irq mode

  // 为什么没有 __irq_dabt , 

  // 因为 linux (通过在其他mode关闭中断,在其他mode不会发生异常?)保证了 中断发生时 当前mode 只存在两种情况

  // 1. usr mode 2. svc mode

  // 通过在其他mode关闭中断 : 所以一般其他mode只是一个过渡阶段,处理具体事务的会是 svc mode

  // fiq 是个特例, fiq 可以在 dat 模式下发生

 movs pc, lr @ branch to handler in SVC mode

.type vector_name, %function; .size vector_name, .-vector_name


 .align 2

 @ handler addresses follow this label

1:

 .endm


/*                                                                                   

 * Interrupt dispatcher                                                              

 */                                                                                  

    vector_stub irq, IRQ_MODE, 4                                                     

                                                                                     

    .long   __irq_usr            @  0  (USR_26 / USR_32)                              

    .long   __irq_invalid           @  1  (FIQ_26 / FIQ_32)                          

    .long   __irq_invalid           @  2  (IRQ_26 / IRQ_32)                          

    .long   __irq_svc          @  3  (SVC_26 / SVC_32)                              

    .long   __irq_invalid           @  4                                             

    .long   __irq_invalid           @  5                                             

    .long   __irq_invalid           @  6                                             

    .long   __irq_invalid           @  7                                             

    .long   __irq_invalid           @  8                                             

    .long   __irq_invalid           @  9                                             

    .long   __irq_invalid           @  a                                             

    .long   __irq_invalid           @  b                                             

    .long   __irq_invalid           @  c                                             

    .long   __irq_invalid           @  d                                             

    .long   __irq_invalid           @  e                                             

    .long   __irq_invalid           @  f                                             


__dabt_invalid

__dabt_svc

__dabt_usr

---

__fiq_abt

__fiq_svc

__fiq_usr

---

__irq_invalid

__irq_svc

__irq_usr

---

__pabt_invalid

__pabt_svc

__pabt_usr

---

__und_invalid

__und_svc

__und_usr

关键字:OK6410A  开发板  11  异常处理 引用地址:OK6410A 开发板 (八) 118 linux-5.11 OK6410A linux对arm异常处理的相同部分解析

上一篇:OK6410A 开发板 (八) 118 linux-5.11 OK6410A arm异常原因及linux应用场景及结果
下一篇:OK6410A 开发板 (八) 117 linux-5.11 OK6410A Prefetch Abort 实例分析

推荐阅读最新更新时间:2024-11-17 03:14

为AT91SAM9X5-EK开发板建立linux目标文件
一、最新版本 1.从网上获得linux的源码 输入:git clone git://github.com/linux4sam/linux-at91.git 安装完成后输入: cd linux-at91,切换到对应的目录下。 2.设置交差编译环境 之前已经安装过gcc-arm-linux-gnueabi,所以只需要定义一下环境变量: export CROSS_COMPILE=arm-linux-gnueabi- 3.配置默认设置,默认配置文件保存在:arch/arm/configs/at91_dt_defconfig文件中。 输入: make ARCH=arm at91_dt_defconfig 4.根据实际需要修改
[单片机]
为AT91SAM9X5-EK<font color='red'>开发板</font>建立linux目标文件
基于博流BL606P音视频开发板的智能音箱系统开发方案
编辑语: 芯片开放社区(OCC)面向广大开发者推出应用实战系列内容,通过分享开发者实战开发案例,总结应用开发经验,梳理开发中的常见问题及解决方案,为后续参与的开发者提供更多参考与借鉴。 本文是关于开发者 乔帮主分享了在Docker环境下,基于博流BL606P音视频开发板,进行智能音箱系统搭建的完成过程。按照文中步骤操作后,你将得到一个可以进行对话的智能音箱。 01背景 平头哥给我提供了一套博流BL606P音视频开发板评测: 这套BL606P开发板是由博流科技研发,基于平头哥的XTC906和E907,集成度较高,非常适合用于智能音箱系统。 开发套件提供了主控板、按键板,还提供了4欧3W的喇叭,还有按键板连接线和支撑柱,开箱连
[嵌入式]
基于博流BL606P音视频<font color='red'>开发板</font>的智能音箱系统开发方案
Note 11 Pro+标配120W充电头 卢伟冰:不配被骂死
日前,小米集团中国区总裁、Redmi品牌总经理卢伟冰发文表示,这次Note 11 Pro+搭载120W充电头,真的是下了血本,支持120W充电再不配120W充电头估计会被骂死。高端产品大众化,我们持续努力。 目前小米商城120W充电器套装售价是299元,而Redmi Note 11 Pro+出厂标配120W充电器和数据线,可以说下血本了。 值得注意的是,这次Redmi Note 11 Pro+支持的是120W神仙秒充满血版本,它是双电芯+双电荷泵方案,不仅充电速度更快,而且发热更少更安全。 卢伟冰指出,120W快充器件成本高很多,在全球缺芯的大背景下,稀缺性更高。目前全球支持120W快充的手机仅有14款,平均售价都在4000元
[手机便携]
Note <font color='red'>11</font> Pro+标配120W充电头 卢伟冰:不配被骂死
手机传感器MPL3115A2如何测量海拔
用过的传感器很多,也接触过多轴的传感技术,另外最高大上的以亚德诺的10轴传感为极限,另外随着医疗电子的迅猛发展,未来的趋势必定用到和人的生 命健康息息相关,以前无意中得知ADXL262的技术,可以用来直接检测震动以及物体的运动状态,目前很多智能手环就用到了这个传感器的技术。类似的还有 ADXL345,ADXL377等。 楼主用过数字的光传感器,温度和湿度传感器,以及光电,超声波,红外,霍尔。大多数通信是通过spi或者IIC的。 前些日子无意间看到手机的解析,里面集成了陀螺,光,电子罗盘,温度,触摸,气压等等的检测,其中还是以数字通信居多,里面提及了一款用到的是MPL3115A2这款。 网上查了下居然是来自FREESC
[测试测量]
手机传感器MPL3<font color='red'>11</font>5A2如何测量海拔
华为Mate 40 Pro上市搭EMUI 11:Mate 40是EMUI 10.x
外媒Huawei Central报道,华为EMUI 11将在2020年华为开发者大会(HDC)上发布,这个新版本的EMUI 11将基于开源的Android 11。现在,又有关于EMUI 11的有趣消息传出,这表明华为Mate 40/Pro系列将搭载两个不同版本的EMUI。 爆料人士 Evan Blass表示,即将上市的华为Mate 40 Pro将搭载与“非Pro”华为Mate 40不同的固件。华为Mate 40 Pro将搭载基于开源Android 11的EMUI 11系统,另一方面,华为Mate 40将搭载新版EMUI 10.X系统。 在HDC 2019上发布的EMUI 10是华为首款基于Android开源项目(AOSP)
[手机便携]
致敬OPPO Find N!友商折叠屏:价格不到11000元
9to5Google在Android 12L Beta2中发现了谷歌折叠屏旗舰的踪迹。 如爆料图所示,谷歌折叠屏的机身比例与OPPO Find N相近,无论是折叠状态还是展开状态,谷歌折叠屏都不像是遥控器,这就确保它能像OPPO Find N一样获得比肩直屏旗舰的使用体验。 谷歌Pixel Notepad外形比例 9to5Google进一步爆料指出,谷歌首款折叠屏手机可能不叫Pixel Fold,而是命名为Pixel Notepad,价格会低于预期。 据爆料,谷歌Pixel Notepad定价可能不到1799美元(约合人民币11000元),将会比三星Galaxy Z Fold3更便宜。 另外,消息称谷歌Pixel Note
[手机便携]
MAX1148型高精度14位串行A/D转换器
摘要:MAXll48是Maxim公司2005年最新推出的14位串行模/数转换器。文中介绍了MAXll48的特点、结构和工作原理,给出了它在8位CPU为核心的数据采集系统中的应用实例。 关键词:模数转换器;MAXll48:串行 1 概述 模/数转换器(ADC)是现代测控中非常重要的环节。它有并行和串行两种数据输出形式。并行ADC虽然数据传输速度快,但有引脚多、体积大、占用微处理器接口多的缺点;而串行ADC的传输速率目前已经可以做得很高,并且具有体积小、功耗低、占用微处理器接口少的优点。因此,串行ADC的应用越来越广泛。 MAXll48是Maxim公司最新推出的一种真差分、8通道、14位逐次逼近、串行输出模/数转换器。处理器
[模拟电子]
2011年LED背光LCD TV渗透率56%
     瑞士信贷证券近期调高2010年及2011年LED(发光二极管)背光LCD Monitor液晶监视器和LCD TV液晶电视之出货渗透率。预估2010年全球LED背光LCD TV渗透率将达20%,2011年渗透率上看56%,LED背光LCD Monitor今年渗透率估达16%,明年将达55%,成为背光源主流技术。主要系受到LED背光和CCFL冷阴极灯管背光成本差距越来越小,以及强劲的消费偏好所驱动,液晶电视品牌厂商今明两年在LED背光LCD TV出货目标相当积极。     从成本来看,瑞士信贷证券指出,2009年第一季40寸之LED背光LCD TV的成本,约高出同尺寸的CCFL背光液晶电视达140美元,但预估到今年第三季
[电源管理]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved