Linux 增加系统调用 (转)

Linux 增加系统调用大致步骤:

1、下载好内核文件,在内核源文件中添加好自己的调用函数。

2、编译内核

3、验证。

一、在内核源文件中增加自己的函数

首先将内核文件移至/usr/src/下并解压。

过程参考http://www.cnblogs.com/kavs/p/4607371.html

下面开始添加自己的函数。

sudo gedit /usr/src/linux-4.0.6/kernel/sys.c

插入头文件 #include <linux/linkage.h>

/*
 *leemo‘s own define task
 */
 asmlinkage int sys_leemohello(char * buf){
     printk(KERN_EMERG"===this is leemo‘s work =====");
     printk(KERN_EMERG"==2012221107110095 leemo",buf);
     return 1;
 }

sudo gedit /usr/src/linux-4.0.6/arch/x86/syscalls/syscall_32.tbl

记住增加的系统号 如上面的359

sudo gedit /usr/src/linux-4.0.6/arch/x86/include/asm/syscalls.h

二 、编译内核

编译内核。。。。过程参考http://www.cnblogs.com/kavs/p/4607371.html

编译完成后重启。

三、验证

编写测试代码

1、先建个文件夹mkdir leemotest

2、创建测试代码sudo gedit testleemohello.c 键入代码:

#include <stdio.h>
   int main()
   {
       int rs;
       char * buf="leemo";
       rs=syscall(359,buf);
       printf("%d %s \n",rs,buf);
       if(rs==1){
           printf("system call is success!\n");
       }
       else
           printf("sorry,failed!\n");
       return 0;
   }

编译测试代码:

gcc testleemohello.c -o testleemohello

运行测试代码:

./testleemohello

结果截图:

接着输入dmesg

调用完成。

http://www.cnblogs.com/kavs/p/4607367.html

时间: 2024-10-10 05:47:53

Linux 增加系统调用 (转)的相关文章

【原创】Linux 增加系统调用

首先将内核文件移至/usr/src/下并解压. 过程参考http://www.cnblogs.com/kavs/p/4607371.html 然后..开始增加系统调用.. sudo gedit /usr/src/linux-4.0.6/kernel/sys.c 插入头文件 #include <linux/linkage.h> 1: /* 2: *leemo's own define task 3: */  4: asmlinkage int sys_leemohello(char * buf)

Linux增加系统调用

Linux讲一个东西,我就选择了系统调用..  中间主要是系统原本是64的,我之前用32的内核安装,自然是失败了...(也不知道是不是失败的主要原因) 然后3.19.0的内核我换成了3.19.2的内核,然后成功添加了系统调用. 由于多次make,还没清除内核,变成巨大的45G的文件夹了.. 链接:http://pan.baidu.com/s/1dE2BNm5

linux内核增加系统调用 - 内核版本3.16.39

详细内容见下面链接: http://files.cnblogs.com/files/jingjingblog/linux%E5%86%85%E6%A0%B8%E5%A2%9E%E5%8A%A0%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8.pdf 文档主要内容: 1.基础知识介绍 2.增加系统调用 3.以树的形式输出进程间的父子关系

linux内核增加系统调用--Beginner‘s guide

Linux内核中设置了一组用于实现系统功能的子程序,称为系统调用.系统调用和普通库函数调用非常相似明知是系统调用由操作系统核心提供,运行于核心态,而普通的函数调用由函数库或用户自己提供,运行于用户态. 一般的,进程是不能访问内核的,它不能访问内核所占用内存空间也不能调用内核函数.这被称为保护模式.为了和用户空间上运行的进程进行交互,内核提供一组接口.通过该接口应用程序可以访问硬件设备和其他操作系统资源. 实际上提供这组接口主要是为了保证系统稳定可靠,避免应用程序肆意妄为. 系统调用在用户空间和硬

linux内核系统调用和标准C库函数的关系分析

今天研究了一下系统调用和标准库函数的区别和联系,从网上搜集的资料如下: 1.系统调用是为了方便应用使用操作系统的接口,而库函数是为了方便人们编写应用程序而引出的,比如你自己编写一个函数其实也可以说就是一个库函数. 2.系统调用可以理解为内核提供给我们在用户态用的接口函数,可以认为是某种内核的库函数. 3.read就是系统调用,而fread就是C标准库函数. 4.很多c函数库中的函数名与系统调用的名称一样是因为该函数本身其实就是调用的系统调用,放到c函数库就是为了用户态的使用 5.写程序直接使用的

Linux内核-系统调用

Linux内核-系统调用 1.与内核通信 #系统调用在用户空间进程和硬件设备之间增加了一个中间层 作用:1.为用户空间提供了一种硬件的抽象接口 2.系统调用保证了系统的稳定和安全 3.出于每个进程都运行在虚拟系统中的考虑 #系统调用是用户空间访问内核的唯一手段 2.API.POSIX和C库 #应用程序通过API而不是直接系统调用来编程 #一个API定义了一组应用程序使用的编程接口 3.系统调用 #内核必需提供系统调用所希望完成的功能,但它完全可以按照自己的方式去实现,只要最后结果正确 #所有的系

linux内核系统调用--sendfile函数

在apache,nginx,lighttpd等web服务器当中,都有一项sendfile相关的配置,在一些网上的资料都有谈到sendfile会提升文件传输性能,那sendfile到底是什么呢?它的原理又是如何呢? 在传统的文件传输里面(read/write方式),在实现上其实是比较复杂的,需要经过多次上下文的切换,我们看一下如下两行代码: Java代码 read(file, tmp_buf, len); write(socket, tmp_buf, len); 以上两行代码是传统的read/wr

vmware中为linux增加硬盘和增加硬盘空间的方法

使用过程中,经常会遇到虚拟机磁盘空间不够或者按需增加硬盘的情况.在vmware中为Linux添加硬盘或增加硬盘空间的详细操作步骤如下: 一.Vmware中为linux增加硬盘的方法 1. 在vmware中为Linux虚拟机的编辑设置中(setting)增加一个硬盘. 2. 在vmware中看见第1个硬盘是/dev/sda , 第2个硬盘是 /dev/sdb 3. 创建硬盘信息fdisk /dev/sdba. 按n添加分区,选p(主分区);b. 选1,也就是sdb1;c. 然后就是空间划分,一路回

Linux增加LV(逻辑卷)容量

Linux增加LV(逻辑卷)容量 2017-09-29-17:34:13 个人原创博客,转载请注明出处. 查看逻辑卷的相关命令: lvs vgs 命令: [[email protected] ~]# vgs VG #PV #LV #SN Attr VSize VFree vg_arch 1 4 0 wz--n- 544.01g 0 [[email protected] ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 vg_arch lvm2 a--u 5