linux 0.11 添加系统调用之后调用总是返回-1

dalitiancai 2009-08-31 10:46:15
我在bochs2.2.1中对linux0.11内核添加了一个新的系统调用,步骤如下:
1./usr/src/linux/include/unistd.h中添加:#define __NR_mytest 87
然后在下面声明函数原型:int mytest();
2./usr/src/linux/include/linux/sys.h中添加:extern int sys_mytest();
然后在sys_call_table中最后加上sys_mytest;
3.在/usr/src/linux/kernel/sys.c中添加函数实现如下:
int sys_mytest(){
printk("This is a test!");
return 123;
}
4.在/usr/src/linux/kernel/system_call.s中对系统调用号加1(原来是86改成了87)
5.然后到/usr/src/linux目录下编译内核make clean; make Image
6. cp /usr/src/linux/include/unistd.h /usr/include/unistd.h
7. reset bochs
8. 在/usr/root中生成test.c文件如下:
#define __LIBRARY__
#include <unistd.h>
_syscall0(int,mytest)
int main(){
int a;
a = mytest();
printf("%d", a);
return 0;
}
9.然后gcc test.c编译之后运行a.out,前面所有步骤都通过,但是每次调用都是返回-1,然后我查过errno为1(表示操作不允许),就不知道为什么了?
系统知道的高手们能够告知一下,不胜感激!这个问题困扰我很久了!

问题补充:

我下载的linux 0.11的版本是linux-0.11-devel-060625,多谢老!
...全文
246 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dalitiancai 2009-09-08
  • 打赏
  • 举报
回复
之前内核不起作用原来是忘记用dd命令了,不过用了之后新增加的系统调用还是不起作用,调用的返回结果还是-1,郁闷啊!
dalitiancai 2009-09-08
  • 打赏
  • 举报
回复
我后来查了一下,仿佛是编译的linux内核没有起作用,不过编译内核的时候是正常的。
我直接使用的make clean 然后再使用make编译 之后直接点击bochs的reset按钮,然后编译运行test.c文件
不知道哪位高手可以告诉我哪里出了问题么?
个人感觉是新编译的内核没有运行起来,我修改了一个老的系统调用用上面相同的方法编译内核,然后调用该系统调用也不起作用,就不知道什么原因了!
once_and_again 2009-09-08
  • 打赏
  • 举报
回复


看 标题-1 一定是错了,


linux下正确 的返回值 一般是0.
steptodream 2009-08-31
  • 打赏
  • 举报
回复
帮顶 等待高手 顺便学习下

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