当前位置:  技术问答>linux和unix

使用netlink实现用户态和内核态通信

    来源: 互联网  发布时间:2017-03-29

    本文导语:  本帖最后由 dengjingen 于 2013-01-14 11:13:04 编辑 我在linux内核中创建netlink和用户态通信,创建函数为nlfd = netlink_kernel_create(&init_net, NL_IMP2, 0, kernel_receive, NULL, THIS_MODULE);但是我编译的时候错误如下:drivers/built-in.o: In ...

本帖最后由 dengjingen 于 2013-01-14 11:13:04 编辑
我在linux内核中创建netlink和用户态通信,创建函数为nlfd = netlink_kernel_create(&init_net, NL_IMP2, 0, kernel_receive, NULL, THIS_MODULE);但是我编译的时候错误如下:drivers/built-in.o: In function `gfar_nl_init':
(.text+0x375ce): undefined reference to `__this_module'
无论是我创建一个模块,或者是加到已有的模块里面初始化都是这个错误。麻烦大虾指点啊。。。

|
你不是通过insmod加入自己的模块而是在修改源码?
那比较麻烦的,因为THIS_MODULE其实指向的是你通过insmod加入的.ko生成的一个struct module结构,这是在init_module()的load_module()实现的


/* This is where the real work happens */
SYSCALL_DEFINE3(init_module, void __user *, umod,
unsigned long, len, const char __user *, uargs)
{
struct module *mod;
int ret = 0;

/* Must have permission */
if (!capable(CAP_SYS_MODULE) || modules_disabled)
return -EPERM;

/* Only one module load at a time, please */
if (mutex_lock_interruptible(&module_mutex) != 0)
return -EINTR;

/* Do all the hard work */
mod = load_module(umod, len, uargs);


修改内核的话你可以试试nlfd = netlink_kernel_create(&init_net, NL_IMP2, 0, kernel_receive, NULL, 0);可能会crash


|
#define THIS_MODULE ((struct module *)0)这里的0是很有艺术的,这里表达相对(struct module *)结构开始的0地址。你可以通过如下来测试:
struct s
{
  char x;
  char y;
};
int main()
{
  struct s test;
  printf ("&test.y=%pn", &test.y);
  printf ("&((struct s *)0)->y=%d", int(&((struct s *)0)->y));
  return 0;
}

    
 
 

您可能感兴趣的文章:

  • docker使用的技术之Container内核原理介绍
  • 关于如何使用内核函数的问题
  • 驱动编译环境的内核版本到底是不是必须和使用环境的内核版本一致?
  • 内核不能使用虚拟内存?
  • 宏内核系统IPC使用的传递机制是什么
  • 内核导出符号是作什么用的??怎么使用?
  • 请问,如何使用绑定在内核中的汉字模块?
  • 新内核源码的使用
  • 使用2.4内核开发linux产品的人还多么?
  • 编译内核的后,我的一个类似USB键盘的HID类设备使用不了了,怎么办?
  • 使用USB光电鼠标,应该怎么编译内核
  • 如何使用已经重新编译好的2.6.9的内核?
  • 编译和使用自己编写的linux内核模块的问题
  • 如何装载使用新编译的内核
  • 大家修改内核时使用哪个编辑器?
  • linux 内核编程中如何使用系统调用函数呢?
  • 我不会安装内核,pci_register_driver不能使用,我也大量发分~~~
  • 纯技术贴开始:如何使用HOOK从内核偷包处理,绕开协议栈?????
  • 升级内核后,usb鼠标不可以使用了,如何解决?
  • 有没有使用最新内核的占用空间较小的linux操作系统
  • linux内核多线程使用那个函数啊?
  • linux-2.6.24下netlink使用问题
  • netlink,中用户使用sendto有什么意义
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • 弱智问题:我们怎么才知道要使用的方法需要实现什么接口才能使用这个方法呢?
  • 使用java jdk中的LinkedHashMap实现简单的LRU算法
  • 请问谁能讲讲使用软件实现的mcu原理。
  • 在Python3中使用urllib实现http的get和post提交数据操作
  • 可不可以在程序中直接使用ftp客户端的函数实现文件传输?
  • 使用libpcap实现抓包程序的步骤及代码示例
  • 如何使用http协议实现流媒体的传输?
  • juqery的python实现:pyquery学习使用教程
  • 使用JavaScript实现的Flash运行环境 Gordon
  • 使用Applet能不能实现基于浏览器的打印呢???
  • 请问使用或安装什么软件能够实现Win2000下访问Linux分区?
  • 急急!!!高分求助,关于实现LINUX软件的使用限制问题
  • 在ACC下不使用循环怎样实现,读取文件指定行的数据.
  • 请教使用openobex库实现蓝牙传输的问题
  • 如何使用shell文件实现linux环境下的挂载功能,具体代码!!
  • HTML标签参考手册 iis7站长之家
  • 怎样在不使用offices产品开启WORD下实现将WORD内容转化为图片的格式
  • python使用循环实现批量创建文件夹示例
  • 使用实现状态栏?
  • 高分求救怎样使用libnet实现TCP的封堵技术!!!!
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • 在测试memset函数的执行效率时,分为使用Cash和不使用Cash辆种方式,该如何控制是否使用缓存?
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 求ibm6000的中文使用手册 !从来没用过服务器,现在急需使用它,不知如何使用! 急!!!!!
  • Python不使用print而直接输出二进制字符串
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • Office 2010 Module模式下使用VBA Addressof
  • 急求结果!!假设一个有两个元素的信号量集S,表示了一个磁带驱动器系统,其中进程1使用磁带机A,进程2同时使用磁带机A和B,进程3使用磁带机B。
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • c#中SAPI使用总结——SpVoice的使用方法


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,