Linux教程

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

本文主要是介绍虚拟机Ubuntu20.04,在linux-5.4.1内核下添加一个简单的系统调用并编译该内核,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

[环境信息]

  • VMware15
  • Ubuntu20.04 64位虚拟机(uname -a查看系统信息)
  • Windows10 64位主机
  • 虚拟机的网络配置是桥接模式

    添加系统调用-内核编译法

    • 一、查看适合自己Ubuntu版本的linux内核版本。
    • 二、官网下载linux-5.4.1内核源码
    • 三、Ubuntu上修改内核源码添加系统调用
    • 四、编译内核
    • 参考博客

一、查看适合自己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目录下。
  • 可以直接在虚拟机里下载
  • 在windows上下载好,复制到虚拟机里。需要安装vmtools(https://blog.csdn.net/weixin_43434136/article/details/112593575#2VM_Tools_77)
  • 用winscp(ssh)连接虚拟机,传输文件。这个可以自行百度。
  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,编译时间有点长,吃饭去了

参考博客

  • https://blog.csdn.net/qq_41175905/article/details/80529245
  • https://blog.csdn.net/qq_43385074/article/details/106602770
这篇关于虚拟机Ubuntu20.04,在linux-5.4.1内核下添加一个简单的系统调用并编译该内核的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!