向Linux增加一个系统调用或内核模块

配置环境

获取root权限

sudo su

更新系统

sudo apt-get update

安装相关编译程序包

sudo apt-get install libncurses5-dev libssl-dev

sudo apt-get install libelf-dev

sudo apt-get install build-essential openssl

sudo apt-get install zlibc minizip

sudo apt-get install libidn11-dev libidn11

sudo apt-get install flex bison

sudo apt-get install zstd

部署内核

从 The Linux Kernel Archives 下载 linux 内核,这里选择的版本是 linux-5.16.11

下载后移动至虚拟机文件夹/usr/src

进入对应目录,进行解压

sudo tar -xvf linux-5.16.11.tar.xz

添加系统调用

kernel/sys.c中加入函数

asmlinkage long __x64__sys_helloworld(void){printk( "helloworld!");return 1;}

kernel/sys.c中加入头文件

#include <linux/linkage.h>

arch/x86/include/asm/syscalls.h中添加声明

asmlinkage long __x64__sys_helloworld(void);

arch/x86/entry/syscalls/syscall_64.tbl中添加调用号(这里使用的是335)

335  64  helloworld           _sys_helloworld

编译前的相关配置

删除无关文件

sudo make mrproper

sudo make clean

配置

sudo make menuconfig

编译

sudo make -j8

安装内核

sudo makemodules_install

sudomake install

重启

reboot

测试是否成功

uname -r

返回当前内核版本号为 5.16.11,即证明成功

错误信息及解决方法

1. 没有规则可制作目标 “debian/canonical-certs.pem”

make[1]: *** 没有规则可制作目标“debian/canonical-certs.pem”,由“certs/x509_certificate_list” 需求。 停止。
make: *** [Makefile:1046:certs] 错误 2
make: *** 正在等待未完成的任务....

解决方法:进入/.config,删除CONFIG_SYSTEM_TRUSTED_KEYSCONFIG_MODULE_SIG_KEYCONFIG_SYSTEM_REVOCATION_KEYS中的内容

CONFIG_DEBUG_INFO_BTF=n# CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
CONFIG_MODULE_SIG_KEY_TYPE_RSA=yCONFIG_MODULE_SIG_KEY_TYPE_ECDSA is not setCONFIG_SYSTEM_TRUSTED_KEYRING=y
CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_EXTRA_CERTIFICATE=y
CONFIG_SYSTEM_EXTRA_CERTIFICATE_SIZE=4096
CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SYSTEM_BLACKLIST_KEYRING=y
CONFIG_SYSTEM_BLACKLIST_HASH_LIST=""
CONFIG_SYSTEM_REVOCATION_LIST=y
CONFIG_SYSTEM_REVOCATION_KEYS=""end of Certificates for signature checking

2. 重启后发现内核没有改变

查看当前内核版本

