共 16 篇文章 |
|
其中的Qdisc_class_ops用于对此Qdisc的filterlist进行操作,添加删除等,通过对Qdisc添加fliter,而filter对enqueue到此Qdisc的pkt进行分类,从而归类到此Qdisc的子class中,而每个子class都有自己的Qdisc进行pktqueue的管理,因此实现一个树形的filter结构,当然可以多个filter将pkt分到同一个子class中,但对于根Qdisc和其下的子class的Qdisc... 阅318 转1 评0 公众公开 14-11-10 16:01 |
阅652 转5 评0 公众公开 14-10-16 11:53 |
#define NLMSG_NEXT(nlh,len)((len) -= NLMSG_ALIGN((nlh)->nlmsg_len), (struct nlmsghdr*)(((char*)(nlh)) + NLMSG_ALIGN((nlh)->nlmsg_len)))//宏NLMSG_NEXT(nlh,len)用于得到下一个消息的首地址,同时len也减少为剩余消息的总长度,该宏一般在一个消息被分成几个部分发送或接收时使用。#define NLMSG_PAYLOAD(nlh,len) ((nlh)->... 阅314 转0 评0 公众公开 14-10-16 11:48 |
如何将多个源文件编译为一个.ko.陆陆续续也写了几个Linux内核模块了,但每次都是把代码写在一个源文件中,上次尝试了写在两个.c文件中,结果没有编译通过。无奈之下,将其中一个.c文件重命名成.h文件,再include当另一个当中。整理自己的源文件成两个.c文件(simpLB.c和sahu_lb_tools.c)、一个.h文件(sahu_lb.h)和Makefile文件。两个.c文件都... 阅1858 转3 评0 公众公开 14-10-16 11:30 |
linux下wifi编程(基于netlink和nl80211.h)用户程序通过netlink机制,将这些API函数索引和对应的参数封装到netlink的帧中,发送给内核,内核解析netlink帧后,读取帧中的内容,就知道用户需要调用哪个函数,以及该函数的参数,完成内核功能调用。genlmsg_put(msg, 0, 0, state->nl80211_id, 0, //往刚生成的帧中填充头部... 阅4329 转9 评0 公众公开 14-10-15 17:40 |
kernel thread简单使用。} static __init int init_hello_kernel_thread(void) { int ret;ret=kernel_thread(example_kernel_thread, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD );} static __exit void cleanup_hello_kernel_thread(void) { printk(KERN_WARNING... 阅200 转1 评0 公众公开 14-10-15 17:40 |
可我搞不明白,为何不直接用ndiswrapper来安装Windows的驱动程序呢,而非要把Windows的驱动移植到Linux,最终不伦不类的...ndiswrapper是什么?这怎么可能呢,其实很简单,ndiswrapper就是为Windows驱动程序构造了一个“家园”,一个基本的运行环境,满足Windows驱动的各类调用,这个环境分为两类,第一类就是Windows的内核基本环境,第二类就... 阅690 转2 评0 公众公开 14-08-28 15:11 |
long sys_init_module(const char *name_user, struct module *mod_user);NAME init_module - initialize a loadable module entrySYNOPSIS #include <linux/module.h> int init_module(const char *name, struct module *image);static int init_module(const char *m_name, struct obj_file *f, unsigned long m_size, const char *blo... 阅143 转0 评0 公众公开 14-03-22 15:53 |
[转贴]Linux网络驱动程序。一.Linux系统设备驱动程序概述 1.1 Linux设备驱动程序分类 1.2 编写驱动程序的一些基本概念 二.Linux系统网络设备驱动程序 2.1 网络驱动程序的结构 2.2 网络驱动程序的基本方法 2.3 网络驱动程序中用到的数据结构 2.4 常用的系统支持 三.编写Linux网络驱动程序中可能遇到的问题 3.1 中断共享 3.2 硬件发送忙时的处理 ... 阅28 转0 评0 公众公开 14-01-23 19:36 |
若使用动态分配,则需要进行初始化:void cdev_init(struct cdev *cdev, const struct file_operations *fops) ,mem_cdev.owner = THIS_MODULE;若动态内存定义初始化:struct cdev *mem_cdev = cdev_alloc(); mem_cdev->ops = &fops; mem_cdev->owner = THIS_MODULE.int cdev_add(struct cdev *p, dev_t dev,unsigned count)s... 阅1335 转5 评0 公众公开 14-01-23 19:29 |