免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4342 | 回复: 7

内核态和用户态通信的方法,大家批批。 [复制链接]

论坛徽章:
0
发表于 2008-12-22 20:46 |显示全部楼层
首先建立两个fifo文件
mkfifo /tmp/in
mkfifo /tmp/out
分别负责读/写数据。
内核模块用 filp_open打开文件,用do_sync_read/write来读写文件,
因为fifo文件是阻塞的,所以同步控制很方便。
用户态打开in文件后,read,等到内核态有数据写入时进行处理。
经测试可以进行通讯,不过未进行大量数据的测试。
大家说说这种方法有什么弊端?

论坛徽章:
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
发表于 2008-12-22 20:58 |显示全部楼层
原帖由 prettywolf 于 2008-12-22 20:46 发表
首先建立两个fifo文件
mkfifo /tmp/in
mkfifo /tmp/out
分别负责读/写数据。
内核模块用 filp_open打开文件,用do_sync_read/write来读写文件,
因为fifo文件是阻塞的,所以同步控制很方便。
用户态打开 ...


内核态和用户态通信的方式比较多。有proc,共享内存,netlink等。LZ的方式现在还常用吗?

论坛徽章:
0
发表于 2008-12-22 21:01 |显示全部楼层
不常用,不过比较简单。
proc,共享内存是很方便,不过我不懂怎么告诉对方,数据已到达,请进行处理。

论坛徽章:
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
发表于 2008-12-22 21:24 |显示全部楼层
原帖由 prettywolf 于 2008-12-22 21:01 发表
不常用,不过比较简单。
proc,共享内存是很方便,不过我不懂怎么告诉对方,数据已到达,请进行处理。


是这样,你要传递什么样的数据,什么应用场景。Netlink可以吗?

论坛徽章:
0
发表于 2008-12-22 23:31 |显示全部楼层
多谢版主热心,
对一项目进行改动,把内核态要处理的数据用内存进行缓存,由于内核模块中可以申请的内存有限(我2G的内存申请到700多M内核就崩了),内核写数据是就传到用户态再malloc来缓存,读数据时就从通过用户态取得.netlink应该是一个较好解决方法,不过搜索了好多网的上例子(如imp2),在linux2.6.24下均不能正常工作,所以就想采用这个落后的方法。

论坛徽章:
0
发表于 2008-12-22 23:46 |显示全部楼层

论坛徽章:
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
发表于 2008-12-23 09:38 |显示全部楼层
不过搜索了好多网的上例子(如imp2),在linux2.6.24下均不能正常工作,所以就想采用这个落后的方法。

IMP2本身使用的是2.4下的接口啊。2.6中netlink的接口发生变化了。其实我觉得你根据新的接口调整一下就可以了。

论坛徽章:
0
发表于 2008-12-23 13:59 |显示全部楼层
netlink就像sock一样使用,多方便啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP