给Linux内核增加一个系统调用的方法(转)
作者:chenjieb520
给Linux内核增加一个系统调用的方法
为了更加好地调试linux内核,笔者的实验均在mini6410的arm板上运行的。这样做的原因,第一是因为本人是学嵌入式的,第二是这样可以在arm板上进行实验,可以提高实验的效率。
(1)、首先定义你所要添加的系统调用名,然后在Linux-2.6.x/kernel/创建一个文件,文件名为:mysyscall.c文件的内容为:

(2)、在Linux-2.6.x/arch/x86/include/asm/unistd_32.h中为系统调用定义一个索引号,这个索引号必须在索引列表的最后一个的后面。

(3)、在unistd_32.h中同时添加了系统调用的个数
#define __NR_syscalls 295 //add by chenjieb

(4)、在Linux-2.6.x/arch/x86/kernel/syscall_table.S中,这个表按系统调用号(即前面提到的__NR_name)排列了所有系统调用函数的指针,以供系统调用入口函数查找。从这张表看得出,linux给它所支持的系统调用函数取名叫sys_name。
.long sys_mysyscall

(5)、在Linux-2.6.x/kernel/Makefile中添加如下的语句,这是用于内核的编译使用的。
obj-y += mysyscall.o

(6)、写一个测试的程序。测试上述的西系统调用是否可以用。
#include <errno.h>
#include <sys/syscall.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
long errno_one;
#define __NR_mysyscall 294
int main()
{
errno_one=mysyscall(12,24);
printf("%d\n",errno_one);
return 0;
}
运行结果:首先先对增加了新的系统调用的内核进行编译,将编译后的内核下载到arm板上,然后编译自己的测试程序。
1、编译内核结果如下:

2、运行的结果:如果在自己的PC板上运行的话,需要超级用户,而我是在arm板上运行,arm板上的系统默认是超级用户,所以我这里只需要一般的运行即可,结果如下:

希望这个教程对大家学习Linux内核有用!欢迎大家批评指教!
http://blog.csdn.net/chenjieb520/article/details/7317629
给Linux内核增加一个系统调用的方法(转)的更多相关文章
- 向linux内核增加一个系统调用-2(利用proc打印信息)
添加系统调用,打印/proc中的系统信息 前面关于proc和内核态函数的东西可以对比代码来看. 参考 http://blog.csdn.net/kylin_fire_zeng/article/deta ...
- 向linux内核增加一个系统调用-1
验证编辑编译内核的流程,并增加新的系统调用 注意:需要/目录至少10GB空间,/boot目录500MB空间 下载内核并解压 kernel下载 百度云搬运 密码: qc8b 进入 /usr/src目录 ...
- 操作系统项目:向Linux内核添加一个系统调用
内容: 向Linux增加一个系统调用 撰写一个应用测试程序调用该系统调用 使用ptrace或类似的工具对该测试程序进行跟踪调 环境: 1.vmware workstation 15.0.0 2.ubu ...
- 成为Linux内核高手的四个方法
首页 最新文章 资讯 程序员 设计 IT技术 创业 在国外 营销 趣文 特别分享 更多 > - Navigation -首页最新文章资讯程序员设计IT技术- Java & Android ...
- linux内核分析作业6:分析Linux内核创建一个新进程的过程
task_struct结构: struct task_struct { volatile long state;进程状态 void *stack; 堆栈 pid_t pid; 进程标识符 u ...
- 第六周分析Linux内核创建一个新进程的过程
潘恒 原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 task_struct结构: ...
- 实验 六:分析linux内核创建一个新进程的过程
实验六:分析Linux内核创建一个新进程的过程 作者:王朝宪 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029 ...
- 20135202闫佳歆--week6 分析Linux内核创建一个新进程的过程——实验及总结
week 6 实验:分析Linux内核创建一个新进程的过程 1.使用gdb跟踪创建新进程的过程 准备工作: rm menu -rf git clone https://github.com/mengn ...
- 《Linux内核--分析Linux内核创建一个新进程的过程 》 20135311傅冬菁
20135311傅冬菁 分析Linux内核创建一个新进程的过程 一.学习内容 进程控制块——PCB task_struct数据结构 PCB task_struct中包含: 进程状态.进程打开的文件. ...
随机推荐
- mongodb-的副本集
复制的重要性不再多说,其主要就是提供数据保护,数据高可用和灾难恢复. 复制是跨多个mongodb服务器分布和维护的方法.mongodb可以把数据从一个节点复制到其他节点并在修改时进行同步. mongo ...
- SqlServer2012数据导入
1.选择数据库,右击[任务]-->[导入数据]: 2.选择对应的数据源,和数据文件,下一步: 3.填写服务器地址,和数据库的登录信息,选择数据库名称: 4.复制一个或多个表或试图的数据: 5.将 ...
- 从0开始学习 GITHUB 系列之「向GITHUB 提交代码」【转】
本文转载自:http://stormzhang.com/github/2016/06/04/learn-github-from-zero4/ 版权声明:本文为 stormzhang 原创文章,可以随意 ...
- String StringBuilder StringBuffer 对比 总结得非常好
转自:http://www.iteye.com/topic/522167 作者:每次上网冲杯Java时,都能看到关于String无休无止的争论.还是觉得有必要让这个讨厌又很可爱的String美眉,赤裸 ...
- 论文笔记——N2N Learning: Network to Network Compression via Policy Gradient Reinforcement Learning
论文地址:https://arxiv.org/abs/1709.06030 1. 论文思想 利用强化学习,对网络进行裁剪,从Layer Removal和Layer Shrinkage两个维度进行裁剪. ...
- python 获取5天前的日期
from datetime import date, timedelta dt = date.today() - timedelta() print('Current Date :',date.tod ...
- 【Python】实现对大文件的增量读取
背景 前段时间在做一个算法测试,需要对源于日志的数据进行分析才能获取到结果:日志文件较大,所以想要获取数据的变化曲线,增量读取是最好的方式. 网上有很多人的技术博客都是写的用for循环readline ...
- docker容器互联 (.net core容器,mysql容器)
背景 有两个容器一个运行的.net core的项目 另一个运行的mysql的数据 并且这两个容器在同一个机子上(或者局域网),那么理论上.net core的项目去访问mysql是可以走内网的 但是容器 ...
- HDU-4550-贪心
卡片游戏 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submis ...
- UVA-11613 Acme Corporation (最大费用最大流+拆点)
题目大意:有一种商品X,其每每单位存放一个月的代价I固定.并且已知其每月的最大生产量.生产每单位的的代价.最大销售量和销售单价,还已知每个月生产的X能最多能存放的时间(以月为单位).问只考虑前m个月, ...