加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux系统调用过程

发布时间:2021-02-22 23:14:42 所属栏目:Linux 来源:网络整理
导读:副标题#e# 1 ? fork、open、write 等等函数实际上并不是真正的系统调用函数,他们都只是c库, swi 指令,产生一个软中断,使CPU 陷入内核态, 2 系统调用过程 http://www.linuxidc.com/Linux/2015-04/116546.htm 系统调用是操作系统提供给用户(应用程序)

? CALL(sys_eventfd2)? CALL(sys_epoll_create1)? CALL(sys_dup3)? CALL(sys_pipe2)/* 360 */?CALL(sys_inotify_init1)? CALL(sys_preadv)? CALL(sys_pwritev)? CALL(sys_rt_tgsigqueueinfo)? CALL(sys_perf_event_open)

?了解了一个系统调用的执行过程就可以试着添加一个自己的系统调用了:

内核:

1. 在内核代码实现一个系统调用函数

即 sys_xxx()函数,如我在 kernel/printk.c 中添加了

void pk()

{

  printk(KERN_WARNING"this is?my first sys call?!n");

}

2. 添加系统调用号

添加? #define __NR_pk? ? (__NR_SYSCALL_BASE+365)

3.?添加调用函数指针列表

添加 CALL(sys_pk)

4.?声明自己的系统调用函数

添加asmlinkage long?sys_pk()

用户空间:

? ? ? void pk()

  {

    __asm__(

    "ldr? r7? =365 n"

    "swi n"

    :

    :

    :

    );

  }

  int main()

  {

   ? ?pk();

?    retrun 0;

  }

完成上面的编写以后就可以编译内核和应用程序了。

将生成的文件在arm开发板上运行可以打印出:?This is my first sys call!

说明我添加的系统调用可以使用。

至此,描述系统调用的实现机制和添加一个新的系统调用就完成了。

3

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读