ARM内核中的页面错误处理

时间:2016-04-27 19:00:56

标签: arm kernel

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

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

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}^

0 个答案:

没有答案