I think load() method is better as far as usage is concerned because you can easily place your DLL in any directory.
——————————————————————————————————————————
解决用户态与内核态交涉问题 ,以后再整理一篇博客出来
基本原理:
iptable好像走的是
sockfd=socket(AF_INET, SOCK_RAW, IPPROTO_RAW)
setsockopt(sockfd, IPPROTO_IP, ......)
ip_setsockopt 如果发现不在范围的选项,可能会调用nf_setsockopt
而后者就会检查nf_register_sockopt注册的了
如果level 不是 SOL_SOCKET这个的话,应该就调用sock->ops->setsockopt()吧,这个地方没找到在初始化。
按照版主的说法,应该在这个里面实现选项的查找,然后没有查找到的话,调用nf_setsockopt
设计基本定下用netlink实现用户态到内核态的即时通讯了.
今天在公司基本看了一天的netlink,因为没环境,所以得晚上回来弄,后来发现2.6.24内核版本后做了改动,主要还是再create上面,把以前用while控制的读取消息队列,该成了自动绑定```
刚弄完内核模块的任务,明天看看用户态的实现,今天也是晚上睡了会,所以很晚才弄,接触过这么久的linux,这次才真正感觉弄了点实质的东西,呵呵```` 毕业设计估计老师望着我急,我也只能望着他干瞪眼了``
我的小乖乖开始通讯了:ICMP网络层抓截取数据包实现如下

关于自旋锁:
自旋锁最多只能被一个可执行线程持有。自旋锁不会引起调用者睡眠,如果一个执行线程试图获得一个已经被持有的自旋锁,那么线程就会一直进行忙循环,一直等待下去,在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。
由于自旋锁使用者一般保持锁时间非常短,因此选择自旋而不是睡眠是非常必要的,自旋锁的效率远高于互斥锁。
信号量和读写信号量适合于保持时间较长的情况,它们会导致调用者睡眠,因此只能在进 程上下文使用(_trylock的变种能够在中断上下文使用);而自旋锁适合于保持时间非常短的情况,因为一个被争用的自旋锁使得请求它的线程在等待重新 可用时自旋,特别浪费处理时间,这是自旋锁的要害之处,所以自旋锁不应该被长时间持有。
**
**
关于与内核通讯小结:
方式:bootloader,sysfs,sysctl,系统调用,netlink,procfs,seq_file,debugfs,relayfs
**
bootloader
内核启动参数方式是单向的,即只能向内核传递,而不能从内核获取,并且它是启动时候为内核传递参数,正因为这个存在,用户态才可以在系统启动时候为操作系统设置环境了.
这种方式可以加载到新内核中了.
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/string.h>
#define MAX_SIZE 5
static int setup_example_int;
static int setup_example_int_array[MAX_SIZE];
static char setup_example_string[16];
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-36628-8.html
我要是伊拉克总统
炮位没有及时更换