1. 重新编译Linux内核
  2. 增加一个Linux的系统调用。
  3. 写一个程序进行调用。

一、实验目的

  1. 重新编译Linux内核。
  2. 增加一个Linux的系统调用。
  3. 写一个程序进行调用。

二、实验环境

  • 电脑型号 华硕 X542UQR
  • 操作系统 Microsoft Windows 10 专业版 (64位)
  • CPU (英特尔)Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz(1992 MHz)
  • 主板 华硕 X542UQR
  • 内存 8.00 GB ( 2400 MHz)
  • 主硬盘 1000 GB (东芝 67TAW48 已使用时间: 1875小时)
  • 实验软件 VMware® Workstation 14 Pro
  • 实验系统 Centos 7
  • 实验内核版本 Linux 4.20.1

三、实验内容与步骤

3.1 准备阶段——构造环境

  1. 安装Developement Tools:

    [root@localhost ~]# yum groupinstall ‘Developement Tools’

  2. 安装ncurses:

    [root@localhost ~]# yum install -y ncurses

  3. 安装elfutils-libelf-devel:

    [root@localhost ~]# yum install ncurses-devel bison flex elfutils-libelf-devel openssl-devel

3.2 实验阶段

  1. 下载新内核:到官网:www.kenerl.org 中下载内核版本Linux-4.20.1。

  2. 解压内核压缩包:

    [root@localhost 下载]# tar -xvJf linux-4.20.1 -C /usr/src/kenerls

  3. 进入内核4.20.1中:

    [root@localhost jhuang]# cd /usr/src/kernels/linux-4.20.1

  4. 添加声明:

    [root@localhost linux-4.20.1]# gedit include/linux/syscalls.h

  1. 添加系统函数:

    [root@localhost linux-4.20.1]# gedit kernel/sys.c

  1. 添加系统调用

    [root@localhost linux-4.20.1]# gedit arch/x86/entry/syscalls/syscall_64.tbl

  1. 编译内核

    [root@localhost linux-4.20.1]# make oldconfig
    [root@localhost linux-4.20.1]# make menuconfig

直接选择默认设置

[root@localhost linux-4.20.1]# make -j 4
[root@localhost linux-4.20.1]# make modules_install
[root@localhost linux-4.20.1]# make install
[root@localhost linux-4.20.1]# reboot

选择第一个内核版本进行编译

  1. 编程

    [root@localhost ~]# cd /home/jhuang/桌面/note/
    [root@localhost note]# touch myc.c
    [root@localhost note]# gedit myc.c

进入页面:

编译程序:

[root@localhost note]# gcc -c myc.c
[root@localhost note]# gcc -o myc myc.o
[root@localhost note]# ./myc

四、实验结果分析


五、几个问题

1. 为什么你要添加三个调用并使用不同的调用方式,如64、common、x32?

答:为了保证我能成功调用我添加的系统函数,我觉得写多个方式的函数比较保险,并且用不同的输出信息予以区分,这样会让我更加深入了解系统调用的原理。

2. 刚刚安装的内核是缺少很多必要的环境组件的,这会导致内核编译不成功,你是怎么解决的?

答:我先是升级了所有现有的软件,然后再在接下来的编译过程中,遇到缺少什么套件,就安装什么套件。

3. 我看到你编译了多次不同的内核,是因为遇到什么问题吗?

答:第一次我安装了版本为3.2.75的内核,由于它不是在官网下的,所以可能存在被人修改过的嫌疑,虽然内核编译成功了,但是不能成功进入我所期待的页面,所以放弃了,重新找了个内核版本为3.10.89的内核,这也不是在kernel.org上下的,所以同样遇到问题,这个问题是:开机时虚拟机显示被客户机操作系统禁用了cpu,由于在网上搜不到较好的解决方案,所以去官网下载了如今的4.20.1版本的内核,最后编译成功。