0%

添加系统调用

操作系统课设

1.下载一个内核

将内核文件下载到/usr/src路径下

官方下载地址:https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/

为了能够下载快一点,这里我选择的是在上海交大的开源网站

下载命令:

1
wget http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/v4.x/linux-4.18.16.tar.xz

注:如果没有wget,请用这个命令下载:yum -y install wget

2.解压内核源码

tar -xvf linux-4.18.16.tar.xz

注:不要在windows上解压上传到centos中,因为windows对文件名大小写不敏感,文件会相互覆盖。而Linux则不会。

3.安装依赖软件包

安装CentOS7的依赖软件包

1
yum -y install gcc ncurses-devel bison flex bc elfutils-libelf-devel openssl-devel

4.添加系统调用号

vim linux-4.18.16/arch/x86/entry/syscalls/syscall_64.tbl

增加此行:

335 common mycall __x64_sys_mycall

img

5.添加系统调用程序的声明

vim linux-4.18.16/include/linux/syscalls.h

增加此行:

asmlinkage long sys_mycall(int number);

img

6.编写系统调用函数

vim linux-4.18.16/kernel/sys.c

增加以下函数:

1
2
3
4
5
SYSCALL_DEFINE1(mycall,int,number){
int result=number*number*number;
printk("The result is %d\n",result);
return 0;
}

img

7.开始编译内核

编译内核分为以下几个步骤:

1) 进入内核文件夹

cd linux-4.18.16/

2) 修改文件可执行权限

chmod +x ./scripts/gcc-version.sh

3) 删除以前编译产生的垃圾文件

make mrproper

make clean

注:可能有些同学会遇到如下问题:

img解决方法:

安装:

yum -y install gcc automake autoconf libtool make

安装g++:

yum install gcc gcc-c++

4) 拷贝文件(.config)

cp /boot/config-* .config

5) 选择Load和Save保存再Exit退出。

make menuconfig

6) 开始编译内核(4个线程跑会快一些):

make -j 4

这里大概需要一个小时

7) 安装模块

make modules_install

8) 安装内核

make install

8.重启选择相应的系统

img

9. 测试:

dmesg用来显示内核环缓冲区(kernel-ring buffer)内容,内核将各种消息存放在这里。在系统引导时,内核将与硬件和模块初始化相关的信息填到这个缓冲区中。内核环缓冲区中的消息对于诊断系统问题 通常非常有用。在运行dmesg时,它显示大量信息。通常通过less或grep使用管道查看dmesg的输出,这样可以更容易找到待查信息。例如,如果发现硬盘性能低下,可以使用dmesg来检查它们是否运行在DMA模式:

首先创建test文件:

touch test.c

代码:

1
2
3
4
5
6
7
#include<stdio.h>
int main()
{
syscall(335,4);
printf("hello");
return 0;
}

然后编译源文件:

1
2
3
gcc test.c -o test
./test
最后再输入dmesg

dmesg相关指令:

imgdmesg相关指令: