LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 899|回复: 4

给2.6.31内核添加一个系统调用[已解决]

[复制链接]
发表于 2009-12-16 12:44:56 | 显示全部楼层 |阅读模式
我试图在2.6.31版本的内核里面添加一个系统调用
步骤如下:
[HTML]
1.cd /usr/src/linux/include/asm-generic/
2. vim unistd.h,添加#define __NR_mysyscall  337
3.cd /usr/src/linux/arch/x86/kernel/
4. vim syscall_table_32.S 添加.long sys_mysyscall
5.cd /usr/src/linux/kernel
6.vim sys.c 添加函数
asmlinkage int sys_mysyscall(void)
{
    printk( "hello, world" );
    return 10;
}

7.编译,并且启用新内核
8.编写代码
#include <linux/unistd.h>
#include <sys/syscall.h>

#define __NR_mysyscall  337

int main(int argc, char** argv)
{
    syscall(__NR_mysyscall );
    return 0;
}
[/HTML]

但是什么结果也没有,是哪里出了问题呢?感觉好像没有找到我添加的系统调用啊
那个系统调用号是系统唯一的,没有和其他的冲突。
谢谢
补充下:
我的机器cpu是Pentium (R) Dual-Core CPU T4200 @2.00G HZ
发表于 2009-12-16 12:57:17 | 显示全部楼层
printk里不用标明响应级别吗?我也是刚开始学内核...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-16 13:00:22 | 显示全部楼层
这个,我也不知道呵呵,我以前为了弄清楚内核启动时内存管理初始化
这块的东西,都是直接printk( char* fmt, ... );这样的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-16 22:30:06 | 显示全部楼层
我弄错了,有结果输出的
printk的输出在/var/log/messages
奇怪的是怎么之前没有呢?
可能是大意了
回复 支持 反对

使用道具 举报

发表于 2009-12-16 22:48:24 | 显示全部楼层
这里有一篇给内核加api的指导文
http://tldp.org/HOWTO/html_singl ... all-Linux-2.6-i386/

看起来你没有在/usr/src/linux/include/linux/syscalls.h 做新api的实现函数声明,而且你的api是0个参数的,应该用_syscall0()吧。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表