美文网首页
ubuntu16.04.3LTS64位增加新的内核函数 myca

ubuntu16.04.3LTS64位增加新的内核函数 myca

作者: ShichijoAria | 来源:发表于2017-11-26 20:45 被阅读0次

1. 实验目的

向现有 Linux 内核加入一个新的系统调用从而在内核空间中实现对用户空间的读写。 例如,设计并实现一个新的内核函数 mycall(),此函数通过一个引用参数的调用返回 当前系统时间,功能上基本与gettimeofday()相同。 也可以实现具有其它功能的系统调用。

2. 实验内容与步骤

1. 获取 Linux 内核源代码

http://www.kernel.org下载Linux最新内核源代码(本文示例为4.10.9)拷贝至/usr/src文件夹并解压

tar -zxvf linux-4.10.9.tar.gz
su
cp -r linux-4.10.9 /usr/src
cd /usr/src/linux-4.10.9

2. 添加新调用的源代码

在 kernel/sys.c 尾部中添加相应的调用代码sys_mycall

asmlinkage int sys_mycall(struct timeval *tv) 
{
    struct timeval ktv;
    
    do_gettimeofday(&ktv);
    // 将内核空间的数据拷贝至用户空间
    if (copy_to_user(tv,&ktv,sizeof(ktv))) {
        return -EFAULT; 
    }
    return 0; 
}

3. 修改系统调用表

在 arch/x86/entry/syscalls/syscall_64.tbl中添加调用名和函数名

332 common  mycall  sys_mycall

4. 编译内核

安装编译所需的工具

apt-get install ncurses-dev libssl-dev

编译

make mrproper #清除内核中不稳定的目标文件夹,附属文件及内核配置文件 
make clean #清除以前生成的目标文件和其他文件 
make menuconfig #配置内核,采用默认配置即可,选择exit 
make -j8 #同时开启8条线程
make modules_install
make install
reboot #重启

5.查看内核

6.编写测试程序

#include <sys/time.h>
#include <zconf.h>
#include<stdlib.h>
#include<stdio.h>
#define MYCALL  332
int main()
{
    struct timeval gettime;
    struct timeval mycalltime;
    gettimeofday(&gettime,NULL);
    syscall(MYCALL, &mycalltime);
    printf("gettimeofday:%lu %lu\n",
           gettime.tv_sec,gettime.tv_usec);
    printf("mycall:%lu %lu\n",
           mycalltime.tv_sec,mycalltime.tv_usec);
    return 0;
}
gcc -o test test.c -Wformat=0
./test

大功告成

相关文章

  • ubuntu16.04.3LTS64位增加新的内核函数 myca

    1. 实验目的 向现有 Linux 内核加入一个新的系统调用从而在内核空间中实现对用户空间的读写。 例如,设计并实...

  • 内核ftrace的实现

    在动态ftrace原理中已经介绍了内核通过gcc -pg -fentry为函数增加5 Byte的stub,系统启动...

  • jupyter notebook kernel 找不到

    在 jupyter notebook新件文件时却缺少相应的内核 解决办法:切换到要增加内核的环境 重新启动jupy...

  • html常用标签属性

    点击输入框文字消失 发邮件 默认用急速内核,增加标签: 默认用ie兼容内核,增加标签: 默认用ie标准内核,增加标...

  • 内核态

    首先,内核函数在内存中,大家都知道内核态是调用内核的函数,因为用户空间所在等级低,那是如何来陷入内核态呢,内核态的...

  • 如何给 jupyter 增加新的 python 内核

    在我们已经安装了 Anaconda 和 python3 后,以添加 python2.7 为例,展示如何给 jupy...

  • centos7 删除多余内核启动项

    centos7 删除多余内核启动项 系统执行过yum update后会产生新的内核版本,开机启动项上也会增加一些启...

  • Win7 x86 SSDT Inline Hook

    SSDT是Ring3层函数调用通往内核层的“大门”,SSDT表里面的每一项是服务函数的函数地址(对于32位wind...

  • 关于LLVM pass的学习(3)-- BogusControl

    功能: 是为函数增加新的虚假控制流和添加垃圾指令 入口函数: BogusControlFlow继承了Functio...

  • C#:密封类可以有虚函数吗

    可以,基类中的虚函数将隐式的转化为非虚函数,但密封类本身不能再增加新的虚函数

网友评论

      本文标题:ubuntu16.04.3LTS64位增加新的内核函数 myca

      本文链接:https://www.haomeiwen.com/subject/cadlbxtx.html