最近在看《操作系统概念》,第二章结束有个练习是给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,很多教程未提到。
安装完成通过界面启动仍旧黑屏,猜想应该是未安装图形界面。不过暂时用命令行挺好的。