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位是有区别的,要注意自己的机器是多少位的

 

posted @ 2018-04-19 10:07  limc  阅读(1102)  评论(0)    收藏  举报