裸金属OS不能使用本地人

时间:2018-03-28 18:50:20

标签: c ram osdev bare-metal

我刚开始进入OS开发,用qemu模拟raspi2(cortex a7)。 现在我被卡住了,因为当cpu处于用户模式时我无法使用局部变量。

这是我的主程序的样子

#include <stdint.h>

uint32_t function_with_locals() {
    uint32_t l1 = 5;
    uint32_t l2 = 3;

    return l1 - l2;
}

void kmain() {
    __asm("cps 0b10000"); // cpu in user mode

    uint64_t res = function_with_locals();

}

如果我在function_with_locals中设置断点,这是来自gdb的帧信息

(gdb) i frame
Stack level 0, frame at 0x0:
pc = 0x9d4c in function_with_locals (kmain.c:10); saved pc = 0x9d84
called by frame at 0x10
source language c.
Arglist at 0xfffffff8, args:
Locals at 0xfffffff8, Previous frame's sp is 0x0

基本上我不能使用任何本地,因为当cpu处于用户模式时,它们存储在我在链接描述文件中定义的RAM之外。 但是,如果我将其更改为SVC模式l1并且l2完全在RAM内。

关于可能导致这种情况的任何指示?

由于

0 个答案:

没有答案