当前位置: 技术问答>linux和unix
2.6.7内核中增加系统调用与2.4.20不一样了么?该如何弄
来源: 互联网 发布时间:2015-09-20
本文导语: 2.6.7内核与2.4.20中的entry.s 不一样了。 2.4.20里面的写法为 ... .long SYMBOL_NAME(sys_ni_syscall) .rept NR_syscalls-(.-sys_call_table)/4 .endr 而在2.6.7里面 ... long sys_ni_syscall //比上面的写法似乎更简洁了 syscall_table_size=(.-sys_call_tabl...
2.6.7内核与2.4.20中的entry.s 不一样了。
2.4.20里面的写法为
...
.long SYMBOL_NAME(sys_ni_syscall)
.rept NR_syscalls-(.-sys_call_table)/4
.endr
而在2.6.7里面
...
long sys_ni_syscall //比上面的写法似乎更简洁了
syscall_table_size=(.-sys_call_table)
没有了.rept,只有“syscall_table_size=(.-sys_call_table)”是否直接填写一个,以前这里应该填写最大的系统调用号。2.6.7这里没有了.rept,该如何写,直接加一个.rept
rept NR_Mysyscalls-200 ,假如我的系统调用号为200。
2.4.20里面的写法为
...
.long SYMBOL_NAME(sys_ni_syscall)
.rept NR_syscalls-(.-sys_call_table)/4
.endr
而在2.6.7里面
...
long sys_ni_syscall //比上面的写法似乎更简洁了
syscall_table_size=(.-sys_call_table)
没有了.rept,只有“syscall_table_size=(.-sys_call_table)”是否直接填写一个,以前这里应该填写最大的系统调用号。2.6.7这里没有了.rept,该如何写,直接加一个.rept
rept NR_Mysyscalls-200 ,假如我的系统调用号为200。
|
在 entry.S 的 ENTRY(sys_call_table) 下面的列表最后加上
.long sys_foo
在 /asm/unistd.h 中
#define _NR_foo NNN
这里 NNN 是 sys_foo 对应的系统调用号——从 entry.S 中推算
最后,在 kernel/sys.c 文件中实现系统调用(也可能是其它文件中)
asmlinkage long sys_foo (void)
{
/* Your stuff goes here */
}
具体参考《Linux 内核设计与实现》第四章。作者 Robert Love,中文版书号7-111-15241-7
.long sys_foo
在 /asm/unistd.h 中
#define _NR_foo NNN
这里 NNN 是 sys_foo 对应的系统调用号——从 entry.S 中推算
最后,在 kernel/sys.c 文件中实现系统调用(也可能是其它文件中)
asmlinkage long sys_foo (void)
{
/* Your stuff goes here */
}
具体参考《Linux 内核设计与实现》第四章。作者 Robert Love,中文版书号7-111-15241-7
|
没有.rept 我还真不知道怎么写
|
Wolf0403(完美废人)(嗷——呜~……)(最后一匹狼) ( )
我也是按照你说的方法写的一个简单的系统调用,实现2个整数的相加,内核重新编译都没有问题,但是在用测试程序测试的时候出现问题。
报错:
/tmp/ccWranng.o(.text+0x23):In function 'myadd':
:undefined reference to 'errno'
collect2:ld returned 1 exit status
我的内核版本是2.4.28
我也是按照你说的方法写的一个简单的系统调用,实现2个整数的相加,内核重新编译都没有问题,但是在用测试程序测试的时候出现问题。
报错:
/tmp/ccWranng.o(.text+0x23):In function 'myadd':
:undefined reference to 'errno'
collect2:ld returned 1 exit status
我的内核版本是2.4.28
|
怎么调用的?直接用 syscall( number, ... ) 调用试试
|
redhat 9 不是2.4的内核吗?