• 虚拟机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就可看到结果。

      

       

  • 相关阅读:
    zend studio中安装Emmet插件后迅速编写html的方法
    ZendStudio 代码调试
    PHP中循环结构之foreach循环语句
    【题解】物流运输 [ZJ2006] [P1772] [BZOJ1003]
    【题解】最大 M 子段和 Max Sum Plus Plus [Hdu1024] [51nod1052]
    【题解】最长递增路径 [51nod1274]
    【题解】与查询 [51nod1406]
    【题解】选数字 [51nod1354]
    【题解】逆序排列 [51nod1020]
    【题解】整数划分 [51nod1201] 整数划分 V2 [51nod1259]
  • 原文地址:https://www.cnblogs.com/cs-weilai/p/13037117.html
Copyright © 2020-2023  润新知