cat /boot/grub/grub.cfg |grep menuentry

    menuentry 'Ubuntu,Linux 5.13.0-30-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.13.0-30-generic-advanced-39009b2e-96b3-496b-b71b-8b811c018e59' {menuentry 'Ubuntu,Linux 5.8.0-43-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.8.0-43-generic-advanced-39009b2e-96b3-496b-b71b-8b811c018e59' {menuentry 'Ubuntu,linux-5.16.11-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.14-advanced-39009b2e-96b3-496b-b71b-8b811c018e59' {

修改默认内核启动顺序

修改/etc/default/grub中的GRUB_DEFAULT

GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with linux-5.16.11"

更新修改后的grub

update-grub

向Linux增加一个系统调用或内核模块相关推荐

  1. linux内核打开prntk,操作系统实验一向Linux内核增加一个系统调用.docx

    操作系统实验一: 向Linux内核增加一个系统调用 xx 711103xx 2012年3月18日 一.实验目的 通过实验,熟悉Linux操作系统的使用,掌握构建与启动Linux内核的方法:掌握用 户程 ...

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

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

  3. Ubuntu增加一个系统调用(20.04)西电软工OS实验专题二

    title: 西电软工OS实验专题二–增加系统调用 date: 2022-05-14 07:48:48 tags: OS 写在前面: 如果这个过程中你某个地方没有把握,切记使用vm的快照功能,血的教训 ...

  4. 操作系统作业:给linux系统增加一个系统调用

    前不久开了一门<操作系统>,老师上课留下了一个作业--给Linux系统添加一个系统调用.刚开始只能用一脸懵逼来形容,只能硬着头皮做下去.由于刚的新电脑,所以就没敢装双系统.所以我选择了虚拟 ...

  5. xv6操作系统中增加一个系统调用

    简要介绍一下xv6中增加系统调用的方法和步骤. 本文情景:xv6系统中,不自带Linux下的ps命令,不能直观查看各个进程的状态.为此,需要新增一个系统调用sys_cps(),通过它查看进程,将进程名 ...

  6. 给linux系统增加一个系统调用并测试,超详细含错误锦集

    操作系统:给linux系统内核增加系统调用并测试 实验内容 实验环境 实验过程 1.安装环境 2.给内核增加系统调用 3.编译内核 4.安装内核 5.编辑测试文件 实验内容 1.给linux系统内核增 ...

  7. 第四十二期-ARM Linux内核的系统调用(2)

    作者:罗宇哲,中国科学院软件研究所智能软件研究中心 上一期中我们介绍了ARM Linux内核中的系统调用和定义系统调用的流程,这一期我们将介绍系统调用的执行过程. 一.ARM Linux内核中系统调用 ...

  8. Kali Linux又增加一个顶级域名kali.download

    Kali Linux又增加一个顶级域名kali.download 现阶段,kali.download只提供软件包和镜像下载.大家可以把该域名作为备选软件源来使用.形式如下: deb  http://k ...

  9. 在i386平台Linux 2.6 上实现一个系统调用

         1. 引言 本文档解释了怎样在Linux2.6中实现一个新的系统调用.一个系统调用被应用程序用来向操作系统请求服务. 2.   系统调用 一个系统调用被应用程序用来向操作系统请求服务.下面的 ...

最新文章

  1. Python再夺冠,上古语言COBOL大流行,IEEE Spectrum 2020年度编程语言排行榜出炉!...
  2. Laravel: 基础篇
  3. 别再乱用 Prometheus 联邦了,分享一个 Prometheus 高可用新方案
  4. Nodejs中的模块系统
  5. android 打开免打扰模式_三星S10+免root也能完美使用Xp框架?这款神器你必须要知道...
  6. Session的实现与存储
  7. 前端学习(2625):vs安装
  8. saltstack php,Saltstack快速入门简单汇总
  9. 特斯拉工程师当UP主评测自动驾驶,结果被公司开除
  10. bootstrap-自定义导航栏隐藏参数@screen-sm
  11. PLSQL下载、安装、配置、连接详细教程
  12. Coreldraw x6离线激活注册机免费下载安装教程
  13. clojure语言_Clojure编程语言
  14. 【解决】计算机用户名是中文名导致软件安装失败!
  15. python pip install pil_python安装PIL库
  16. Oracle 应用篇+Oracle Siebel CRM
  17. win7下搭建外网svn服务器
  18. 用java代码输出乘法口诀表
  19. 对Halting Problem的漂亮解释
  20. 壁纸 | 隐藏iPhone Dock栏

热门文章

  1. JavaEE之--登录页面(用户名、密码、验证码)
  2. 神经网络和算法的关系,神经网络的算法有哪些
  3. PAAS容器安全防护
  4. v7000更换电池步骤_[原创]IBM V7000 SVC更换已经告警的UPS电池详细步骤
  5. codeforces 1665A (GCD vs LCM)思维
  6. SpringBoot/Spring Cloud/Docker
  7. python turtle画动物_用python画简单的动物
  8. Android 实现涂鸦笔效果
  9. ECharts - 15.旭日图
  10. c语言stl用法,C STL快速入门!学习使我快乐