当前位置:  技术问答>linux和unix

郁闷啊!系统调用添加问题?

    来源: 互联网  发布时间:2015-02-28

    本文导语:   这个问题困扰我几天了。我按以下步骤添加系统调用,为什么不行?系统老是说 xtdy.c: In function `mycall':                                   xtdy.c:3: `__NR_mycall' undeclared (first use in this function) xtdy.c:3: (Each...


 这个问题困扰我几天了。我按以下步骤添加系统调用,为什么不行?系统老是说

xtdy.c: In function `mycall':                                  
xtdy.c:3: `__NR_mycall' undeclared (first use in this function)
xtdy.c:3: (Each undeclared identifier is reported only once    
xtdy.c:3: for each function it appears in.)                    
xtdy.c:3: `errno' undeclared (first use in this function)  (我用的是redhat7。3,内核是2。4。18-3的,装在virtualpc上的)

各位高手帮帮忙,我编译一次内核要花将近一个小时,我不想再浪费时间了。


添加步骤:


1、编写系统调用函数 
编辑sys.c文件: 
# cd /usr/src/linux/kernel 
# vi sys.c 
在文件的最后增加一个系统调用函数: 
asmlinkage int sys_print_info(int testflag) 

printk(" It's my syscall function!n"); 
return 0; 

该函数有一个int型入口参数testflag,并返回整数0。 
2、修改与系统调用号相关的文件 
编辑入口表文件: 
# cd /usr/src/linux/arch/i386/kernel 
# vi entry.S 
把函数的入口地址加到sys_call_table表中: 
arch/i386/kernel/entry.S中的最后几行源代码修改前为: 
...... 
.long SYMBOL_NAME(sys_sendfile) 
.long SYMBOL_NAME(sys_ni_syscall) /* streams1 */ 
.long SYMBOL_NAME(sys_ni_syscall) /* streams2 */ 
.long SYMBOL_NAME(sys_vfork) /* 190 */ 
rept NR_syscalls-190 
.long SYMBOL_NAME(sys_ni_syscall) 
.endr 
修改后为: 
...... 
.long SYMBOL_NAME(sys_sendfile) 
.long SYMBOL_NAME(sys_ni_syscall) /* streams1 */ 
.long SYMBOL_NAME(sys_ni_syscall) /* streams2 */ 
.long SYMBOL_NAME(sys_vfork) /* 190 */ 
.long SYMBOL_NAME(sys_print_info) /* added by I */ 
.rept NR_syscalls-191 
.endr 
修改相应的头文件: 
# cd /usr/src/linux/include/asm 
# vi unistd.h 
把增加的sys_call_table表项所对应的向量,在include/asm/unistd.h中进行必要申明,以供用户进程和其他系统进程查询或调用。 
#define __NR_putpmsg 189 
#define __NR_vfork 190 
#define __NR_print_info 191 /* added by I */ 
3、编译内核,再重启动,进入新内核 
4、测试 
编写用户测试程序(xtdy.c): 
# vi xtdy.c 
#include 
_syscall1(int,print_info,int,testflag) 
main() 

int i; 
i= print_info(0); 
if(i==0) 
printf("i=%d , syscall success!n",i); 

如果要在用户程序中使用系统调用函数,那么在主函数main前必须申明调用_syscall,其中1 表示该系统调用只有一个入口参数,第一个int 表示系统调用的返回值为整型,print_info为系统调用函数名,第二个int 表示入口参数的类型为整型,testflag为入口参数名。 
编译测试程序: 
# gcc -o xtdy xtdy.c 
执行测试程序: 
# ./xtdy 
It's my syscall function! 
i=0, syscall success! 

|
有没有把新内核的System.map拷到/boot下?

    
 
 

您可能感兴趣的文章:

  • LINUX下系统调用是不能中断的,要怎么改造成可以中断系统调用?
  • 请问linux中的系统调用号是如何跟系统调用表对应起来的
  • Linux添加系统调用时如何调用C语言库函数
  • 问:系统调用的原理,一个C函数的系统调用是怎样进入到系统的?
  • 截获系统调用的模块中,如何获得发生系统调用eip
  • linux中为什么系统调用比普通函数调用更费时间?
  • 如何在LINUX下用一个普通文件调用一个自己编写的调用系统的文件
  • MINIX3 系统如何添加系统调用
  • 关于minix文件系统中dup的系统调用问题
  • 在LINUX中使用C调用系统命令,怎么取得系统命令的输出?
  • 在linux kernel 里添加了系统调用,如何在用户程序中调用添加的系统调用呢?急
  • 系统调用对应的内核函数在什么地方
  • 增加系统调用
  • 急急 solaris 系统被自己的进程调用太多堵死了,其它系统进程也运行不了,有没有什么好的办法啊?在线等!!!!
  • 望指点:系统调用与函数库关系
  • 如何用系统调用实现每秒钟显示一次系统时钟,可以用getitimer,setitimer,alarm?
  • 我自己写了一个一个程序,文件名叫test。。怎么能够像调用系统命令那样子去调用我这个命令呢。在任何地方输入test就能执行这个程序。
  • settimeofday系统调用只是修改了系统时间?!没写进硬件?重启后时间还是1970怎么办??感谢路过的大神指点
  • 关于Linux系统调用的问题!
  • C库函数和linux系统调用区别
  • linux系统下怎么添加在windows底下的盘
  • 添加系统调用的问题
  • 向系统添加一个系统调用中出现的问题
  • linux3.0.0.12内核怎么添加系统调用
  • 为什么在Solaris里添加的普通用户不能登陆系统
  • 双系统电脑,重装2003后,Linux怎么重新添加引导?
  • 添加文件系统时,遇到的问题
  • freebsd系统中添加用户都改写那些文件了?
  • useradd 添加的用户,系统重启后就消失了!
  • 添加自己的系统调用的问题,请大侠帮忙
  • 如何添加一个目录到系统路径里面?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 系统启动的问题,多重系统的问题
  • 问一个系统配置的问题:win2k系统能不能于SCO UNIX系统共存?
  • UNIX系统下的C程序移植到Linux系统的问题
  • 求助:J2EE系统在Unix 系统中出现乱码问题?谢谢
  • 有关Windows CE系统与Win2K系统问题!急!
  • 在xp下装ubuntu系统实现双系统网络连接问题
  • windows系统和linux系统之间ping的问题!!
  • 修改/ETC/FSTAB后,系统不能进入,/文件系统只读,不能改,我该怎么办,分不是问题
  • 问一个问题。请问如何在文件系统管理并使用设备,也就是当一个设备装载,下载时。文件系统是如何实现的
  • 安装三系统或双系统问题
  • android系统input子系统keypad的问题~
  • unix 系统中如何查看系统日志?给解决问题的人,另外再给100分
  • linux引导出问题,恢复grub无法找到系统文件(系统:ubuntu7.04)
  • 中文问题:我使用的是MEPIS Linux,系统不能显示中文,我能不能把Redhat中的中文字体移植到这个系统中?
  • centos系统与xp系统通信问题
  • java执行操作系统命令的问题:如何判断多个操作系统?
  • 虚拟机中安装的系统与实际系统文件的拷贝问题?
  • 关于大端系统和小端系统的问题求教
  • 有关《一个操作系统的实现》中文件系统的问题
  • Windows2000和Linux双操作系统,Linux系统有问题,我直接把Linux分区删除后,Windows2000进不去了,怎么办???
  • mount命令(linux操作系统)挂载卸载文件系统(cifs,光驱,nfs等)方法介绍
  • unix下用java.util.Date取系统时间比直接在系统下用date命令查看系统时间早整整一个小时
  • win7/Windows7系统下载地址搜集整理
  • windows 系统是否是多用户操作系统,如何理解“多用户操作系统”的“多用户”?
  • Ubuntu查看系统信息命令介绍
  • 我现在想做一个权限管理系统,想让权限系统的利用性更强,我应该怎样设计权限系统呢.
  • python下用os.execl执行centos下的系统时间同步命令ntpdate
  • 谁知道哪里有用java开发的管理信息系统软件(如:图书馆管理系统,人事部管理系统)的代码?
  • 怎样重装win7系统?win7重装系统步骤详细图文介绍
  • 原来已安装好ubuntu,因系统崩溃,重装WINXP系统,如何再次登录ubuntu系统?
  • windows server2008上PowerBuilder程序系统错误解决方法


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3