admin管理员组

文章数量:1665607

@Linux增加系统调用

Linux增加系统调用

一、题目要求

实现一个linux的系统调用

二、实现思路

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

三、操作步骤

第一步:装载Linux

具体方法可见下方链接,不再赘述。
https://blog.csdn/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/)


(由于我做的时候忘记拍照,这是后来补拍的,所以都已经更新完成了)

第三步:获取内核

1、下载内核

https://www.kernel/
https://www.kernel/
在此网址中,可以下载最新的内核,可以先保存在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


成功啦!

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

本文标签: 操作系统系统Linux