博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
向Linux 内核增加一个系统调用
阅读量:5034 次
发布时间:2019-06-12

本文共 1724 字,大约阅读时间需要 5 分钟。

实验原理:

内核:内核是整个操作系统的最底层,它负责了整个硬件的驱动以及提供了各种系统所需的内核功能,包括防火墙机制,是否支持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

转载于:https://www.cnblogs.com/wangbobobobo/p/9757440.html

你可能感兴趣的文章
[CF508E] Arthur and Brackets
查看>>
[CF1029E] Tree with Small Distances
查看>>
tp5.0中及其常用方法的一些函数方法(自己看)和技巧(不断添加中)
查看>>
美团推荐算法实践
查看>>
Netty官方示例
查看>>
[数分提高]2014-2015-2第4教学周第2次课
查看>>
ansible进阶小技巧--tags
查看>>
JSP页面跳转方式
查看>>
发布高性能迷你React框架anu
查看>>
Python中Gradient Boosting Machine(GBM)调参方法详解
查看>>
利用DDE通信将PLC数据传输到EXCEL
查看>>
Eclipse 实用快捷键大全
查看>>
与非门和或门实现异或门
查看>>
golang统计出其中英文字母、空格、数字和其它字符的个数
查看>>
poj 1782 Run Length Encoding
查看>>
《自我介绍》
查看>>
在线考试系统设计思路
查看>>
p1150[noip2013普及]表达式求值
查看>>
POST和GET有什么区别?
查看>>
js基础
查看>>