免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4310 | 回复: 2
打印 上一主题 下一主题

[高级应用] 关于AIX 内核扩展 添加系统调用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-09-30 12:43 |只看该作者 |倒序浏览
IBM官网教程 http://www.ibm.com/developerwork ... y/au-kernelext.html
根据教程我们可以编写内核扩展来增加自定义的系统调用,如教程中清单5提及的 demo_syscall

而清单8中,我们可以看到,调用demo_syscall 相应的编译命令为: cc  -o invoke_syscall -bI:demo_syscall.exp invoke_syscall.c
当cc=xlc时, 这样编译可以通过
但xlc是收费的,现在我的测试机上xlc已经过期,而我一向习惯使用gcc

请问有经验的大神, 如何能够解决这个问题?

gcc 编译时的错误 ERROR: Undefined symbol:demo_syscall

关键是 编译选项 -bI:demo_syscall.exp, gcc应该用什么编译选项代替?


拜谢!

论坛徽章:
0
2 [报告]
发表于 2014-10-01 09:40 |只看该作者
demo_syscall.exp是编译demo_syscall...什么东西生成出来的,估计是个空的syscall,你用xlc的时候没有这个调用的代码么?重新生成一下exp就行了,或者干脆把这个参数去掉,直接把demo_syscall.c加到待编译的源文件里。

论坛徽章:
0
3 [报告]
发表于 2014-10-02 00:16 |只看该作者
把demo_syscall.c加到源文件不太合理吧?
比如我写一个内核扩展,里面有全局的变量 int n;
而demo_syscall()这个新增的系统调用是让外层应用程序去修改这个变量
如果我把demo_syscall.c加到源文件中编译,那么n就成了我外层应用程序的全局变量
这应该是两码事了.
现在只想到一个办法,用 xlc去编译一个静态库,留给gcc用,有点多此一举,但总算可以解决到问题.

回复 2# orian


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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP