linux-kernel – Linux系统调用
发布时间:2020-12-13 23:06:17 所属栏目:Linux 来源:网络整理
导读:我能够执行系统调用调用并在内核中进行处理. 但很少有事情我不清楚.进入swi例程后,内核保存 用户模式在堆栈上注册.问题是- 是谁的堆栈? (因为swi处理和相应的系统调用例程需要堆栈框架才能工作) 如果是内核自己的堆栈,从哪里获得堆栈分配..?它会开始使用当
我能够执行系统调用调用并在内核中进行处理.
但很少有事情我不清楚.进入swi例程后,内核保存 用户模式在堆栈上注册.问题是- >是谁的堆栈? (因为swi处理和相应的系统调用例程需要堆栈框架才能工作) 解决方法
大多数ARM模式都有一个单独的堆栈.堆栈通常在重置处理程序后立即设置.从arch / arm / kernel / setup.c:
/* * setup stacks for re-entrant exception handlers */ __asm__ ( "msr cpsr_c,%1nt" "add sp,%0,%2nt" "msr cpsr_c,%3nt" "add sp,%4nt" "msr cpsr_c,%5nt" "add sp,%6nt" "msr cpsr_c,%7" : : "r" (stk),"I" (PSR_F_BIT | PSR_I_BIT | IRQ_MODE),"I" (offsetof(struct stack,irq[0])),"I" (PSR_F_BIT | PSR_I_BIT | ABT_MODE),abt[0])),"I" (PSR_F_BIT | PSR_I_BIT | UND_MODE),und[0])),"I" (PSR_F_BIT | PSR_I_BIT | SVC_MODE) : "r14"); 附: SVC是所谓的SWI的当前名称. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |