设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
编程开发讨论区 —— LinuxSir.cn
›
内核与驱动开发
›
如何注册一个内核模块,能够进行网络通信 ...
1
2
3
/ 3 页
下一页
返回列表
查看:
3196
|
回复:
22
如何注册一个内核模块,能够进行网络通信
[复制链接]
macping
macping
当前离线
积分
49
IP卡
狗仔卡
发表于 2006-3-19 14:14:10
|
显示全部楼层
|
阅读模式
rt,想注册一个内核模块,功能是自定义一种udp包,然后发往一个服务器,然后等待服务器的处理结果。。。。
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
camelguo
camelguo
当前离线
积分
33
IP卡
狗仔卡
发表于 2006-3-19 16:57:07
|
显示全部楼层
这个功能为什么不用应用程序实现,如果可以用应用程序实现最好。如果一定要使用内核模块,你可以在内核模块中也可以在内核模块中使用socket、sendto类似的系统调用。Linux内核支持内核态系统调用,这样就可以象写应用程序那样写内核模块了。
回复
支持
反对
使用道具
举报
显身卡
macping
macping
当前离线
积分
49
IP卡
狗仔卡
楼主
|
发表于 2006-3-19 18:29:02
|
显示全部楼层
我确实需要在内核态去实现。。。这是必须的
大哥,我有些不明白,内核太调用系统调用怎么调用,举个最简单的例子,比如说向网络广播一个udp数据包(hello world)。。。
怎么编写这个内核模块。。。。(内核不和函数库相连,所以内核模块不能包含通常的头文件是把)
万分感谢大哥。。。
回复
支持
反对
使用道具
举报
显身卡
macping
macping
当前离线
积分
49
IP卡
狗仔卡
楼主
|
发表于 2006-3-19 18:29:04
|
显示全部楼层
我确实需要在内核态去实现。。。这是必须的
大哥,我有些不明白,内核太调用系统调用怎么调用,举个最简单的例子,比如说向网络广播一个udp数据包(hello world)。。。
怎么编写这个内核模块。。。。(内核不和函数库相连,所以内核模块不能包含通常的头文件是把)
万分感谢大哥。。。
回复
支持
反对
使用道具
举报
显身卡
macping
macping
当前离线
积分
49
IP卡
狗仔卡
楼主
|
发表于 2006-3-19 18:29:22
|
显示全部楼层
我确实需要在内核态去实现。。。这是必须的
大哥,我有些不明白,内核太调用系统调用怎么调用,举个最简单的例子,比如说向网络广播一个udp数据包(hello world)。。。
怎么编写这个内核模块。。。。(内核不和函数库相连,所以内核模块不能包含通常的头文件是把)
万分感谢大哥。。。
回复
支持
反对
使用道具
举报
显身卡
macping
macping
当前离线
积分
49
IP卡
狗仔卡
楼主
|
发表于 2006-3-19 19:42:51
|
显示全部楼层
#define __KERNEL_SYSCALLS__
#include <linux/fs.h>
static int __init vman_init(void)
{
printk("<1>Hello,world\n");
int fd;
fd=open("/root/result.tr",O_CREAT|O_RDWR,S_IRWXU);
close(fd);
return 0;
}
这是一个简单的打开和关闭文件的内核实现,,,可是编译不过去,,,,,,网络的系统调用我还搞不清楚在哪里呢......
各位大哥帮帮小弟.........
回复
支持
反对
使用道具
举报
显身卡
camelguo
camelguo
当前离线
积分
33
IP卡
狗仔卡
发表于 2006-3-19 22:24:55
|
显示全部楼层
在系统目录上可以找到unistd.h(linux/unistd.h和asm/unistd.h),你可以看到所谓的系统调用不过是一个宏而以,_syscall0到_syscall6。写可文件定义系统调用(比如_syscall0(int, open, char*, name, int , flag))就可以了。系统调用对整个操作系统来说仅仅是一次异步上下文切换,所以无论在内核态还是用户态都没有关系。而且在内核态调用系统调用是必须实现的,因为内核代码中就有这样的力例子。
回复
支持
反对
使用道具
举报
显身卡
macping
macping
当前离线
积分
49
IP卡
狗仔卡
楼主
|
发表于 2006-3-20 08:16:32
|
显示全部楼层
to:amelguo
我知道你说的这些道理,,
那如果要打开文件,用_syscall6(int, open, char*, name, int , flag)还是用open(我自己觉的应该用open,因为这个宏已经展开了,调用一下就行)
但是,两种方法都试了,怎么都编译不过去,,
另外,网络相关的我没太接触过,,,请你帮忙指点一下大概那几个是,,,是不是还要自己添加一些_syscall
回复
支持
反对
使用道具
举报
显身卡
camelguo
camelguo
当前离线
积分
33
IP卡
狗仔卡
发表于 2006-3-20 11:48:30
|
显示全部楼层
哭了,socket、bind、listen、recvfrom、sendto等等,使用这些系统调用就可以了。
回复
支持
反对
使用道具
举报
显身卡
macping
macping
当前离线
积分
49
IP卡
狗仔卡
楼主
|
发表于 2006-3-20 14:30:55
|
显示全部楼层
to:amelguo
感谢你的回帖,小弟愚笨,接触linux不久,所以。。。
不好意思,,,求你给小弟讲一下,到底怎么用,直接调用么。。。。。但是我怎么open不了呢
?????
我知道你说的这些道理,,
那如果要打开文件,用_syscall6(int, open, char*, name, int , flag)还是用open(我自己觉的应该用open,因为这个宏已经展开了,调用一下就行)
但是,两种方法都试了,怎么都编译不过去,,
另外,网络相关的我没太接触过,,,请你帮忙指点一下大概那几个是,,,是不是还要自己添加一些_syscall
回复
支持
反对
使用道具
举报
显身卡
下一页 »
1
2
3
/ 3 页
下一页
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表