Linux/Ubuntu虚拟机添加系统调用保姆级教程(含泪整理

        大二鼠鼠,在做操作系统实验时,被互联网上繁杂的资料整到破防,刚刚把实验报告交了,想着写一篇简洁的添加系统调用教程,希望帮助初学者脱离苦海,阿弥陀佛,欢迎在评论区友好评论喔,问题可以大家一起解决!

        相信看到这篇文章的大家应该已经装好Ubuntu虚拟机了,话不多说,直接开始!

       一定要给虚拟机扩容啊,编译内核时消耗了36G的磁盘空间!!!

       (我扩容到了内存8G,磁盘60G,目前够用)

                                                       (新增系统调用  成品图如上)

第一步,在虚拟机上下载Linux内核源码。

        我的虚拟机内核版本为5.15.0-100.g,因此我选择下载的Linux内核版本号为5.15.0,对其解压,存放到指定目录下。(后面发现这个内核版本号与虚拟机的不同其实也可以)

        Linux内核源码下载:https://mirrors.edge.kernel.org/pub/linux/kernel/         

        当然,也可以利用我下面的Bash代码在终端输入,下载内核源码:

 wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.15.0.tar.gz

        对下载的内核源码 tar.gz 文件进行解压:

tar -xvf linux-5.15.0.tar.gz

第二步,在解压后的目录打开终端,对下列文件进行自定义函数的声明与函数体编写。

文件名  arch/x86/entry/syscalls/syscall_64.tbl     系统调用函数表中添加索引      

 文件  linux-5.15/kernel/sys.c   进行自定义系统调用的函数体编写(学号就别抄了

文件  arch/x86/include/asm/syscalls.h     新系统调用函数声明(1)

文件  include/linux/syscalls.h    新系统调用函数声明(2)

        

        

第三步,在解压目录下终端进入sudo模式,进行内核的安装。

1)安装编译时需要的应用及其插件包

sudo apt install bc binutils bison dwarves flex gcc git gnupg2 gzip libelf-dev libncurses5-dev libssl-dev make openssl perl-base rsync tar xz-utils 

2)编辑编译配置

make olddefconfig 

3)关闭内核模块证书——执行完这一步可以拍摄一张快照了

./scripts/config --file .config --set-str SYSTEM_TRUSTED_KEYS ''
./scripts/config --file .config --set-str SYSTEM_REVOCATION_KEYS ''

4)开始内核编译——在这一步你可能会遇到各种各样问题,只能靠自己了,鼠鼠我相信你!!!若编译顺利,可能需要一个小时左右

make -j$(nproc) 2>&1 | tee log

5)安装内核模块——若编译失败,这一步是执行不下去的。。。

sudo make modules_install -j$(nproc)

6)安装Linux内核——这一步问题也不少,我遇到过bzImage等问题

sudo make install

7)可选,遇到重启后没有切换内核的情况可以试一下

vim /etc/default/grub

        将其中的GRUB_TIMEOUT_STYLE参数修改为menuGRUB_TIMEOUT参数修改为-1(#TIMEOUT=0代表立即进系统,不会显示menu,这里设置成menu即可      #TIMEOUT=-1 代表一直显示menu,直到用户做出选择),此时重启虚拟机,即可选择本次登录的Linux内核。

8)重启虚拟机

reboot 

第四步,自定义系统调用函数的输出验证

1)编写一个 .c 文件,具体内容如下

2) 在存放上述 .c 文件的目录下打开终端,利用gcc编译器,对其进行编译,并利用dmesg命令查看内核活动日志

3)注意到在内核活动中,学号姓名被正确输出,实验成功!

参考博客(鼠鼠受益匪浅): 

技术|Linux 内核动手编译实用指南

linux内核添加系统调用(详细)_采用编译内核法,在linux中增加一个系统调用。 要求: (1)系统调用实现的功能:计算-CSDN博客

【已解决】Could not get lock /var/lib/dpkg/lock-frontend_root@laptop-7k42b2pf:~# sudo rm /var/lib/dpkg/lock-CSDN博客

安装了内核重启后内核版本没有更新 调处grub引导界面 (已解决)_grub_timeout_style=menu-CSDN博客

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值