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

news/2024/7/21 8:21:58 标签: linux, 系统调用, kernel

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

linux源码">下载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内核

http://www.niftyadmin.cn/n/734015.html

相关文章

LWN:使用KCSAN查找race condition!

点击上方蓝色“Linux News搬运工”关注我们~Finding race conditions with KCSANBy Jonathan CorbetOctober 14, 2019Race conditions &#xff08;多方竞争&#xff09;是最难调查的一类bug了。这种问题的影响有可能很细微&#xff0c;重现也很难&#xff0c;甚至完全不可能。…

TIP 链接错误 link error

TIP 链接错误 link error 环境 OS : linux 3.13.0gcc : 4.8.2code: sqlite-3.5.3 详细信息 执行的编译命令 gcc -fpic -ftemplate-depth-64 -m64 -DLINUX -DLINUX_X86 -DOPENBOSS -DV20 -DGANSU -D_REENTRANT -D__OPENBOSS_NGMAKE__ -D_THREAD_SAFE -DPTHREADS - DTHREAD…

LWN: Facebook使用BPF的情况以及其他

点击上方蓝色“Linux News搬运工”关注我们~BPF at Facebook (and beyond)By Jonathan CorbetKernel RecipesFacebook内部做了很多工作来完善kernel内部的BPF虚拟机以及相关的user-space支持代码&#xff0c;这方面大家都很了解了&#xff0c;不过还很少有人知道Facebook内部是…

TIP: system errno 12 Cannot allocate memory

TIP: system errno 12 Cannot allocate memory 问题描述 程序中调用sytem执行gzip ‘file’脚本压缩文件&#xff0c;但是system返回-1&#xff0c;通过gdb查看&#xff0c;errno是12&#xff0c;就是Cannot allocate memory。 问题原因 system调用fork创建一个新的进程&am…

LWN: core scheduling的多种应用场景

点击上方蓝色“Linux News搬运工”关注我们~Many uses for Core schedulingBy Jonathan CorbetLPCkernel开发社区中对一些新的功能是持非常欢迎的态度&#xff0c;而对另一些可能就不太欢迎了。很明显&#xff0c;core scheduling就是争议颇大的一个功能。它会对某个CPU上同时运…

SystemTap介绍

SystemTap介绍 SystemTap,Linux kernel 简介 SystemTap是一个诊断Linux系统性能或功能问题的开源软件。它使得对运行时的Linux系统进行诊断调式变得更容易、更简单。有了它&#xff0c;开发者或调试人员不再需要重编译、安装新内核、重启动等烦人的步骤。 为了诊断系统问题或…

LWN: VR和AR的开源方案

Free software support for virtual and augmented reality By Jake Edge XDC 在加拿大蒙特利尔近期举行的X.Org Developers Conference会议上&#xff0c;有一个话题介绍了自由软件中的XR解决方案。XR就是指VR&#xff08;虚拟现实&#xff09;和AR&#xff08;增强现实&#…

Linux 性能测试工具

Linux 性能测试工具 linux performance 查看系统配置 查看CPU信息 lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit CPU(s): 8 Thread(s) per core: 2 Core(s) per socket: 4 CPU socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 …