linux内核编程4部曲之二:增加linux内核系统调用
来源:互联网 发布:故宫 书目 知乎 编辑:程序博客网 时间:2024/05/16 03:30
linux内核编程4部曲之一:linux内核编译(2.6.12版本)图文解说
linux内核编程4部曲之二:增加linux内核系统调用
linux内核编程4部曲之三:修改O(1)调度算法
linux内核编程4部曲之四:模块编程
本文,承接上面一篇linux内核编译,增加系统调用后,需要重新编译内核。
一、实验目的
增加加减乘除系统调用,并测试系统调用和用户调用的性能差异。
二、增加系统调用
增加系统调用主要分为3步:
1)、增加系统调用函数。修改/usr/src/linux-2.6.12/kernel/sys.c文件,在文件末尾增加4个系统响应函数(+、-、*、/)。函数实现如下:
2)、在系统调用表中注册。
在/usr/src/linux-2.6.12/arch/i386/kernel/syscall_table_32.S中添加我们的系统调用。
3)、添加系统调用入口参数
在/usr/src/linux-2.6.12/include/asm-i386/unistd.h中添加系统调用入口参数(注意:其中会顺序定义入口参数的序号,添加的序号是在原有最大值的基础上+1)。
三、编译内核,引导新内核启动
四、测试
测试需要在添加了系统调用的新系统中进行。
1)功能测试
首先测试,系统调用是否能正常执行,测试程序为testsyscall.c
- #include<asm/unistd.h>
- #include<errno.h>
- #include<stdio.h>
- #define __NR_add 289
- #define __NR_sub 290
- _syscall2(int ,add,int ,x,int,y)
- _syscall2(int ,sub,int ,x,int ,y)
- int main()
- {
- printf("%d\n",add(10,10));
- printf("%d\n",sub(15,10));
- return 0;
- }
2)、性能测试
要对比系统调用和用户调用的性能差异,我们先编写用户调用的测试程序testusercall.c
- #include<stdio.h>
- int add(int x,int y)
- {
- return x+y;
- }
- int main()
- {
- int i=0;
- for(i=0;i<100000000;i++)
- {
- add(10,20);
- }
- return 0;
- }
- #include<asm/unistd.h>
- #include<stdio.h>
- #define __NR_add 289
- _syscall2(int ,add,int ,x,int,y)
- int main()
- {
- int i=0;
- for(i=0;i<100000000;i++)
- {
- add(10,20);
- }
- return 0;
- }
可以发现,两个测试程序在系统sys运行时间差别很大,testusercall仅在sys运行了0m0.003s,而testsyscall却在sys运行了0m4.028s,说明,系统调用的sys时间远远大于用户层调用的时间。
0
上一篇:linux内核编程4部曲之一:linux内核编译(2.6.12版本)图文解说
下一篇:linux内核编程4部曲之三:修改O(1)调度算法
相关热门文章
- linux 常见服务端口
- xmanager 2.0 for linux配置
- 【ROOTFS搭建】busybox的httpd...
- openwrt中luci学习笔记
- Linux里如何查找文件内容...
给主人留下些什么吧!~~
评论热议
阅读全文
0 0
- linux内核编程4部曲之二:增加linux内核系统调用
- linux内核编程4部曲之二:增加linux内核系统调用
- linux内核编程4部曲之二:增加linux内核系统调用
- Linux内核增加系统调用
- linux内核增加系统调用
- linux内核增加系统调用
- Linux之使用内核模块增加一个系统调用
- 修改Linux内核增加系统调用
- 修改Linux内核增加系统调用
- zz修改Linux内核增加系统调用
- Linux内核之系统调用
- Linux内核之系统调用
- linux内核之系统调用
- linux内核之系统调用
- 增加Linux系统调用——通过增加内核模块
- linux内核--系统调用(二)
- Linux内核笔记(二) 系统调用
- Linux内核模块编程--系统调用
- 电视影评-《战狼2》观后感
- Shell脚本常识(基本知识)
- gdb查看内存区命令
- 虚拟地址的结构与操作
- Linux启动过程详解
- linux内核编程4部曲之二:增加linux内核系统调用
- Docker Toolbox
- linux内核编程4部曲之三:修改O(1)调度算法
- HDU 5608 莫比乌斯反演 + 莫比乌斯函数前缀和
- linux内核编程4部曲之四:模块编程
- C
- strtok函数应用
- Subline Text3 基本命令
- strncpy的实现
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
复古传奇封魔殿怎么走
封龙山门票
石家庄封龙山
石家庄封龙山风景区
性射阁
精子射出
自拍精子射出瞬间
女人会射出液体吗
精子射出原理动画
世界第一能射出大量一共几部
精子射出用纸擦还会存活吗
射出的精发黄
模拟射击场地
北京射击场2018价格
北京射击场
北方国际射击场价格表
普吉岛射击场
广州射击场
北方射击场
营业性射击场
实弹射击场价格
射击场审批
中国射击场
射击枪
暗黑3猎魔人怎么无限多重射击
射击类单机手游
射击类网游排行榜
好玩的射击类手游
射击靶
射击中心
射击俱乐部收费
上海射击俱乐部
北京射击俱乐部
射击体验馆
射墙上
狼义射
射狼
狼很射成人
狼射
射天狼s18中文说明
射天狼作品