ARM内核中的页面错误处理

ARM内核中的页面错误处理,arm,kernel,Arm,Kernel,我正在为运行在Raspberry Pi的ARM处理器上的基本内核编写一个中断处理程序。我有分别处理的系统调用和irq处理程序。代码取自。我想添加一些exokernel特性,其中之一需要一个用户级页面错误处理程序 我有x86内核开发的经验,但作为一名ARM新手,我很难实现页面错误处理程序,即获取trapframe、错误地址,然后为该地址分配页面。 任何步骤、站点或说明都会很有用 interrupt_table_start: nop subs pc, lr, #4 ldr p

我正在为运行在Raspberry Pi的ARM处理器上的基本内核编写一个中断处理程序。我有分别处理的系统调用和irq处理程序。代码取自。我想添加一些exokernel特性,其中之一需要一个用户级页面错误处理程序

我有x86内核开发的经验,但作为一名ARM新手,我很难实现页面错误处理程序,即获取trapframe、错误地址,然后为该地址分配页面。 任何步骤、站点或说明都会很有用

interrupt_table_start:
    nop
    subs pc, lr, #4
    ldr pc, syscall_entry_address
    subs pc, lr, #4
    subs pc, lr, #4
    subs pc, lr, #4
    ldr pc, irq_entry_address
    syscall_entry_address: .word syscall_entry
    irq_entry_address: .word irq_entry
interrupt_table_end:

syscall_entry:
    ldr sp, =kernel_stack_start
    SAVE_CONTEXT

    stmfd r13!, {r1-r12, r14}

    bl handle_syscall

    ldmfd r13!, {r1-r12, pc}^

irq_entry:
    sub r14, r14, #4
    ldr sp, =irq_stack_start
    SAVE_CONTEXT

    stmfd r13!, {r0-r12, r14}

    bl dispatch_interrupts

    ldmfd r13!, {r0-r12, pc}^

这里没有C。我只看到arm和内核。(但会有帮助吗?)事实上,如果您甚至不知道数据中止向量是哪一个,那么是时候坐下来研究相关的(需要注册)-分别针对Pi 1、2或3的v6、v7或v8。如何分配和映射页面;这是你的操作系统,你可以随心所欲地实现…@notlike我已经找到了数据中止向量以及在中断向量中加载它的位置。我只是,被什么寄存器推到堆栈上以及基本上在正确方向上的一些步骤难住了。可能会有一些有趣的信息给你。基本上,你需要知道FSR和FAR;这些是CP15寄存器,它提供了您期望的一些信息。有两个故障(数据/代码),银行业务类似。否则,你的问题就目前而言是非常广泛的。注:FAR仅用于数据故障;是数据访问导致了故障。如果您想要出现故障的指令,则该指令被列为LR of fault(+8)。。。倾斜spsr是故障模式。