
linux内核
文章平均质量分 67
macrossdzh
这个作者很懒,什么都没留下…
展开
-
/usr/src/linux/inlcude/linux 与 /usr/include/linux的区别和联系
1./usr/include/linux和/usr/src/linux/include/linux下的文件数不同,文件夹数也不同。例如/usr/include/linux没有mosules文件夹,而/usr/src/linux/include/linux有此文件夹。 /usr/src/linux/include/linux是给编译内核用的 /usr/include/转载 2009-08-27 09:43:00 · 4615 阅读 · 0 评论 -
IPv6实现--传入包的处理流程(1)
IPv6中数据包的接收处理流程在一个IPSEC包进入到网络层调用~/net/ipv6/ip6_input.c中的ipv6_rcv()函数,然后进入第一个钩子NF_HOOK(PF_INET6, NF_INET_PRE_ROUTING, skb, dev, NULL,ip6_rcv_finish);对于NF_HOOK的作用解释是, 如果没有配置netfilter,可以简单认为NF_HOOK就等原创 2010-03-09 15:41:00 · 4538 阅读 · 4 评论 -
IPv6实现--转发包的处理流程(2)
进入第一个钩子NF_HOOK(PF_INET6, NF_INET_PRE_ROUTING, skb, dev, NULL,ip6_rcv_finish)后,ip6_rcv_finish()将调用下列3个函数之一:ip6_input()、ip6_mc_input()、ip6_forward()。当IPv6包必须要转发的时候,ip6_rcv_finish()函数调用ipv6_forward()原创 2010-03-09 16:36:00 · 5438 阅读 · 0 评论 -
几个宏的区别
最看内核网络相关的资料,有几个宏总是混在一起,NF_IP_PRE_ROUTING(或NF_IP6_PRE_ROUTING)、NF_IP_PRE_ROUTING,另外还有《linux网络体系结构》ipv6那部分中提到的IP_PRE_ROUTING,这个结构在我的2.6.28内核中没有搜到,估计是这本书编写的较早,名称改换了在~/include/linux/netfilter_ipv4原创 2010-03-09 21:33:00 · 1766 阅读 · 0 评论 -
Linux 网络系统学习 IPv6 的初始化(详细而全面)
转自:http://blog.youkuaiyun.com/rstevens/archive/2007/04/10/1559289.aspx 1. 网络子系统1.1. 网络子系统概述 Linux 内核中,与网络相关的代码是一个相对独立的子系统,称为网络子系统。网络转载 2010-03-16 09:34:00 · 2759 阅读 · 0 评论 -
内核中struct sk_buff结构分析
struct sk_buff可能是linux网络代码中最重要的数据结构,它表示接收或发送数据包的包头信息,并包含很多成员变量供网络代码中的各子系统使用。 这个结构被网络的不同层(MAC或者其他二层链路协议,三层的IP,四层的TCP或UDP等)使用,并且其中的成员变量在结构从一层向另一层传递时改变。 L4向L3传递前会添加一个L4的头部,同样,L3向L2传递前,会添加一个L3的头部。添加头部比在不同原创 2010-04-01 16:00:00 · 2343 阅读 · 0 评论 -
内核中的kmalloc函数详解
一、kmalloc函数详解#include void *kmalloc(size_t size, int flags);给 kmalloc 的第一个参数是要分配的块的大小. 第 2 个参数, 分配标志, 非常有趣, 因为它以几个方式控制 kmalloc 的行为.最一般使用的标志, GFP_KERNEL, 意思是这个分配((内部最终通过调用 __get_free_pages原创 2010-05-27 09:59:00 · 36759 阅读 · 0 评论 -
spin_lock_bh()与spin_unlock_bh()
<br />spin_lock_bh通常用在进程中,用来禁止抢断和禁止软中断。<br /> <br />spin_lock_bh()中首先会调用local_bh_disable()禁止当前CPU的软件中断。而函数spin_unlock_bh()则调用local_bh_enable()来势能本地CPU的软件中断。在软件中断被禁止的时候,本地CPU的所有软中断都不会被执行。<br /> <br />如果一个softirq 与 用户上下文共享数据,就有两个问题:首先,当前的用户上下文可能被softirq中断;其次原创 2010-10-26 22:36:00 · 31451 阅读 · 1 评论 -
一些Linux内核中的常用术语
<br />抢占,preemption<br />在2.5内核之前,或编译时CONFIG_PREEMPT未打开,内核中用户上下文的进程不会彼<br />此抢占(亦即:只要你占有CPU,你就一直占有,直到自己放弃或者发生硬件中断)。<br />在2.5.4以后且打开了CONFIG_PREEMPT,事情改变了:在用户上下文,更高优先级的<br />任务可以抢占当前任务:自旋锁为此改写,以添加禁止抢占的效果,即使在UP上也是<br />如此。<br /><br />bh<br />下半部:由于历史原因,带有'_b原创 2010-10-26 22:38:00 · 1576 阅读 · 0 评论 -
skbuff.h文件中NET_SKBUFF_DATA_USES_OFFSET宏的含义
找到NET_SKBUFF_DATA_USES_OFFSET定义的地方,文件include/linux/skbuff.h#if BITS_PER_LONG > 32#define NET_SKBUFF_DATA_USES_OFFSET 1#endif出现使用NET_SKBUFF_DATA_USES_OFFSET 的地方,如:#ifdef NET_SKBUFF_DATA_USE原创 2010-03-09 11:25:00 · 3445 阅读 · 0 评论 -
内核中的likely和unlikely宏的使用
在内核代码中经常会看到unlikely和likely的踪影。他们实际上是定义在 linux/compiler.h 中的两个宏。 #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) 这里的__built_expect()函数是gcc的內建函数。转载 2010-03-08 12:40:00 · 1624 阅读 · 0 评论 -
内核中修饰的函数的__init的含义
例子如:void __init xfrm_state_init(void)其实最常见的莫过于linux内核中用于模块初始化的函数,如用于SCTP模块初始化的函数:SCTP_STATIC __init int sctp_init(void)__init的定义:#define __init __section(.init.text) __cold在includ原创 2010-03-08 10:22:00 · 2812 阅读 · 0 评论 -
netlink学习笔记(一)
最近在学习netlink相关的东西,现在还没找到特别好的书,学习的资料主要来自网络,今天主要参考以下三个:http://linux.chinaunix.net/bbs/thread-1031932-1-1.htmlhttp://prolqspace.spaces.live.com/blog/cns!7240DE3B63F5B841!939.entryhttp://enche转载 2009-08-28 09:14:00 · 16439 阅读 · 2 评论 -
netlink学习笔记(二)
1、netlink_kernel_create()函数分析/* * We export these functions to other modules. They provide a * complete set of kernel non-blocking support for message * queueing. */struct s原创 2009-09-01 08:50:00 · 3688 阅读 · 0 评论 -
内核编程中的EXPORT_SYMBOL
转载自maypeng.cublog.cn EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,不用修改内核代码就可以在您的内核模块中直接调用,即使用EXPORT_SYMBOL可以将一个函数以符号的方式导出给其他模块使用。您还可以手工修改内核源代码来导出另外的函数,用于重新编译并加载新内核后的测试。Linux symbol export meth转载 2009-09-15 18:01:00 · 6379 阅读 · 0 评论 -
谈EXPORT_SYMBOL使用
EXPORT_SYMBOL只出现在2.6内核中,在2.4内核默认的非static 函数和变量都会自动导入到kernel 空间的, 都不用EXPORT_SYMBOL() 做标记的。2.6就必须用EXPORT_SYMBOL() 来导出来(因为2.6默认不到处所有的符号)。 1、EXPORT_SYMBOL的作用是什么?EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,原创 2009-09-27 17:15:00 · 50288 阅读 · 5 评论 -
内核中的hash和bucket
哈希表(Hashtable)又称为“散置”,Hashtable是会根据索引键的哈希程序代码组织成的索引键(Key)和值(Value)配对的集合。Hashtable 对象是由包含集合中元素的哈希桶(Bucket)所组成的。而Bucket是Hashtable内元素的虚拟子群组,可以让大部分集合中的搜寻和获取工作更容易、更快速。 哈希函数(Hash Function)为根据索引键来返回数值哈原创 2009-10-19 20:03:00 · 3311 阅读 · 3 评论 -
Linux TCP/IP协议栈的通用编码模式
转自:http://blog.chinaunix.net/u/26185/showart_475934.html 和其他内核功能一样,每个网络功能都是内核成员中的一个。因此,它必须合理且公平的使用内存,CPU和其他共享资源。绝大多数功能并非内核中一段独立的程序,而是根据该功能而或多或少的与内核中其他部分相互影响。因此它们总是试图,尽可能的,使用类似的体系结构来实现类似的转载 2009-10-19 20:31:00 · 1050 阅读 · 0 评论 -
内核IPSec代码中xfrm_input.c中关于kmem_cache_alloc的使用分析
基本知识:在内核编程中,可能经常会有一些数据结构需要反复使用和释放,按照通常的思路,可能是使用kmalloc和kfree来实现。但是这种方式效率不高,Linux为我们提供了更加高效的方法——Slab高速缓存管理器。动态创建固定大小的内存对象,虽然kmalloc的时间复杂度并不大,但是联系到空间复杂度,还是采用kmem_cache_alloc的好;而非固定大小的内存申请,只能经由km原创 2010-03-07 10:31:00 · 1639 阅读 · 0 评论 -
内核中的spin_lock
我们知道现在 Linux 已经有支持 SMP,也就是可以使用多颗 CPU来加快系统的速度,如果当我们在修改重要的资料结构时,将执行修改工作的 CPU 中断 disable 掉的话,只有目前的这个 CPU的执行不会被中断,在 SMP 环境下,还有别的 CPU 正同时运作,如果别的 CPU 也去修改这个资料结构的话,就会造成同时有两个 CPU在修改它,不稳定性就会产生。解决方法是将原创 2010-03-07 20:17:00 · 839 阅读 · 0 评论 -
如何在Linux内核中为IPv6添加一种新的扩展头
<br />IPv6头部的设计是一个简洁的基本头部后面根据需要加上多种不同类型的扩展头部,这种设计可以将不常用的功能通过选择性的添加不同的扩展头部实现,从而在保证了基本头部的简洁和处理的快速性。以Linux2.6.28版本内核为例,IPv6扩展首部的定义在linux-2.6.28/include/linux/in6.h和linux-2.6.28/include/net/ipv6.h两个目录下,我们以添加一种IPPROTO_MY类型的扩展头为例:<br /> <br />1、在头文件中添加新类型扩展头的定义,原创 2010-12-23 17:44:00 · 4257 阅读 · 0 评论