1.字符驱动的访问都有一个统一的入口,位于arch/arm/kernel/entry_common.S的207行(我使用的linux-3.4.2)
ENTRY(vector_swi) //入口
sub sp, sp, #S_FRAME_SIZEstmia sp, {r0 - r12} @ Calling r0 - r12
ARM( add r8, sp, #S_PC )
ARM( stmdb r8, {sp, lr}^ ) @ Calling sp, lr
THUMB( mov r8, sp )
THUMB( store_user_sp_lr r8, r10, S_SP ) @ calling sp, lr
mrs r8, spsr @ called from non-FIQ mode, so ok.
str lr, [sp, #S_PC] @ Save calling PC
str r8, [sp, #S_PSR] @ Save CPSR
str r0, [sp, #S_OLD_R0] @ Save OLD_R0
zero_fp
2.然后会获取应用程序中访问函数的id,如read,write,close等,有用一个固定的id
3.在后就是会跳转到一个id表中(arch/arm/kernel/calls.S),通过id找到对应的函数,然后调用