Linux中自定义系统调用
2013-10-25 20:27
225 查看
一. 实验目的
系统调用是内核提供给用户应用程序使用的内核函数名,这些函数提供了内核为用户应用程序所提供的系统服务功能。这些函数在用户应用程序中的书写格式与用户自定义函数形式上没有什么不同,但这些函数的编写和调用过程却与自定义函数有着很大的不同。它们需要事先在内核中安排好入口和函数体,当调用时会引发系统软中断根据对应的存根函数查中断表进入请求的内核函数。
二. 实验问题
1、实现一个系统调用,获取系统时间
2、编写一个测试该系统调用的用户程序
三.实验内容
1.下载内核linux-2.6.36.1,并解压在/usr/src里面。
2.添加用户自定义系统调用入口。
(1)在/usr/src/linux-2.6.36.1/arch/x86/kernel/syscall_table32.S中,添加新的系统调用函数名,要求声明的格式为:
.long sys_系统调用函数名
例如:
.long sys_mySyscall
(2)在/usr/src/linux_2.6.36.1/arch/x86/include/asm/unistd中在其中添加新的系统调用号的宏定义,要求声明的格式为:
#define _NR_ 系统调用函数名 系统调用最后一个编号
例如:
#define _NR_mySyscall 333
(3)在usr/src/linux_2.6.36.1/kernel/sys.中添加自己的系统调用函数代码,如下:
3 .接下来就是对内核进行编译安装,首先在终端打开/usr/src/linux-2.6.36.1,输入命令make localmodconfig命令,配置内核,选项默认即可。
4. 接着输入make对内核进行编译,这要费一段时间。
5. 再输入make modules_install安装内核模块。
6. 最后make install 安装内核,安装好后,重启进入安装后的内核。
7. 编写测试程序进行测试。
系统调用是内核提供给用户应用程序使用的内核函数名,这些函数提供了内核为用户应用程序所提供的系统服务功能。这些函数在用户应用程序中的书写格式与用户自定义函数形式上没有什么不同,但这些函数的编写和调用过程却与自定义函数有着很大的不同。它们需要事先在内核中安排好入口和函数体,当调用时会引发系统软中断根据对应的存根函数查中断表进入请求的内核函数。
二. 实验问题
1、实现一个系统调用,获取系统时间
2、编写一个测试该系统调用的用户程序
三.实验内容
1.下载内核linux-2.6.36.1,并解压在/usr/src里面。
2.添加用户自定义系统调用入口。
(1)在/usr/src/linux-2.6.36.1/arch/x86/kernel/syscall_table32.S中,添加新的系统调用函数名,要求声明的格式为:
.long sys_系统调用函数名
例如:
.long sys_mySyscall
(2)在/usr/src/linux_2.6.36.1/arch/x86/include/asm/unistd中在其中添加新的系统调用号的宏定义,要求声明的格式为:
#define _NR_ 系统调用函数名 系统调用最后一个编号
例如:
#define _NR_mySyscall 333
(3)在usr/src/linux_2.6.36.1/kernel/sys.中添加自己的系统调用函数代码,如下:
#include<stdio.h> #include<sys/time.h> asmlinkage void mysyscall(void ) { struct Rtc_time now; __get_rtc_time(&now); printk(“%d/%d/%d,%d:%d:%d\n”,now.tm_year+1900,now.tm_mon+1,now.tm_mday,now.tm_hour,now.tm_min,now.tm_sec); //printk并不是在终端输出,而是在buffers里写入信息,在显示时要先dmesg –c清除buffers里的信息,在运行后输入dmesg指令才能显示函数的内容 }
3 .接下来就是对内核进行编译安装,首先在终端打开/usr/src/linux-2.6.36.1,输入命令make localmodconfig命令,配置内核,选项默认即可。
4. 接着输入make对内核进行编译,这要费一段时间。
5. 再输入make modules_install安装内核模块。
6. 最后make install 安装内核,安装好后,重启进入安装后的内核。
7. 编写测试程序进行测试。
相关文章推荐
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- 基于 Linux 集群环境上 GPFS 的问题诊断
- 谁是桌面王者?Win PK Linux三大镇山之宝
- vivi下重新调整分区
- Linux VS Unix:Linux欲一统天下 Unix不死
- linux下设定环境变量
- Linux下修改MySQL编码的方法
- Linux串口通信
- 从Windows系统下访问Linux分区相关软件
- 看看我的Ubuntu Linux截图
- ARM Linux系统启动
- Linux及ARM Linux程序开发笔记(零基础入门篇)