添加Linux系统调用(ubuntu, 3.13.0)

环境:Ubuntu 14.04 64位
内核版本:3.13.0

下载Linux源码

安装必备软件

apt-get gcc make libncurses5-dev

下载源码

apt-get linux-source
下载后的源码在/usr/src下面
我的是/usr/src/linux-source-3.13.0/linux-source-3.13.0.tar.bz2
解压:
tar jxvf linux-source-3.13.0.tar.bz2

  1. arch/x86/syscall/syscall_64.tbl
    添加

    318     common  mysyscall               sys_mysyscall
  2. include/uapi/asm-generic/unistd.h
    添加

    
    #define __NR_mysyscall 278
    
    __SYSCALL(__NR_mysyscall, sys_mysyscall)

    修改

    
    #undef __NR_syscalls
    
    
    #define __NR_syscalls 279
    
  3. kernel/sys.c
    添加

    SYSCALL_DEFINE0(mysyscall)
    {
            printk("mysyscall test\n") ;
            return 0 ;
    }

编译内核

修改保存,开始编译,基本编译步骤:

make menuconfig # 生成配置文件
make bzImage
make modules
make modules_install
make install

修改grub文件,启动时选择新生成的内核

GRUB_DEFAULT=1
GRUB_HIDDEN_TIMEOUT=5

修改完保存,执行update-grub
启动时按ESC键,选择新的内核

测试

测试代码

#include <unistd.h>
#include <sys/syscall.h>
#include <errno.h>
#include <stdio.h>

int main(void)
{
        syscall(318) ;
        printf("errno = %d\n", errno) ;
        return  0;
}

编译

gcc -o test test.c

执行
./test
如果打印:

errno = 0

应该就是成功了
再查看内核日志验证下
命令:

dmesg -c

输出

[ 1688.444480] mysyscall test

日志可能会有很多,只关心自己的日志就好了

添加系统调用还有很多不懂的地方,比如2.6版本的内核添加的方法与3.13版本的差别很大,怎么知道一个对应的版本如何添加系统调用的

参考

  1. linux-3.5.4内核添加新的系统调用并测试
  2. 如何编译Linux内核
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值