Linux内核驱动学习(七)----系统调用揭秘

来源:互联网 发布:prisma 离线 知乎 编辑:程序博客网 时间:2024/04/30 07:57

Linux内核驱动学习(七)----系统调用揭秘

http://blog.csdn.net/u011467781/article/details/44106429?ref=myread

一、作用分析:

系统调用的定义:所有的操作系统都提供多种服务的入口点,程序由此向内核请求服务。这些定义明确、数量有限、可直接进入内核的入口点被称为系统调用。

二、系统调用的实现:

2.1使用软中断SWI指令实现用户空间到内核空间的切换。swi异常中断机制实现了在用户模式下对特权模式(SVC)下程序的调用。
注:Linux内核运行在SVC模式下,即保护操作系统模式下

2.2通过不同的系统调用标号实现不同的系统调用;(使用通用寄存器R7传递)
 我们先对系统调用涉及文件的介绍:
2.2.1:首先调用系统调用的列表在文件calls.S (linux-ok6410\arch\arm\kernel)
  
文件内容部分截图:

2.2.2:系统调用的标号在文件Unistd.h中 (linux-ok6410\arch\arm\include\asm) 
文件内容部分截图:


三、自己动手添加并实现系统调用

1、实现一个具有打印功能的系统调用:实现位置在kernel/printk.c文件中


2、在调用系统调用的列表中添加写好的系统调用:文件-->linux-ok6410\arch\arm\kernel\call.S



3、添加系统调用标号;文件--->linux-ok6410\arch\arm\include\asm\Unistd.h


注:均顺序添加到最后一行。

4、之后make clean;然后编译内核:make uImage ARCH=arm CROSS_COMPILE=arm-linux-

5、编写C文件syscall实现系统调用。



6、成功调用,并打印出信息


注:注意使用静态编译的方式编译syscall.c文件:

0 0
原创粉丝点击