虚拟机ubuntu-自行实现系统调用

一、前言

  第二次实验是实现与学号有关系统调用,在第一次实验基础上进行。

  第一次实验是编译自己的linux内核https://www.cnblogs.com/cs-weilai/p/13036884.html

  环境还是ubuntu18.04 + linux5.6.14内核 + vmware

二、实验过程记录

  1. 输入命令 cd /usr/src/linux-5.6.14/ 进入内核目录。

   输入 sudo vim arch/x86/entry/syscalls/syscall_64.tbl , 在此文件中添加自己的系统调用编号

   编号依次增加,注意 name 与 entry point名称啊!

   修改完成保存!!!

       

  2. 系统调用号已经添加了,内核就知道有这么个东西。接下来我们需要实现系统调用。

   以函数的形式,进行函数声明和函数定义。现在先来声明函数吧。

   执行命令 sudo vim include/linux/syscalls.h

   在文件最后添加函数声明(vim下,shift+G迅速到达),完成后保存!

      

   3. 声明添加了,接下来就是函数定义了。输入命令 sudo vim kernel/sys.c

   同样在文件最后进行函数定义。

   注意内核打印函数是 printk();

   我这里第一个函数是文本测试,第二个是实验要求:

   奇数学号输出后五位,偶数学号输出后六位。完成后保存!

      

      

  4. 好了,现在系统调用做完了。重新编译内核吧~

   依次执行以下命令,这些命令都很熟悉了,不再做解释。

    1. sudo make mrproper

    2. sudo make clean

    3. sudo make nconfig (进入界面后保存退出,可参考上一篇博客!)

    4. sudo make -j4 (仍旧是四个线程跑,会快很多!)

    5. sudo make modules_install (make完成后执行)

    6. sudo make install

  5. 上述步骤完成后重启!

三、测试

  好了,现在系统调用模块完成了,我们做一些测试。

  终端输入 sudo touch test.c 

  使用vim编写  sudo vim test.c  

  (syscall第一个参数是系统调用编号,就是第一步你设置过的。后面的就是参数,这点和函数类似)

  

  终端编译 sudo gcc -o test test.c

  运行 sudo ./test

  因为内核打印不一定会显示,但会保存在内核缓冲区。

  我们执行命令 sudo dmesg就可看到结果。

  

   

原文地址:https://www.cnblogs.com/cs-weilai/p/13037117.html