操作系统:Linux增加系统调用

@Linux增加系统调用

Linux增加系统调用

一、题目要求

实现一个linux的系统调用

二、实现思路

首先,需要准备相应的环境和内核,通过官网下载,然后将内核在虚拟机中解压,在新的内核下添加相应的系统调用函数、声明、id,之后配置内核,重启并测试是否成功。

三、操作步骤

第一步:装载Linux

具体方法可见下方链接,不再赘述。
https://blog.csdn.net/colin_lisicong/article/details/70193539
需要注意的是,硬盘内存务必多分配些,否则在内核编译时会失败。

第二步:更新软件源代码和软件依赖包

1、打开终端
打开终端,在Ubuntu中可用快捷键Ctrl+Alt+t打开,也可以在桌面右键出现的下拉菜单中选择
在这里插入图片描述
2、获取管理员权限

在终端输入指令:sudo su
随即会显示要求你输入密码,即登录密码,这时将密码输入后直接回车即可。(注:密码不会显示在终端屏幕上)

在这里插入图片描述
3、安装相关编译程序

sudo apt-get update

在这里插入图片描述

sudo apt-get install libncurses5-dev libssl-dev

在这里插入图片描述

sudo apt-get install build-essential openssl

在这里插入图片描述

sudo apt-get install zlibc minizip

在这里插入图片描述

sudo apt-get install bison[添加链接描述](https://www.kernel.org/)

在这里插入图片描述
(由于我做的时候忘记拍照,这是后来补拍的,所以都已经更新完成了)

第三步:获取内核

1、下载内核

https://www.kernel.org/
https://www.kernel.org/
在此网址中,可以下载最新的内核,可以先保存在Windows桌面上,然后将下载好的内核压缩包直接拖入虚拟机桌面上(我用的内核是linux-5.6)
在这里插入图片描述
2、将压缩文件移入/usr/src/文件夹中

在终端接着输入以下代码即可

sudo mv /home/dwj/桌面/linux-5.6.tar /usr/src/

在这里插入图片描述
(这里mv后面的是你内核的所在位置)

3、进入/usr/src解压此压缩文件

接着输入:

`cd /usr/src`
sudo tar -xvf /usr/src/linux-5.6.tar.xz

在这里插入图片描述
第四步:安装vim编辑器
1、进入解压出的文件目录

cd /usr/src/linux-5.6/kernel

2、安装vim

sudo apt-get install vim

在这里插入图片描述
第五步:加入所要的系统调用函数

1、打开sys.c

sudo vim sys.c

注意:在vim中, i进入编辑, esc退出编辑状态. G跳到末尾, gg进入开头。 :wq保存退出, :q不保存退出)

2、在文件末尾添加函数

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

在这里插入图片描述
第六步:添加声明

1、用vim打开linux-4.16.10/arch/x86/include/asm/syscalls.h,

cd /usr/src/linux-5.6/arch/x86/include/asm/
 

在这里插入图片描述

sudo vim syscalls.h

2、加入系统调用函数声明
插入asmlinkage long sys_helloworld(void);
在这里插入图片描述
第七步:加入系统调用号

1、进入/usr/src/linux-5.6/arch/x86/syscalls目录

cd /usr/src/linux-5.6/arch/x86/entry/syscalls

在这里插入图片描述
2、打开文件syscall_64.tbl(该文件有一个系统调用列表,最前面的属性是id)

sudo vim syscall_64.tbl

3、添加自己的系统调用号

  439   64   helloworld           sys_helloworld

在这里插入图片描述
4、使用esc +:wq命令保存退出

cd  /usr/src/linux-5.6

在这里插入图片描述
之后依次输入:

sudo make mrproper

在这里插入图片描述

sudo make clean

在这里插入图片描述

 sudo apt-get install bison
          `sudo apt-get install flex`(安装这两个包防止在下面一步出现错误信息)`
sudo make menuconfig

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
出现窗口后用键盘左右键控制直接save->ok->exit->exit
接着输入:

sudo apt-get install libssl-dev
          `sudo make -j4`(根据自己处理器的最大线程数目编译)

此后,开始漫长的编译过程
在这里插入图片描述
在这里插入图片描述
(在执行这本大块的步骤时,终端窗口最大化,否则有可能会报错)

第九步:安装内核

编译后安装内核到系统中.

sudo make modules_install  

在这里插入图片描述

sudo make install 

在这里插入图片描述
第十步:重启虚拟机

sudo reboot

将之前的工作保存后直接重启,重启后点击鼠标进入ubuntu并且迅速按住shift,长按。
有选择内核的过程时(我的电脑没有选择,可以直接登录)
选第一个进去,继续第一个进去,基本完成。

第十一步:测试

1、登录

2、打开终端

3、输入以下指令

(1) uname -r
可以看到版本号已经变化
在这里插入图片描述
(2)sudo vim test.c
然后在打开的c文件中输入以下代码
在这里插入图片描述
esc+:wq保存退出
(3)输入

gcc -o test test.c
./test

在这里插入图片描述
成功啦!

耐心最重要啦,做这个作业的时候我重装了无数遍虚拟机等了无数个漫长的两三小时,有些问题也不知道为什么突然就好了,不过做完还是很有成就感的。

  • 19
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值