向Linux 内核增加一个系统调用

实验原理:

内核:内核是整个操作系统的最底层,它负责了整个硬件的驱动以及提供了各种系统所需的内核功能,包括防火墙机制,是否支持LVM或Quota文件系统,以及进程和内存管理和通信功能。其实内核就是系统上面的一个文件而已,它包含了驱动主机各项硬件的检测程序与驱动模块。内核文件通常被放置在/boot/vmlinuz中。(uname –r  命令:显示内核版本信息)

内核模块:由于现在硬件更新速度太快,如果我的内核比较旧,我换了新的硬件,内核肯定无法支持,怎么办?重新拿一个新的内核来处理吗?内核编译的过程是很麻烦的。为了这个缘故,Linux很早之前就已经开始使用所谓的模块化设置了。即将一些不常用的类似驱动程序的内容独立出内核,编译成为模块,然后,内核可以在正常运行的过程当中加载这个模块到内核。这样,在不需要改动内核的前提之下,只要编译出适当的内核模块并加载它,Linux就可以使用新的硬件。模块被放置在/lib/modules/$(uname -r)/kernel中。

内核编译:内核其实是一个文件,由源代码编译而成的,开机读完BIOS并加载MBR内的引导程序后,就开始加载内核到内存当中,所以要将它编译成系统可以认识的数据才行。

实验目的:

通过实验,熟悉Linux 操作系统的使用,掌握构建与启动Linux 内核的方法;掌握用户程序如何利用系统调用与操作系统内核实现通信的方法,加深对系统调用机制的理解;进一步掌握如何向操作系统内核增加新的系统调用的方法,以扩展操作系统的功能。

实验过程:

一、首先下载linux-4.10.14.tar(一开始我用的是linux-2.6.33.3.tar经历过七八个小时的各种改错,各种版本不匹配,最后选择换版本,这是一个让人崩溃的过程)

二、然后,共享文件到虚拟机上。

三、解压文件tar -xvf linux-4.10.14.tar.xz

 

四、然后开始对增加的系统调用添加相关内容

# vim kernel/sys.c   ,加入下面的函数

asmlinkage int sys_helloworld(int number)  // 该函数名中有下划线

{

    printk("hello,world\n");  //printk()函数是系统内核的输出函数,区别 //于printf()。

    return number;

}   

 

五、添加系统调用号

vim ./arch/x86/entry/syscalls/syscall_64.tbl(32位系统是syscall_32.tbl)

将第223行改成如图所示

 

六、修改系统调用表,注册系统调用。

#vim include/linux/syscalls.h

 

增加一行  asm int sys_helloworld(int number);

七、

   第一步到第四步都是在/usr/src/linux-4.10.14 目录下运行。先跳转到该目录下。

第一步:make mrproper 清除内核中不稳定的目标文件,附属文件及内核配置文件

第二步:make clean 清除以前生成的目标文件和其他文件

第三步:make menuconfig  配置内核,采用默认的内核配置即可。(选择exit)

这里会报错,原因是缺少东西,执行一下命令之后重新执行即可。

sudo apt-get install libncurses5-dev

 

 

 

第四步:sudo make  ( 该命令等价于make bzImage编译内核 +make modules编译内核模块)

这是一个漫长的过程,基本上很多人都是等了两个半小时左右,因为我分配了1g内存,单核。跑了三个小时。

 

进入linux-4.10.14系统

以上设置成功,下一步就是进入内核系统。重启电脑,过程中不断按住shift。

出现一下界面

 

  选择ubuntu高级选项回车,进入如下界面

 

选中如图所示版本,回车

进入系统

写入以下代码:

 

编译运行运行:

# gcc test.c –o test

# ./test

# dmesg –c

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值