等等
首先到linux内核源码目录
设置一下
config成功
开始make
这里我们修改/etc/default.grub
中的GRUB_DEFAULT=0
为GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 4.9.238"
,然后运行sudo update-grub
内核已更新
在Linux文件夹下新建一个叫mysyscalls
的文件夹,在里边新建一个叫hello.c
的文件,里边编写我们的系统调用代码
#include <linux/kernel.h>
asmlinkage long sys_hello(void)
{
printk("Hello world\n");
return 0;
}
asmlinkage long sys_myarg(int arg0)
{
printk("--syscall arg %d", arg0);
return 0;
}
asmlinkage long sys_hello_lbx(void)
{
printk("Hello, LBX\n");
return 0;
}
第一个在mysyscall目录下
第二个是linux根目录下的makefile,搜索core-y
,在第二个core-y
对应的位置加入mysyscalls/
(注意和前边有空格)
在arch/x86/entry/syscalls/
目录下
修改syscall_64.tbl(32位机子改syscall_32.tbl),在结束处加上你新添加的系统调用
include/linux/syscalls.h
加在最后一个#endif
之前
然后按照之前的替换内核过程来一遍就好了
创建一个.c文件,输入
#include <stdio.h>
#include <linux/kernel.h>
#include <sys/syscall.h>
#include <unistd.h>
int main()
{
syscall(332,10);
syscall(333);
syscall(334);
return 0;
}
syscall
函数第一个参数为之前tbl文件中对应的系统调用所在行,之后的参数是输入给系统调用的参数。
然后gcc编译,执行
执行后,执行命令dmesg
,查看系统调用输出的信息。