免费注册 查看新帖 |

Chinaunix

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

[内核模块] 做一个内核模块,但是我取不到当前目录~求助,另有其他问题请教~ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-28 23:14 |只看该作者 |倒序浏览
我写了一个模块,修改了系统调用。
修改了相关系统调用函数。
我要在模块里判断是否是指定目录,是指定目录才应用修改了的系统调用。
问题1:如何外部指定目录?
详细地说,我不能让别人都接触到代码,但是最终我写好模块之后,要让应用的人自己指定目录。那么我如何从模块的代码里取得他指定的目录?
问题2:我在用getcwd()这个函数时候,出错了。
详细地说,由于第一个问题不知道怎么实现,所以我暂且先写死在模块代码里。我自己的想法是把指定目录的地址和getcwd进行匹配,如果相等则是需要应用修改了的系统调用的目录。
但是我却编译不过,错误如下:
*******/redirect.c:90: warning: function declaration isn’t a prototype
*******/redirect/redirect.c: In function ‘is_monitor’:
*******/redirect/redirect.c:91: error: implicit declaration of function ‘getcwd’
*******/redirect/redirect.c:91: warning: initialization makes pointer from integer without a cast
我有导入#include <asm/unistd.h>这个头文件。


刚接触内核,不是很懂,希望大家帮帮忙~谢谢~

论坛徽章:
0
2 [报告]
发表于 2012-11-29 10:28 |只看该作者
怎么没有一个人回复啊~
顶上~

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
3 [报告]
发表于 2012-11-29 13:59 |只看该作者
回复 1# xingxing_lyx

把要制定的目录做成内核参数的方式就可以吧。

   

论坛徽章:
1
技术图书徽章
日期:2013-10-29 15:46:41
4 [报告]
发表于 2012-11-30 14:55 |只看该作者
你的第一个问题3楼已经答了
你的第二个问题 好像高版本的内核不支持这个函数了吧...

论坛徽章:
0
5 [报告]
发表于 2012-12-04 11:18 |只看该作者
回复 3# Godbach


    谢谢回答~那第二个问题该怎么解决呢。也就是说该怎样才能得到系统调用的当前路径~?

论坛徽章:
0
6 [报告]
发表于 2012-12-04 11:19 |只看该作者
回复 4# zj47596731


    可是我的内核版本是2.6的啊·centos的~

论坛徽章:
0
7 [报告]
发表于 2012-12-05 10:15 |只看该作者
“我要在模块里判断是否是指定目录,是指定目录才应用修改了的系统调用。”

用户态用系统调用,直接查fs结构图之类看目录;

内核态直接调,好像没什么目录看吧?


unistd.h里面有getcwd(),确认不是sys_getcwd()?

论坛徽章:
0
8 [报告]
发表于 2012-12-06 14:59 |只看该作者
getcwd是C函数, 应该在内核中不能直接使用吧.

论坛徽章:
0
9 [报告]
发表于 2012-12-08 08:37 |只看该作者
你的第一个问题,其实就是要解决用户程序和内核通信的问题,通信的手段有很多,例如nf_sockopt,netlink,ioctl。netlink和ioctl如何使用不太清楚,网上资料很多,你可以搜索一下。nf_sockopt方式你可以参见nf_register_sockopt接口,这个接口就是
注册自己的setsockopt和getsockopt操作。
第二个问题,获取当前的执行路径的操作让用户层直接做了,最好不要在内核里做。既然都已经传了一个指定的目录,再传一个当前的目录也无妨。如果一定要在内核模块中做的话,可以参考sys_getcwd(这个函数没有EXPORT,不能使用)的实现,自己
照着写一个。sys_getcwd的定义在fs/dcache.c中定义,定义如下:
SYSCALL_DEFINE2(getcwd, char __user *, buf, unsigned long, size)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP