给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中包含: 进程状态.进程打开的文件. ...
随机推荐
- oracle定时器job的使用
对于DBA来说,数据库Job再熟悉不过了,因为经常要数据库定时的自动执行一些脚本,或做数据库备份,或做数据的提炼,或做数据库的性能优化,包括重建索引等等的工作.但是,Oracle定时器Job时间的处理 ...
- 基于Policy Gradient实现CartPole
http://chenrudan.github.io/blog/2016/09/04/cartpole.html 首页 分类 关于 归档 标签 基于Policy Gradient实现CartPole ...
- JAVA面试题整理(5)-数据库
数据库 1.Oracle/mysql分页有什么优化 2.悲观锁.乐观锁 悲观锁(Pessimistic Concurrency Control,PCC):假定会发生并发冲突,屏蔽一切可能违反数据完整性 ...
- [数据库] - org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection
MySQL的驱动改名了,如果使用原来的com.mysql.jdbc.Driver 那么会提醒驱动不正常了,那么新的MySQL驱动名为:com.mysql.cj.jdbc.Driver 之后还报错,如题 ...
- shell 判断变量是否为空
一句话判断 [ ! $a ] && echo "a is null" 1.判断变量 read -p "input a word :" word ...
- 最全android Demo
1.BeautifulRefreshLayout-漂亮的美食下拉刷新 https://github.com/android-cjj/BeautifulRefreshLayout/tree/Beauti ...
- 【Python】远离 Python 最差实践,避免挖坑
原文链接:http://blog.guoyb.com/2016/12/03/bad-py-style/ 最近在看一些陈年老系统,其中有一些不好的代码习惯遗留下来的坑:加上最近自己也写了一段烂代码导致服 ...
- 【转】使用sklearn做特征工程
1 特征工程是什么? 有这么一句话在业界广泛流传:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已.那特征工程到底是什么呢?顾名思义,其本质是一项工程活动,目的是最大限度地从原始数据中 ...
- 数据库连接池druid 监控台配置
这篇文章主要讲druid 监控台的配置及界面使用介绍. 业界把 Druid 和 HikariCP 做对比后,虽说 HikariCP 的性能比 Druid 高,但是因为 Druid 包括很多维度的统计和 ...
- idea如何热部署(转)
IntelliJ IDEA 怎么热部署,每次修改java文件就得重启tomcat 原文链接:http://blog.csdn.net/dandandeshangni/article/details/ ...