zoukankan      html  css  js  c++  java
  • 编译内核及系统调用实验

     电脑出现各种问题,在装虚拟机时也出现了各种问题,给的实验指导书也有各种问题。周四折腾一下午+晚上、周五一天、周六一天,遇到的各种问题都搞定了,实验成功了,现在贴出我的操作步骤,感觉这将会是我的最干的博客之一。

    先贴出结果吧

    准备工作:

    我的电脑只有120G,之前一直做了个Ubuntu的启动盘用,这次没预料到实验对硬盘空间需求如此之大,只得重装虚拟机。在移动硬盘上开辟空间50G(建议不要装好系统后再扩展容量,时间耗费巨大而且ubuntu自带软件中没有硬盘分区软件,安装硬盘分区软件还需要很多依赖,烦不胜烦),在VMware Workstation上使用高级模式创建虚拟机,CPU和内存配置为2x2,4G。在创建完成ubuntu虚拟机后不要立即运行!!!因为VMtools在创建好了以后会自动加载到你刚指定的虚拟机文件夹中,在开启ubuntu虚拟机后它会和系统引导一起启动,导致系统卡死在“install vm-tools"这一行,解决的方法就是在虚拟机文件夹中找到autoinst.iso这个文件并删除(这会导致系统不能自动安装并且在装好系统后不能使用vmtools这个工具,如果想使用vmtools这个工具只能在系统安装完成后再安装,后面讲)。删除上述文件后可以启动系统安装了,,,,,,,,,,,,,安装完成后选择

    设置中选择VM Workstation安装文件夹,在其中选择”linux.iso"这个文件,设置完毕后别忘了执行连接。这时ubuntu桌面上会显示一个名为vmtools的镜像驱动方式,打开进入后拷贝其中的压缩包放置在桌面上,tar -xvf xxx解压后进入文件夹,开启终端,sudo su提权,键入 ./vmware-install.pl 命令,安装vmtools。等待安装结束后键入命令 reboot 重启虚拟机。在重启完毕后,进入系统设置,在显示一栏中可以调整屏幕显示大小和分辨率。至此vmtools安装结束。

    实验操作:

    step1.下载内核

      首先我再www.kernel.org下载内核包,版本是4.14.0,我本机使用的Ubuntu版本是4.13.xxx后面我忘了。终端执行sudo su提权,将压缩包复制到/usr/src/文件下,tar -xvf linux-4.14解压缩。

    step2.进入刚才解压好的文件夹中(下面讲述时默认的起始路径都是此文件夹),使用任意文本编辑器编辑kernel目录下的sys.c文件,在文件最后编写自己的函数:

    修改系统头文件路径为:/include/linux/syscalls.h,在文件最后的#endif之前添加函数声明

     

     修改系统调用号:此处实验参考有问题,路径错误,正确的路径是:

    进入后目录中有个syscall_32.tbl/syscall_64.tbl两个文件,如果是32位系统就修改前者,否则后者,我是64位系统,修改后者:

    修改格式为上个数字+1,64,zyq,sys_zyq,如下图所示

     step3.编译部分

      友情提示:在每执行一步最好都要做一个快照,以备后期出错恢复。

      准备工作,裸机ubuntu没有make、gcc等命令和包需要安装下。命令格式以make命令为例子:apt install make

            还需要的包    apt install libssl-dev  apt install build-essential

      终端键入命令 make mrproper  用以清除内核的目标文件、附属文件以及配置文件(一般第一次编译时候需要使用,主要防止下载的源码包有一些配置文件,影响结果)

      make clean 清除内核中的目标文件,并不会删除设置文件(在后续需要重新编译时候,只需要make clean就可以了)

      make bzImage (sudo make bzImage –j4代表用四线程去运行,速度相对较快吧)  编译内核:时间大概半个小时

      make modules (sudo make modules –j4) 编译模块,这个花费的时间是最长的约为2~4h

      make modules_install 安装刚编译好的模块

      make install –j4 安装内核

    step4.修改grub引导

     一般来说虚拟机中grub引导菜单会被隐藏,即使更新内核后你也无法选择进入哪个内核,此时可以修改grub参数。修改文件sudo gedit /etc/default/grub,我的做法是把GRUB_HIDDEN_TIMEOUT注释,直接显示菜单。

    影响grub关键三个因素:

    GRUB_HIDDEN_TIMEOUT:执行该行的意思为默认启动过程不显示grub,但会有空白界面的延迟,延迟时间就是它的值,空白界面相当于提示我们你可以手动选择进入grub菜单,按shift键强制进入grub菜单界面

    将GRUB_HIDDEN_TIMEOUT用#注释掉,它表示菜单直接显示。

    GRUB_HIDDEN_TIMEOUT_QUIET: true表示不显示空白界面延迟时间,false表示显示。

    GRUB_TIMEOUT:当GRUB_HIDDEN_TIMEOUT被注释后,表示如果grub界面后停滞的时间。

    修改完毕后终端键入命令 update-grub 更新下刚才修改的grub,完毕后重启虚拟机。

    step5.验证

      新建文件test.c键入代码:

    gcc编译后执行程序,并且使用 unmae -r命令查看内核版本

    说明修改成功

  • 相关阅读:
    Node.js 究竟是什么?
    天津自考学习之“六步看书法”
    C专家编程cdecl
    Linux系统启动流程及安装命令行版本
    Java学习路线
    GCC内置宏
    GMP
    二级存储构建倒排索引
    余弦距离与欧式距离
    af
  • 原文地址:https://www.cnblogs.com/ghost00011011/p/7897033.html
Copyright © 2011-2022 走看看