图为应用程序与驱动程序的关系图:
当应用程序调用系统函数read时,会首先经过内核的处理,然后再去调用驱动程序中相应的函数。
可以使用反汇编查看read系统函数的实现:
arm-linux-gcc -static -g read_mem.c -o read_mem
然后:
arm-linux-objdump -D -S read_mem >dump
vi dump
read(fd, &dst, sizeof(int));
8250: e24b300c sub r3, fp, #12 ; 0xc
8254: e51b0008 ldr r0, [fp, #-8]
8258: e1a01003 mov r1, r3
825c: e3a02004 mov r2, #4 ; 0x4
8260: eb0028be bl 12560 <__libc_read>
arm对于少于4个参数的变量,使用通用寄存器存储。这里使用了r0, r1, r2。可以看到read执行跳转到了内核_libc_read,你也可以查看内核函数的实现。
过程叙述如下:
read——内核入口(ENTRY)——取NO——查表调用sys_read——vfsread——file_opration——xxx_read
ARM内核驱动—驱动程序大揭密,布布扣,bubuko.com
ARM内核驱动—驱动程序大揭密
原文:http://blog.csdn.net/renren900207/article/details/22149565