Linux增加系统调用
使用Ubuntu14.04,内核从3.19.0替换成3.19.2,成功添加系统调用
一、www.kernel.org上下载内核,我下载的版本是3.19.2,并解压到/usr/src/目录
超级管理员权限
将内核源码拷贝到 /usr/src 目录,mv是移动指令,cp是拷贝指令
将内核文件解压缩
tar -xvf file.tar 解压tar.gz
tar -xzvf file.tar.gz解压tar.gz
unrar e file.rar 解压rar
tar -xZvf file.tar.Z 解压tar.Z
tar -xjvf file.tar.bz2 解压tar.bz2
unzip file.zip 解压zip
二、在下载的内核中增加自己的系统调用。
在头文件中,申明我们的系统调用函数
实现我们的系统调用函数
创建Kconfig.mycall文件
打开makefile文件,将mycall.o加入obj-y中,这样编译的时候就能找到我们增加的mycall.c文件
另外我们可以直接在sys.c中实现我们的函数,就不需要创建文件以及在obj-y中添加编译项,但不能有两个函数体,不然编译报错
打开源码路径下的makefile文件,将extraversion后面加载.syscall,这就是之后我们的内核名字
生成配置文件
三、编译内核
make指令,这个要很长时间
安装模块
安装内核
安装之后,在/boot/路径下我们可以看到多出了几个文件
按住shift,选择高级选项
选择我们刚才安装的内核
重启查看内核已经更换
我们新增加的函数,以及增加
四、编译运行
在桌面创建一个.c文件,利用syscall调用我们添加的系统调用,第一个参数是调用号,我们自己定义的323,第二个参数是自己随意输入的数字100的参数
编译运行,新增加的系统调用函数执行成功
再看看内核中的调试输出,dmesg 为检测和内核缓冲区,-c为打印后清除
注意:编译内核的时候不要重复执行make指令,否则可能文件夹会特别大