向linux内核增加一个系统调用-1
验证编辑编译内核的流程,并增加新的系统调用
注意:需要/目录至少10GB空间,/boot目录500MB空间
下载内核并解压
kernel下载
百度云搬运 密码: qc8b
进入 /usr/src目录
tar -xvf linux-4.13.10.tar.xz
cd linux-4.13.10
添加系统调用号
vim ./arch/x86/entry/syscalls/syscall_64.tbl(32位系统是syscall_32.tbl)
声明系统调用函数原型
vim ./include/linux/syscalls.h
其中的asmlinkage用在大多数的系统调用中。在一些情况下是需要明确的告诉编译器使用stack来传递参数,X86中的系统调用是先将参数压入stack以后调用sys_函数的,所以所有的sys_函数都有asmlinkage来告诉编译器不要使用寄存器来编译。
添加系统调用函数的定义
vim kernel/sys.c 末尾添加
编译
make menuconfig
(缺失ncurses,sudo apt-get install libncurses5-dev,)选择save 然后exit
make clean
make -jn
并行编译,加快编译速度,n=cpu核心数×2,双核即-j4
scripts/sign-file.c:25:30: fatal error: openssl/opensslv.h: 没有那个文件或目录 sudo apt-get install libssl-dev
作为参考,i5-6200u 2.8GHZ需要40min左右
安装
make modules
make modules_install 安装模块
make install 安装内核
update-grub
测试
重启选择新的内核(grub引导界面选择ubuntu高级设置,选择linux-4.13.10)
进入后可uname -a确认内核版本
#include<stdio.h>
#include<unistd.h>
int main()
{
int a=syscall(333,2);
printf("system call return %d\n",a);
return 0;
}
编译后运行返回2,并在日志中打印hello world
向linux内核增加一个系统调用-1的更多相关文章
- 给Linux内核增加一个系统调用的方法(转)
作者:chenjieb520 给Linux内核增加一个系统调用的方法 为了更加好地调试linux内核,笔者的实验均在mini6410的arm板上运行的.这样做的原因,第一是因为本人是学嵌入式的, ...
- 向linux内核增加一个系统调用-2(利用proc打印信息)
添加系统调用,打印/proc中的系统信息 前面关于proc和内核态函数的东西可以对比代码来看. 参考 http://blog.csdn.net/kylin_fire_zeng/article/deta ...
- 操作系统项目:向Linux内核添加一个系统调用
内容: 向Linux增加一个系统调用 撰写一个应用测试程序调用该系统调用 使用ptrace或类似的工具对该测试程序进行跟踪调 环境: 1.vmware workstation 15.0.0 2.ubu ...
- 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中包含: 进程状态.进程打开的文件. ...
- 作业六:分析Linux内核创建一个新进程的过程
分析Linux内核创建一个新进程的过程 进程描述符PCB----task_struct数据结构 操作系统:1.进程管理 2.内存管理 3 文件系统 一.新进程如何创建和修改task_struct数据结 ...
随机推荐
- nova Scheduling 配置
Nova中调度配置: scheduler_driver_task_period = scheduler_driver = nova.scheduler.filter_scheduler.FilterS ...
- 迭代式返回 IEnumerable<T>
private IEnumerable<PoliceForceViewModel> CreateResultList(IEnumerable<GPSData> gpsData) ...
- Spring_总结_03_装配Bean(四)_导入与混合配置
一.前言 本文承接上一节:Spring_总结_03_装配Bean(三)之XML配置 在典型的Spring应用中,我们可能会同时使用自动化和显示配置.同时,可能在某些场景下我们需要混合使用JavaCon ...
- 数论板子——来自Loi_black
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> usin ...
- POJ--1094--Sorting It All Out||NYOJ--349--Sorting It All Out(拓扑排序)
NYOJ的数据水一点,POJ过了是真的过了 /* 拓扑排序模板题: 每次输入都要判断有环与有序的情况,如果存在环路或者已经有序可以输出则跳过下面的输入 判断有序,通过是否在一个以上的入度为0的点,存在 ...
- Memorial for Nanjing victims today 南京大屠杀死难者公祭仪式今于南京举行 勿忘国耻,活捉小*日*本。
China will hold an annual memorial for the victims of the Nanjing Massacre today in the eastern city ...
- Shiro-从数据表中初始化资源和权限
我们在 applicationContext中配置受保护的资源和权限的关系 <property name="filterChainDefinitions"> <v ...
- hdu 1937 Finding Seats
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- LeetCode Minimum Index Sum of Two Lists
原题链接在这里:https://leetcode.com/problems/minimum-index-sum-of-two-lists/description/ 题目: Suppose Andy a ...
- h5废弃的标签和属性及新增的标签和属性
一.废弃的标签和属性 1.表现性元素 a) basefont b) big c) center d) font e) strike f) tt 2.框架类元素 a) frame b) frameset ...