本文主要突出操作中遇到的问题及解决方案,关于详细过程不做过多展示,大家可以参考
https://blog.csdn.net/qq_41175905/article/details/80529245
https://blog.csdn.net/SweeNeil/article/details/83684565

一、什么是系统调用

系统调用:

用户在编程时可以调用的操作系统功能,操作系统提供给编程人员的唯一接口, 使CPU状态从 用户态陷入内核态。
系统调用机制的设计:
本质:中断的一种

二、系统调用的准备

1.获取root权限(即管理员权限)

2.安装相应的程序
安装方式sudo apt-get install ××

主要程序有
build-essential
kernel-package
libncurses5-dev
libssl-dev

3.下载内核
网站https://www.kernel.org/
然后这边要注意的是,要保证下4开头的版本,我下的第一个是 5.0.14的,在内核编译那make 出现报错,找不到原因
我的版本是linux-4.9.173,大家可以参考下。

4.解压到 usr/src
sudo mv /home/dengyang/下载/linux-4.9.173.tar.xz /usr/src/
注意/usr/src/前面有空格,文件名更改成自己的

三、系统调用的实现

1.安装vim。vim可以对.c文件操作

2.打开sys.c加入函数
asmlinkage long sys_helloworld(void){
printk( “helloworld!”);
return 1;
}
这边要注意的是,按"G"是跳到末尾,按"i"是进入编辑模式,在编辑完你的内容后,按"ESC"退出编辑模式,然后按“:wq”保存退出,你也可以按“:q”不保存退出

3.添加声明

4.加一个系统调用的id
建议与博客中设置相同,后期好记

四、编译内核

进入cd /usr/src/linux-4.16.10
1.设置编译
依次输入这四条语句
sudo make mrproper
sudo make clean
sudo make menuconfig
这边肯定会报错!
加入
sudo apt-get install bison
sudo apt-get install flex
如果有显示缺东西,把上文的三篇博客所涉及到的程序都安一遍

在mecuconfig直接sava->ok->exit->exit

2.编译
sudo make

3.安装
sudo make modules_install //安装内核模块
sudo make install //安装内核
这边需要注意一些系统的提示,缺少什么程序,安了后再运行

五、启动内核

注意:重启后进入第二个选项


选择你的内核,注意不要加后缀

可能报错

用该方法解决

六、编写程序并调用

注意最后可能不会显示helloworld,我们要给dmesy权限以便查看

最后再运行一次

大工告成!

七、后

操作系统作业:向内核中添加一个系统调用相关推荐

  1. Linux实验 | Ubuntu20.04编译内核并添加一个系统调用

    实验环境 Ubuntu 20.04 LTS VMware Workstation Pro 16 Linux Kernel 5.10.2 存储空间至少留55GB,我第一次做就因为空间不够编译失败,最后编 ...

  2. 在内核中添加系统调用

    前面我们学习了在内核中添加自己的代码,这次我们在内核中添加一个自己的系统调用,就像open/close一样的函数! 当我们应用程序调用open close函数时: open close函数是经过lib ...

  3. Linux 编译内核且增加一个系统调用

    Linux 编译内核且增加一个系统调用 文章目录 Linux 编译内核且增加一个系统调用 一.在添加系统调用之前需要先编译一个Linux的内核. 解压 安装依赖 编译 安装内核 二.系统调用 声名和定 ...

  4. i.MX 6ULL 驱动开发 二十九:向 Linux 内核中添加自己编写驱动

    一.概述 Linux 内核编译流程如下: 1.配置 Linux 内核. 2.编译 Linux 内核. 说明:进入 Linux 内核源码,使用 make help 参看相关配置. 二.make menu ...

  5. R语言编写自定义函数、评估回归模型预测变量的相对重要性(Relative importance)、通过在所有可能的子模型中添加一个预测变量而获得的R方的平均增加、评估预测变量的重要度、并通过点图可视化

    R语言编写自定义函数.评估回归模型预测变量的相对重要性(Relative importance).通过在所有可能的子模型中添加一个预测变量而获得的R方的平均增加.来评估预测变量的重要程度.并通过点图可 ...

  6. Visual Stdio 无法直接启动带有“类库输出类型”的项目若要调试此项目,请在此解决方案中添加一个引用库项目的可执行项目。将这个可执行项目设置为启动项目!

    Visual Stdio 无法直接启动带有"类库输出类型"的项目若要调试此项目,请在此解决方案中添加一个引用库项目的可执行项目.将这个可执行项目设置为启动项目! 参考文章: (1) ...

  7. python在子类中添加新的属性_pycharm实现在子类中添加一个父类没有的属性

    我就废话不多说了,还是直接看代码吧! class Car(): """一次模拟汽车的简单尝试""" def __init__(self, m ...

  8. php怎么添加会员卡,怎么在微信公众号中添加一个会员卡领取功能

    怎么在微信公众号中添加一个会员卡领取功能 发布时间:2020-12-09 16:06:27 来源:亿速云 阅读:129 作者:Leah 这篇文章将为大家详细讲解有关怎么在微信公众号中添加一个会员卡领取 ...

  9. 如何在RCP程序中添加一个banner栏

    前言:这段时间还算比较空闲,我准备把过去做过的有些形形色色,甚至有些奇怪的研究总结一下,也许刚好有人用的着也不一定,不枉为之抓耳挠腮的时光和浪费的电力.以前有个客户提出要在RCP程序中添加一个bann ...

最新文章

  1. snmp在企业网中的应用
  2. SiteView NNM安装
  3. 《Beginning Linux Programming》读书笔记(二)
  4. 我的csdnmark
  5. C++中的const成员函数
  6. Mysql索引,用户及授权(root密码恢复)
  7. 软件管理定律系列之布鲁克斯定律
  8. C++学习之路 | PTA乙级—— 1055 集体照 (25 分)(精简)
  9. android打开4g开关,【VoLTE】如何让手机的增强型4GLTE开关默认处于关闭状态?
  10. 嵌入式wifi 芯片 推荐_人工智能对汽车芯片设计的影响
  11. DNS 服务器 4013警告信息的解决
  12. 基于Android的数据采集系统,一种基于Android的新型用户数据采集发送系统
  13. python xlwt写excel_Python使用xlwt写excel并设置写入格式
  14. 女生干前端开发个人思考
  15. html怎么把盒子做成超链接,把整个DIV变成超链接
  16. 2022年山东省安全员C证考试资料及山东省安全员C证考试试题
  17. 怎样在PLSQL Developer14(64bit)当中找到汉化版本?
  18. Android:从assets资源目录下安装apk
  19. ImageMagick将多张图片拼接成一张图片_word转存技巧:如何将每页文档转换为图片保存?...
  20. docker以及docker-compose 使用加速器部署

热门文章

  1. C语言教程:十进制转换任意进制
  2. Python 与神奇的数学之汉诺塔
  3. 【Java核心技术卷一】对象与类:使用预定义类与用户自定义类
  4. Linpack测试简介
  5. Android 增量更新完全解析 是增量不是热修复
  6. Codeforces-1008A - Romaji - 水题
  7. <table>表格标签属性
  8. 7-86 小明的晚饭 (50分)
  9. 字符串转换成JSON
  10. IDEA安装 激活 基本使用