编译 Linux 4.15.11 内核并增加系统调用
实验日期;2018 年 3 月 21 日 - 2018 年 3 月 22 日
实验环境:
主机:
操作系统:Microsoft Windows 10.0.16299 Build 16299
处理器:Intel Core i5-7300HQ CPU @ 4x 2.50GHz
物理内存:8.00 GB
虚拟机软件:Oracle VM VirtualBox 5.2.6 r120293
虚拟机:
操作系统:openSUSE 20180319
处理器:Intel Core i5-7300HQ CPU @ 4x 2.50GHz
物理内存:4.00 GB
桌面环境:LXQt 0.12.0
编辑器:GNU Emacs 25.3.1
目录
实验目的
通过编译最新版 Linux 内核源码并增加系统调用,熟悉 Linux 命令和编辑器的使用,并加深对 Linux 内核的理解。
实验设计
实验环境设计
编译 Linux 内核首先需要 Linux 环境。Linux 环境可以直接安装到硬盘上,或选择通过虚拟机的方式安装到虚拟磁盘上。本实验采用虚拟机的方法,原因有三:①由于计算机中原有 Windows 操作系统,如果安装双系统,需要解决启动引导问题,而我目前尚无能力解决 UEFI 同时引导 Windows 与 Linux 操作系统的问题;如果删除 Windows 系统,则某些只能运行在 Windows 上的应用程序将无法使用,引起不便;②使用虚拟机将操作系统与物理设备隔离,可以避免操作失误造成的不可逆损失;③虚拟机可以截取开机时的画面,留下实验过程的珍贵资料。
Linux 有众多发行版,本实验采用 openSUSE Tumbleweed 作为实验使用的发行版,原因有三:①我曾经重装过三十余次 openSUSE Tumbleweed 系统,对该系统的安装与使用更为熟悉;②Tumbleweed 版本是滚动更新版本,每天都会提供最新的软件包更新,而本实验需要编译安装最新版 Linux 内核,如果发行版提供的软件包太旧,可能引发与内核的兼容性问题;③openSUSE 有强大的系统管理工具 YaST,便于加深初学者对 Linux 系统的整体理解。
Linux 的操作环境有命令行界面与图形界面之分,本实验采用 LXQt 桌面环境,其原因是:首先,即使使用图形界面,编译 Linux 内核过程中的重要步骤仍然在终端中进行,因此与命令行界面一样,可以达到熟悉 Linux 命令的目的。其次,在图形界面下,可以对 Linux 源码文件夹的内容有直观的印象,例如文件夹名称、文件夹中的文件数量等信息,这是命令行界面无法替代的。之所以使用 LXQt 桌面环境,是考虑到本实验仅需要编译内核源码,因此选择了较为轻量级的桌面环境。另外我也使用 Qt 进行开发,使用 LXQt 作为桌面环境,可以对 LXQt 项目有更深的了解,进而从该项目中获取 Qt 方面的知识。
Linux 下的编辑器有 Vim 与 Emacs 两个,使用任意一种均可。本实验使用 Emacs 作为编辑器。
实验方法设计
为了明显地确认增加的系统调用是否生效,本实验的系统调用使用 printk()
函数向内核缓冲区输出文字,这样可以使用 dmesg
命令查看系统调用的执行情况。
本实验增加一个系统调用 ake
,ake(あけ,朱・緋)来源于日语,由词语明ける(あける)逆构词(back formation)而来,意为红色。若调用该系统调用时,会根据一个 int 类型参数的值,使用 printk()
函数向内核缓冲区输出不同的文字