ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

虚拟机Ubuntu20.04,在linux-5.4.1内核下添加一个简单的系统调用并编译该内核

2021-05-30 13:33:32  阅读:354  来源: 互联网

标签:Ubuntu20.04 调用 5.4 虚拟机 编译 内核 linux


[环境信息]

一、查看适合自己Ubuntu版本的linux内核版本。

  1. 去维基上看Ubuntu20.04的更新日志。https://wiki.ubuntu.com/FocalFossa/ReleaseNotes
    Ubuntu20.04支持5.4系列的内核。后面的HWE是硬件支持版本,具体意思可以自行百度。这里我使用的5.4系列内核。
    在这里插入图片描述

二、官网下载linux-5.4.1内核源码

  1. 官网的网址https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/
    在这里插入图片描述

三、Ubuntu上修改内核源码添加系统调用

由于这是第一次内核编译,所以不是很清楚一些细节。比如说(下面的内容),在64位的系统上修改unistd_32.h或者syscall_32.tbl的话,那么在内核编译过后是否可以成功调用自己编写的mysyscall()呢?为了不第二次编译内核,所以写了mysyscall32()和mysyscall64()里面的内容一样,头文件和系统调用表的修改分别对应32和64的文件。下面只给出mysyscall64()的配置过程,mysyscall32()过程一样。

  1. 把刚才下载的内核压缩包复制到/usr/src目录下。
  1. 解压文件tar -zxvf linux-5.4.1.tar.gz
    在这里插入图片描述

  2. 修改内核源代码添加一个简单的系统调用到内核。

  • linux-5.4的内核修改了系统调用的声明方式(可能)。(这是我到后面的步骤的时候看到的,现在反过来修改)
    在这里插入图片描述

  • 打开/usr/src/linux-5.4.1/kernel/sys.c,在宏定义之后添加一个自己的系统调用sys_mysysycall64()

  • asmlink说明参数传递不是靠寄存器,而是靠栈来传递。
    在这里插入图片描述

  1. 添加系统调用函数声明。
  • 修改/usr/src/linux-5.4.1/arch/x86/include/asm/syscalls.h
    在这里插入图片描述
  1. 更新系统调用表,添加系统调用id。
  • 修改/usr/src/linux-5.4.1/arch/x86/entry/syscalls/syscall_64.tbl
    在这里插入图片描述

四、编译内核

  1. 很多博客都说内核编译需要占很大的存储空间,我的虚拟机只有20G,怕可能不够用,所以又添加了30个G。(如何添加可自行百度)
  2. cd /usr/src/linux-5.4.1
  3. make mrproper
  4. make clean
  5. 安装编译时需要的资源。
sudo apt-get install gcc make libncurses5-dev openssl libssl-dev 
sudo apt-get install build-essential 
sudo apt-get install pkg-config
sudo apt-get install libc6-dev
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install libelf-dev
  1. uname -r
    在这里插入图片描述
  2. cp /boot/config-5.8.0-53-generic ./.config
  3. make menuconfig,这里会弹出一个蓝色的界面,可以直接退出。
    在这里插入图片描述
  4. make -j4,编译时间有点长,吃饭去了

参考博客

标签:Ubuntu20.04,调用,5.4,虚拟机,编译,内核,linux
来源: https://blog.csdn.net/weixin_43434136/article/details/117394874

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有