最近有个添加系统调用的作业,对于笔者这样的菜鸟来说很是吃力啊,不过好在最终还是解决了,记录写下解决过程,希望能帮到更多的人。
1.ubuntu的安装
由于我是windows环境,想要装双系统,单系统的同学可以跳过这步。
这里要感谢我的一个同学给我制作的u盘启动盘。不过制作过程也很简单,大家可以百度。
- 分配限制空间。windows下先在磁盘中分出足够的空间
- u盘启动。插入u盘后,开机时 按某个功能键(可能是F2或者F12),我是小米笔记本pro,按F12 进入选择加载u盘
- 安装ubuntu。进入ubuntu引导页,选择安装ubuntu,语言地区什么的都不重要,选看得懂的。这里注意了!!安装类型:选其他,然后开始分区。
- 分区。可以自行百度linux分区方案。因为我们要添加系统调用,后面编译的时候如果空间不足会很麻烦(当然如果你会扩展挂载点的空间除外,我就是因为不会扩展后面空间不足重装了两次系统
这里我建议分成
- swap 逻辑分区 交换空间 类似内存 大致小于你的内存一些就行2G-8G
- /boot 逻辑分区 这是引导分区 也就是说 之后你编译的新内核的引导会在这里,如果你要编译多个内核,或者内核较大,请多分配一点! 我就是在这里吃了亏,编译第三个内核的时候空间不足了。1G以上(网上都是几百M,我觉得不太够,如果你的存储空间大,请多分一点不要吝啬,上网查如何扩展/boot分区,看到那些麻烦的方法,你就知道为什么我要这么说了,当然你是高手除外)
- / 主分区 根挂载点 相当于你的系统盘 尽量大吧(第一次我只给了20G,结果爆了,第二次我给了100G,发现系统编译完用了26G,供参考)
- /home 逻辑分区 放用户的文件,你闲置的空间省下来都可以给它了。大约几十G,根据你自己的空间而定
5.设置你的用户名和密码,等待安装成功从重启。第一次有可能会卡住,安装成功后按电源键就好啦,没关系的,重启以后你就可以进入你的ubuntu啦。
2.新系统驱动的安装
按道理说,系统安装好就能用了,这里为什么还要安装驱动呢?由于我的笔记本显卡是nvidia,所以要安装显卡驱动,不然有的时候会莫名卡?不知道是不是ubuntu系统bug。 没出现卡的小伙伴可以跳过这步
参考来源:https://blog.csdn.net/aofengdaxia/article/details/82772529
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-390
安装好了重启然后
nvidia-smi
nvidia-settings
如果出现那么就成功啦!
小伙伴们接下来可以安装一些诸如输入法的东西让自己用的舒服一点。
好了,终于把前置工作做完了,接下来正式开工!!
3.添加系统调用
- 下载内核。在/usr/src下载内核 apt-get install linux-source
- 解压。 在/usr/src 下 tar –jxvf linux-source****.tar.bz2 中间的***是你的版本号 你可以使用Tab键将他补全
- 打开系统调用表。 进入你解压后的文件夹 然后 执行
sudo gedit arch/x86/syscalls/syscall_64.tbl
- 往系统调用表里添加一项系统调用号。如
格式和文件中一致,系统调用号需要是之前没用过的(如334)334 common mysyscall sys_mysyscall
- 申明系统调用服务原型 打开文件
sudo gedit include/linux/syscalls.h
添加
asmlinkage long sys_mysyscall(void)
- 实现系统调用服务例程
打开文件
sudo gedit kernel/sys.c
实现系统调用例程(以单纯printk为例)
SYSCALL_DEFINE0(mysyscall)
{
printk("hello this is my syscall test");
return 0;
}
7.重新编译内核
到这里系统调用就成功添加啦!
最近有点忙,什么时候有空再把编译内核步骤和测试系统调用也写一下。
如果哪里有问题还请大家多多指正!!