ARM处理器模式弹跳机制的初始化 笔记版 转载请注明出处---crosskernel@gmail.com
来源:互联网 发布:双色球红球最简单算法 编辑:程序博客网 时间:2024/05/01 14:22
void cpu_init(void)
{
unsigned int cpu = smp_processor_id();
struct stack *stk = &stacks[cpu];
if (cpu >= NR_CPUS) {
printk(KERN_CRIT "CPU%u: bad primary CPU number\n", cpu);
BUG();
}
/*
* Define the placement constraint for the inline asm directive below.
* In Thumb-2, msr with an immediate value is not allowed.
*/
#ifdef CONFIG_THUMB2_KERNEL
#define PLC "r"
#else
#define PLC "I"
#endif
/*
* setup stacks for re-entrant exception handlers
*/
__asm__ (
"msr cpsr_c, %1\n\t"
"add r14, %0, %2\n\t"
"mov sp, r14\n\t"
"msr cpsr_c, %3\n\t"
"add r14, %0, %4\n\t"
"mov sp, r14\n\t"
"msr cpsr_c, %5\n\t"
"add r14, %0, %6\n\t"
"mov sp, r14\n\t"
"msr cpsr_c, %7"
:
: "r" (stk),
PLC (PSR_F_BIT | PSR_I_BIT | IRQ_MODE),
"I" (offsetof(struct stack, irq[0])),
PLC (PSR_F_BIT | PSR_I_BIT | ABT_MODE),
"I" (offsetof(struct stack, abt[0])),
PLC (PSR_F_BIT | PSR_I_BIT | UND_MODE),
"I" (offsetof(struct stack, und[0])),
PLC (PSR_F_BIT | PSR_I_BIT | SVC_MODE)
: "r14");
}
依次进入arm的IRQ、ABT、UND模式,每进到一种模式CPU就看到了自己在这个模式下的SP寄存器,然后将这个栈指针指向实现准备好一块内存,stacks[cpu]为这些模式准备了相应的栈,虽然很小,但足够了,因为对于这些模式ARM是蜻蜓点水,刚进去就跳出来。
0 0
- ARM处理器模式弹跳机制的初始化 笔记版 转载请注明出处---crosskernel@gmail.com
- arm 处理器虚拟化模式初始化 笔记版(尚未完成) 转载请注明出处---crosskernel@gmail.com
- SMP多核处理器omap4启动分析 笔记版 转载请注明出处---crosskernel@gmail.com
- android手机高精度定时机制--higher timer tick 笔记版 转载请注明出处--- crosskernel@gmail.com
- mt6577驱动开发 笔记版 转载请注明出处---crosskernel@gmail.com
- s5pv210 uboot 源码分析 笔记版 转载请注明出处---crosskernel@gmail.com
- linux的板级支持以I.mx5为例 笔记版 转载请注明出处---crosskernel@gmail.com
- 转载请注明出处
- 引用请注明出处和转载请注明出处?我的看法
- Discuz的安装 (原创帖,转载请注明出处)
- 尊重原创,转载请注明出处
- 【转载请注明出处:从ViewRootImpl类分析View绘制的流程 CSDN 废墟的树】
- 由“飞鸽传书”所想到的--------利用WinSocket写局域网聊天程序(转载请注明出处)
- Vista中服务运行与NT5的差别(原创,转载请注明出处)
- Core Aduio API--Vista中音量控制的新特点(原创,转载请注明出处)
- 基于RTP的音视频封装和同步方案设计图案【转载请注明出处】
- 基于RTP的音视频同步方案设计【转载请注明出处】
- 我的VIM配置(C/C++和PHP)(转载请注明出处)
- 阿里校招之类实例化的顺序
- 免费的文本编辑器 (copied)
- 点跟多边形的碰撞检测
- pat 1070
- PHP中Imagick类的使用
- ARM处理器模式弹跳机制的初始化 笔记版 转载请注明出处---crosskernel@gmail.com
- windows 输出\r\n问题
- 算法概率思维导图
- C# 模拟键盘输入
- cmd 中报错:不是内部或外部命令,也不是可运行的程序
- LDA学习l
- loadlibrary 返回错误126 找不到指定的模块
- 开发笔记之20140312
- 对象的当前状态使该操作无效