弱问dev_get及dev_get_by_name的使用

千羽鸣 2010-10-06 04:57:24
之前我一直没有接触设备的代码,今天因为需要使用dev_get和dev_get_by_name几个函数进行网络设备的控制,但是从没有接触过,dev_get 和dev_get_by_name需要包含哪些文件、如何进行编译才能顺利通过,不会出现undefined reference to...这种错误?

#include <netinet/in.h>
#include <linux/netdevice.h>
#include <stdio.h>
int main(){
int ret=dev_get("eth0");
if(!ret){
puts("Device doesn't exist");
}
struct net_device *my=dev_get_by_name("eth0");
return 0;
}

gcc -Wall -o "net" "net.c" (在目录/home/tyh中)
net.c: In function ‘main’:
net.c:5: warning: implicit declaration of function ‘dev_get’
net.c:9: warning: implicit declaration of function ‘dev_get_by_name’
net.c:9: warning: initialization makes pointer from integer without a cast
net.c:9: warning: unused variable ‘my’
/tmp/cc73vkYv.o: In function `main':
net.c:(.text+0x11): undefined reference to `dev_get'
net.c:(.text+0x34): undefined reference to `dev_get_by_name'
collect2: ld returned 1 exit status
编译失败
...全文
516 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
deep_pro 2010-10-07
ifconfig eth0 up 调用倒是很好查,strace跟一下就知道是调用
ioctl的SIOCSIFFLAGS命令
具体的现在我没环境

你自己在程序里调用ioctl就行了,至于为什么有时不成功就要看ioctl的返回错误值
回复
千羽鸣 2010-10-07
[Quote=引用 3 楼 deep_pro 的回复:]
当然是在内核态调用啊 例如写个内核模块什么的
[/Quote]
我现在在写一个使用802.1x认证的客户端软件,认证过程自然使用原始套接口做得来,但是之后应该激活网卡获取Ip地址,(让端口在认证前后变成那种图标转动的状态)这个过程曾经试过使用ifconfig eth0 up这种调用来实现,但是经常不成功(在系统中这个命令也不是很好用),而相应的几个系统脚本也不行,至今还要用户来手动点击网络图标很不方便,所以试图直接找到点击网络图标之后调用的函数来直接进行激活
这里当然原本就是为了解决这个问题的,所以如果大侠能帮忙解决这个问题,dev_get就算用不得也没关系啊
回复
deep_pro 2010-10-06
当然是在内核态调用啊 例如写个内核模块什么的
回复
千羽鸣 2010-10-06
[Quote=引用 1 楼 deep_pro 的回复:]
dev_get_by_name是内核api啊,怎么可以这么调用
lz要学的很多
[/Quote]
所以啊,那应该怎么调用才好呢
回复
deep_pro 2010-10-06
dev_get_by_name是内核api啊,怎么可以这么调用
lz要学的很多
回复
相关推荐
发帖
Linux_Kernel
创建于2007-08-27

4152

社区成员

Linux/Unix社区 内核源代码研究区
申请成为版主
帖子事件
创建了帖子
2010-10-06 04:57
社区公告
暂无公告