我正在为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}^