Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Xilesun/cd42549f3effbd94c4d95e0d638332f0 to your computer and use it in GitHub Desktop.
Save Xilesun/cd42549f3effbd94c4d95e0d638332f0 to your computer and use it in GitHub Desktop.
Adding a Hello World System Call to Linux kernel 3.16.51

最近在看《操作系统概念》,第二章结束有个练习是给linux内核添加一个新的system call. 今天花了不少时间才完成,记录过程和遇到的坑。

环境:macOS sierra / CentOS7 3.10.0 in Parallels Desktop

一开始是打算直接对现有内核进行修改,但是修改之后发现现在系统中的内核不完整,缺少文件syscall_32.tbl,编译失败。于是从kernel.org下载新的完整的内核,我选择的版本是3.16.51.

之后的过程基本参考 https://tssurya.wordpress.com/2014/08/19/adding-a-hello-world-system-call-to-linux-kernel-3-16-0/

但是按照该过程安装完内核,重启,在grub引导界面选择新内核启动出现黑屏。网上查到的原因有:

  • 显卡驱动缺失,需要重新安装parallels tools
  • 未安装图形界面

选择原来的内核正常进入系统,打开terminal

systemctl set-default multi-user.target

设置命令行模式启动,之后可以正常进入新内核系统

这时有个插曲是忘记了用户名密码,默认是parallels而不是root

通过修改grub文件进入单用户模式,修改密码

重启成功进入系统,测试新添加的system call成功

重装parallels tools,要从parallels应用文件里挂载镜像到CD/DVD,很多教程未提到。

安装完成通过界面启动仍旧黑屏,猜想应该是未安装图形界面。不过暂时用命令行挺好的。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment