在内核linux-3.1-rc4中加入系统调用 (32位和64位)
2013-03-27 11:40
811 查看
最近为了在内核中加入指令,需要增加系统调用。我采用的方法是通过修改内核源码来增加系统调用。
1 . 实验环境为 Centos-6.0 + 32位,使用的内核源码为 linux-3.1-rc4.tar.gz.
需要增加的系统调用函数为:
int mycall(int num)
{
printk("This is my syscall from kernel.\n");
printk("current pid is: %d.\n", current->pid);
return num;
}
解压内核源码压缩包,然后修改如下文件:
1) linux-3.1-rc4/arch/x86/kernel/syscall_table_32.S
在最后添加:
.long sys_mycall
2) linux-3.1-rc4/arch/x86/include/asm/unistd_32.h
可以看到原有的最后一个系统调用为:
#define __NR_syncfs 344
在后面添加自己的系统调用:
#define __NR_mycall 345
同时,修改总的系统调用数:
#define NR_syscalls 346
3)linux-3.1-rc4/include/linux/syscalls.h
添加增加的系统调用的声明:
asmlinkage long sys_mycall(int num);
4) linux-3.1-rc4/kernel/sys.c
添加系统调用函数:
SYSCALL_DEFINE1(mycall, int, num)
{
printk("This is my syscall from kernel.\n");
printk("current pid is: %d.\n", current->pid);
return (long)num;
}
编译模块:
$ make
$ make modules
安装模块:
$ make modules_install
安装内核:
$ make install
2 . 实验环境为 Centos-6.0 + 64位,使用的内核源码为 linux-3.1-rc4.tar.gz.
需要增加的系统调用函数为:
int mycall(int num)
{
printk("This is my syscall from kernel.\n");
printk("current pid is: %d.\n", current->pid);
return num;
}
解压内核源码压缩包,然后修改如下文件:
1) linux-3.1-rc4/arch/x86/include/asm/unistd_64.h
可以看到原有的最后一个系统调用为:
#define __NR_getcpu 309
__SYSCALL(__NR_getcpu,sys_getcpu)
我们添加:
#define __NR_mycall 310
__SYSCALL(__NR_mycall,sys_mycall)
修改 #define NR_syscalls (__NR_syscall_max + 1)
为: #define NR_syscalls (__NR_syscall_max + 2)
2) linux-3.1-rc4/include/linux/syscalls.h
添加增加的系统调用的声明:
asmlinkage long sys_mycall(int num);
3) linux-3.1-rc4/kernel/sys.c
添加系统调用函数:
SYSCALL_DEFINE1(mycall, int, num)
{
printk("This is my syscall from kernel.\n");
printk("current pid is: %d.\n", current->pid);
return (long)num;
}
编译模块:
$ make modules
$ make
安装模块:
$ make modules_install
安装内核:
$ make install
也可以linux-3.1-rc4/kernel 增加自己的目录文件。
1 . 实验环境为 Centos-6.0 + 32位,使用的内核源码为 linux-3.1-rc4.tar.gz.
需要增加的系统调用函数为:
int mycall(int num)
{
printk("This is my syscall from kernel.\n");
printk("current pid is: %d.\n", current->pid);
return num;
}
解压内核源码压缩包,然后修改如下文件:
1) linux-3.1-rc4/arch/x86/kernel/syscall_table_32.S
在最后添加:
.long sys_mycall
2) linux-3.1-rc4/arch/x86/include/asm/unistd_32.h
可以看到原有的最后一个系统调用为:
#define __NR_syncfs 344
在后面添加自己的系统调用:
#define __NR_mycall 345
同时,修改总的系统调用数:
#define NR_syscalls 346
3)linux-3.1-rc4/include/linux/syscalls.h
添加增加的系统调用的声明:
asmlinkage long sys_mycall(int num);
4) linux-3.1-rc4/kernel/sys.c
添加系统调用函数:
SYSCALL_DEFINE1(mycall, int, num)
{
printk("This is my syscall from kernel.\n");
printk("current pid is: %d.\n", current->pid);
return (long)num;
}
编译模块:
$ make
$ make modules
安装模块:
$ make modules_install
安装内核:
$ make install
2 . 实验环境为 Centos-6.0 + 64位,使用的内核源码为 linux-3.1-rc4.tar.gz.
需要增加的系统调用函数为:
int mycall(int num)
{
printk("This is my syscall from kernel.\n");
printk("current pid is: %d.\n", current->pid);
return num;
}
解压内核源码压缩包,然后修改如下文件:
1) linux-3.1-rc4/arch/x86/include/asm/unistd_64.h
可以看到原有的最后一个系统调用为:
#define __NR_getcpu 309
__SYSCALL(__NR_getcpu,sys_getcpu)
我们添加:
#define __NR_mycall 310
__SYSCALL(__NR_mycall,sys_mycall)
修改 #define NR_syscalls (__NR_syscall_max + 1)
为: #define NR_syscalls (__NR_syscall_max + 2)
2) linux-3.1-rc4/include/linux/syscalls.h
添加增加的系统调用的声明:
asmlinkage long sys_mycall(int num);
3) linux-3.1-rc4/kernel/sys.c
添加系统调用函数:
SYSCALL_DEFINE1(mycall, int, num)
{
printk("This is my syscall from kernel.\n");
printk("current pid is: %d.\n", current->pid);
return (long)num;
}
编译模块:
$ make modules
$ make
安装模块:
$ make modules_install
安装内核:
$ make install
也可以linux-3.1-rc4/kernel 增加自己的目录文件。
相关文章推荐
- linux系统调用64位汇编与32位汇编不同及兼容
- 例说linux内核与应用数据通信(一):加入一个系统调用
- 使用 Linux 系统调用的内核命令
- linux下64位汇编的系统调用(4)
- Linux内核(5)——系统调用与内核编译实验
- Linux 内核源码-- 系统调用相关
- 服务端64位系统安装orcal,客户端32位系统调用
- 如何查询centos查看系统内核版本,系统版本,32位还是64位
- Linux 内核系统调用 第一节
- 查看及启动系统的32位或64位内核模式
- 修改Linux内核增加系统调用
- Linux:使用rpcgen实现64位程序调用32位库函数
- 在 Linux 下用户空间与内核空间数据交换的方式,第 1 部分: 内核启动参数、模块参数与sysfs、sysctl、系统调用和netlink
- linux64位系统编译32位openssl
- 如何查看Linux系统是64位还是32位
- Linux内核分析——系统调用(上)
- 实用篇--查看linux系统版本是32位的还是64位的
- Linux内核添加系统调用总结
- 如何查询centos查看系统内核版本,系统版本,32位还是64位
- 例说linux内核与应用数据通信(一):添加一个系统调用