验证编辑编译内核的流程,并增加新的系统调用


注意:需要/目录至少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的更多相关文章

  1. 给Linux内核增加一个系统调用的方法(转)

    作者:chenjieb520 给Linux内核增加一个系统调用的方法    为了更加好地调试linux内核,笔者的实验均在mini6410的arm板上运行的.这样做的原因,第一是因为本人是学嵌入式的, ...

  2. 向linux内核增加一个系统调用-2(利用proc打印信息)

    添加系统调用,打印/proc中的系统信息 前面关于proc和内核态函数的东西可以对比代码来看. 参考 http://blog.csdn.net/kylin_fire_zeng/article/deta ...

  3. 操作系统项目:向Linux内核添加一个系统调用

    内容: 向Linux增加一个系统调用 撰写一个应用测试程序调用该系统调用 使用ptrace或类似的工具对该测试程序进行跟踪调 环境: 1.vmware workstation 15.0.0 2.ubu ...

  4. linux内核分析作业6:分析Linux内核创建一个新进程的过程

    task_struct结构: struct task_struct {   volatile long state;进程状态  void *stack; 堆栈  pid_t pid; 进程标识符  u ...

  5. 第六周分析Linux内核创建一个新进程的过程

    潘恒 原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 task_struct结构: ...

  6. 实验 六:分析linux内核创建一个新进程的过程

    实验六:分析Linux内核创建一个新进程的过程 作者:王朝宪  <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029 ...

  7. 20135202闫佳歆--week6 分析Linux内核创建一个新进程的过程——实验及总结

    week 6 实验:分析Linux内核创建一个新进程的过程 1.使用gdb跟踪创建新进程的过程 准备工作: rm menu -rf git clone https://github.com/mengn ...

  8. 《Linux内核--分析Linux内核创建一个新进程的过程 》 20135311傅冬菁

    20135311傅冬菁 分析Linux内核创建一个新进程的过程 一.学习内容 进程控制块——PCB  task_struct数据结构 PCB task_struct中包含: 进程状态.进程打开的文件. ...

  9. 作业六:分析Linux内核创建一个新进程的过程

    分析Linux内核创建一个新进程的过程 进程描述符PCB----task_struct数据结构 操作系统:1.进程管理 2.内存管理 3 文件系统 一.新进程如何创建和修改task_struct数据结 ...

随机推荐

  1. let和const命令新总结

    let声明变量 新特性 声明的变量仅仅在块级作用域有效 块级作用域:外层作用于无法读取内层作用于周中的变量,内层作用域可以定义外层作用于中的同名变量 不存在变量提升 暂时性死区 只要在块级作用域内存在 ...

  2. linux服务器应用NTP配置时间同步

    linux服务器应用NTP配置时间同步 • 为什么建议使用ntpd而不是ntpdate? #####原因很简单,ntpd是步进式的逐渐调整时间,而ntpdate是断点更新,比如现在服务器时间是9.18 ...

  3. java多线程学习一

    声明:本篇博客是本人为了自己学习保存的心得,其内容主要是从大神——五月的仓颉的博客中学习而来,在此多谢大神五月的仓颉的分享,敬礼! 第一章:进程和线程的概念 进程:进程是操作系统中作为分配资源的基本单 ...

  4. hihocoder#1148 : 2月29日 计算闰年的个数

    计算到某年为止的闰年数,其实很简单.设要计算的年为A,则到A年为止(含A年)的闰年数为: 闰年数=INT(A/)-INT(A/)+INT(A/) 这里:INT为取整数函数 #include <c ...

  5. php-fpm 和 mysql 之间的关系

    我们都知道,php是不能直接操作 mysql的,他需要通过扩展提供接口调用,php的mysql扩展也好几个,只支持面向过程的mysql,既支持面向过程也支持面向对象的mysqli,只支持面向对象的PD ...

  6. MySql数据库中存放用户密码需要注意什么?

    前几天被电话面试了,问了一些比较实际的问题,其中一个问题关于PHP开发中MySql里存放用户密码需要注意什么,由于没有过大项目经验,一时语塞,回来网上找了找记下来,希望能对其他人有帮助,我也继续学习. ...

  7. 部署你的分布式调用链跟踪框架skywalking

    使用docker-compose 一键部署你的分布式调用链跟踪框架skywalking https://www.cnblogs.com/huangxincheng/p/9666930.html 一旦你 ...

  8. BZOJ5319: [Jsoi2018]军训列队

    BZOJ5319: [Jsoi2018]军训列队 https://lydsy.com/JudgeOnline/problem.php?id=5319 分析: 易知把所有人按原本的顺序放到\([K,K+ ...

  9. element table固定表头,表的高度自适应解决方法

    主要是通过在mounted生命周期中,改变tableHeight的值,来让表格的高度自适应. 标签: <el-table ref="table" :data="ta ...

  10. [转]实现微信浏览器内打开App Store链接

    微信浏览器是不支持打开App Store 页面的,不知道微信为什么这么做.比如你页面写 <a href=”http://itunes.apple.com/us/app/id399608199″& ...