Linux中自定义系统调用

一. 实验目的

系统调用是内核提供给用户应用程序使用的内核函数名,这些函数提供了内核为用户应用程序所提供的系统服务功能。这些函数在用户应用程序中的书写格式与用户自定义函数形式上没有什么不同,但这些函数的编写和调用过程却与自定义函数有着很大的不同。它们需要事先在内核中安排好入口和函数体,当调用时会引发系统软中断根据对应的存根函数查中断表进入请求的内核函数。

二. 实验问题

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. 编写测试程序进行测试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值