
内核编程
会飞的幸运儿
这个作者很懒,什么都没留下…
展开
-
内核开发-hello(1)
1.第一个模块 hello.c: #include #include #include static int __init hello_init( void ){ printk(KERN_ALERT "Hello World ! " ); return 0; } static void __exit hello_exit(void){原创 2015-01-08 16:29:20 · 413 阅读 · 0 评论 -
netfilter(1)
本文参考了http://blog.chinaunix.net/uid-23069658-id-3160506.html和http://blog.chinaunix.net/uid-23069658-id-3163999.html作者的思想,对最近的工作做个梳理。 1.大致模型: 2.上图中涉及到的上层协议,应该是网络层及以上,下图为内核和用户空间的交互大致过程: 3.内核中默转载 2015-02-01 16:06:53 · 436 阅读 · 0 评论 -
netfilter(2)-iptables
iptables基本原理: 通过向防火墙提供有关对来自某个源、到某个目的地或具有特定协议类型的信息包要做些什么的指令,规则控制信息包的过滤。通过使用Netfilter/iptables系统提供的特殊命令iptables,建立这些规则,并将其添加到内核空间的特定信息包过滤表内的链中。关于添加/除去/编辑规则的命令的一般语法如下: iptables [-t table] comma原创 2015-02-01 21:02:57 · 444 阅读 · 0 评论 -
定位内核代码错误(1)
什么是Oops?从语言学的角度说,Oops应该是一个拟声词。当出了点小事故,或者做了比较尴尬的事之后,你可以说"Oops",翻译成中国话就叫做“哎呦”。“哎呦,对不起,对不起,我真不是故意打碎您的杯子的”。看,Oops就是这个意思。 在Linux内核开发中的Oops是什么呢?其实,它和上面的解释也没什么本质的差别,只不过说话的主角变成了Linux。当某些比较致命的问题出现时,我们转载 2015-01-18 20:24:31 · 851 阅读 · 0 评论 -
netlink(1)
Netlink在2.6版本的内核中变化也是很大的,在最新的2.6.37内核中,其定义已经改成下面这种形式,传递的参数已经达到6个。其中第一个参数和mutex参数都是最新添加的。Mutex也可以为空。这里主要是关于内核空间中的netlink函数的使用。 extern struct sock *netlink_kernel_create(struct net *net,转载 2015-01-18 20:43:52 · 461 阅读 · 0 评论 -
netfilter(3)-iptables
PREROUTING: 位于 nat 表,用于修改目的地址(DNAT) POSTROUTING:位于 nat 表,用于修改源地址 (SNAT) 1、 -j SNAT 注意:【系统在路由及过虑等处理直到数据包要被送出时才进行SNAT】 (有一种SNAT的特殊情况是ip欺骗,也就是所谓的Masquerading,通常建议在使用拨号上网的时候使用,或者说在合法ip地址不固定的情况原创 2015-02-03 22:23:46 · 369 阅读 · 0 评论 -
工作队列(2)
完整的实例来演示工作队列: #include #include #include #include #include #include // 定义一个工作队列指针 static struct workqueue_struct *my_wq; // 为了传递数据,在work_struct结构体外又包含了一个结构体,可以通过结构体指针实现多态 // wor原创 2015-01-18 20:04:27 · 474 阅读 · 0 评论 -
工作队列(1)
概况: 1.create_workqueue 用于创建一个workqueue队列,为系统中的每个CPU都创建一个内核线程。 输入参数: @name:workqueue的名称 2.create_singlethread_workqueue 用于创建workqueue,只创建一个内核线程。 输入参数: @name:workqueue名称 3.destroy_workq原创 2015-01-18 18:34:45 · 451 阅读 · 0 评论