免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2403 | 回复: 2
打印 上一主题 下一主题

linu系统调用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-18 14:35 |只看该作者 |倒序浏览
本帖最后由 feiyangczm 于 2011-04-18 15:07 编辑

一。Linux系统调用的几个要素:
1。系统调用门
   系统调用接口基于软中断实现。在系统内核初始化过程中内核为系统调用设置了0x80的中断门。系统调用通过该中断门的安全检验然后切换到内核栈中。
2。内核态栈
   在Linux系统中,一个用户进程包含一个用户态栈和一个内核态栈,用户态栈存储了用户进程运行在用户态时函数调用的参数,局部变量和其他辅助书记。内核态栈相应的也是保存在进程运行在内核态时函数调用的参数,局部变量和其他的数据。
3。系统调用号
   内核为了能判断用户请求了哪个系统调用而定义了系统调用号(在src/include/asm/unistd.h中定义)。在将系统调用号作为system_call的参数从而实现系统调用。
4。系统调用表sys_call_table(在src/arch/i386/kernel/system_table.S中定义)
   该表为系统调用号对应的定义了系统调用服务函数的入口地址。入口地址在构造内核镜像的过程中被确定。

二、创建一个系统调用
1。修改系统调用表
在src/arch/i386/kernel/system_table.S中的sys_call_table的最后添加一个系统调用sys_call_test。如:
                  .long sys_dup3                        /* 330 */
        .long sys_pipe2
        .long sys_inotify_init1
                .long sys_call_test                           /*333*/

相应的在src/include/asm-x86/unistd.h中增加对应的系统调用号
           #define __NR_pipe2                331
                #define __NR_inotify_init1        332
                #define __NR_call_test           333
2。添加处理函数
  为了方便我们就在src/kernel/time.c中添加该测试函数
   asmlinkage long sys_call_test(void)
   {
            return 11;
  }
这样就完成了系统调用的添加
3。测试
我们采用syscall()函数来实现该调用
#include "stdio.h"
。。。。
。。。
#define __NR_SYSCALL_TEST  333
int main(int argc,char **argv)
{
      printf("system call test %d\n",syscall(__NR_SYSCALL_TEST));
      return 1;
}

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
2 [报告]
发表于 2011-04-18 16:01 |只看该作者
系统调用这一块的代码变化太大了。

论坛徽章:
30
黑曼巴
日期:2019-04-11 12:11:0215-16赛季CBA联赛之八一
日期:2019-06-11 14:31:1915-16赛季CBA联赛之八一
日期:2019-08-06 09:37:182016科比退役纪念章
日期:2020-04-26 09:09:56黑曼巴
日期:2020-12-23 10:47:1015-16赛季CBA联赛之吉林
日期:2021-04-02 13:50:272016科比退役纪念章
日期:2022-08-01 15:03:15黑曼巴
日期:2023-10-07 16:19:58黑曼巴
日期:2018-09-12 13:34:41CU十四周年纪念徽章
日期:2018-06-19 21:17:58洛杉矶湖人
日期:2015-03-02 16:07:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
3 [报告]
发表于 2011-04-18 16:23 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP