Ubuntu17.10编译新内核,增加自定义系统调用函数 64位
一、实验准备
1.本实验的实验环境为64位机器,Ubuntu17.10
2.去官网https://www.kernel.org/下载内核,我下载的版本是3.16.56
3.将下载目录下的压缩包移动至 /usr/src 
4.解压压缩包 
5.此时会解压出来一个linux-3.16.56文件夹,为了省事可以使用命令 sudo chmod 777 -R linux-3.16.56
二、实验过程
1.打开编辑linux-3.16.56/arch/x86/syscalls下的syscall_64.tbl

找到64位系统调用的最后面,不是文件最后,这个版本是有316个,增加自己的317号系统调用mycall,如下图

2.打开编辑linux-3.16.56/kernel下的sys.c 在文件最后得end if 后面增加自己系统调用函数的实现![]()
![]()
3.打开编辑linux-3.16.56/include/linux下的syscalls.h文件,增加系统调用函数声明![]()
![]()
4.编译
(1)配置内核 make menuconfig
如果提示unable to find the ncurses libraries or the required header files,输入命令 sudo apt-get install libncurses5-dev 安装该库
(2)编译内核 make -j4
(3)编译模块 make modules
(4)安装模块 sudo make modules_install
(5)安装内核 sudo make install
(6)更新grub sudo update-grub
编译过程比较耗时!!
5.测试
1.重启,在grub界面选择Ubuntu高级选项
2.选择自己刚刚安装的内核 linux-3.16.56
3.编辑c语言程序测试 之前我们添加的系统调用号是317

4.编译并运行

结果并没有打印在终端上,这是因为printk打印的信息是不会在终端上显示的,这时候我们可以通过dmesg来进行查看


看到结果了,证明我们确实调用了自己定义的系统调用函数!!
三、实验总结
64位与32位是有区别的,要注意自己的机器是多少位的





浙公网安备 33010602011771号