首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

ARMv8 Linux内核错误处理过程分析

2013-10-08 
ARMv8 Linux内核异常处理过程分析看了Linaro提供的开源ARMv8 Linux内核源码,发现ARMv8异常处理与ARMv7及之

ARMv8 Linux内核异常处理过程分析

看了Linaro提供的开源ARMv8 Linux内核源码,发现ARMv8异常处理与ARMv7及之前的架构有所不同,简单分析。

LinaroARMv8工程:http://www.linaro.org/engineering/engineering-projects/armv8

1.1 Linux内核异常处理相关文件

Linux内核中,异常处理主要由两个文件完成,entry.S和traps.c,当然还有一些其它异常处理函数分布于fault.c, memory.c等等。entry.S包含异常的入口、进入异常处理C函数前的压栈、退出C函数前的出栈、一些fork函数相关的处理代码(暂不分析)、任务切换汇编处理过程(cpu_switch_to函数,暂不分析)。traps.c主要包含异常处理C函数。

本文主要分析entry.S,对于traps.c作简要介绍。

1.2 执行kernel_entry之前的栈ARMv8 Linux内核错误处理过程分析

1.3 执行kernel_entry时的栈ARMv8 Linux内核错误处理过程分析

1.4 执行kernel_exit 时的栈ARMv8 Linux内核错误处理过程分析
1.5 entry.s代码分析
//该文件中代码原理很简单,目前暂不分析,若需要,后续再添上。/* * bad_mode handles the impossible case in the exception vector. *///三个参数从左到右分别对应x0~x3,该函数的作用就是打印出错原因,跳转到panic()函数asmlinkage void bad_mode(struct pt_regs *regs, int reason, unsigned int esr){console_verbose();pr_crit("Bad mode in %s handler detected, code 0x%08x\n",handler[reason], esr);die("Oops - bad mode", regs, 0);local_irq_disable();panic("bad mode");}






热点排行