
Linux内核
文章平均质量分 65
ronliu
这个作者很懒,什么都没留下…
展开
-
Linux内核学习计划
参考资料:1. 《深入理解Linux内核》2. linux kernel 2.6.31源代码 按照主题的形式组织文章,围绕具体的问题写作 包括以下内容:1. 从ioctl和system两个系统调用开始,学习系统调用的参数传递、出错处理、内核态与用户态的切换2. Linux中的汇编语言3. I/O体系结构及设备驱动程序4. 从socket和open两个系统调用原创 2009-09-29 00:01:00 · 394 阅读 · 0 评论 -
模块 list hash
这些代码片段展示如何使用linux内核模块,list,以及hash===================tccounter.c=====================#include #include #include #include #include #include #include #include MODULE_LICENSE("GPL");原创 2010-01-15 21:37:00 · 666 阅读 · 0 评论 -
如何在kernel中调用module的函数
为什么要在内核中调用模块的函数? linux解决方案提供商在发布代码时,可能希望将某些核心代码以二进制(对于内核,就是ko文件)的模块发布,然后在内核中调用模块的函数,以保护其知识产权。 模块调用内核的函数是很容易的,在内核EXPORT_SYMBOL函数,并包含相关的头文件,直接调用即可。但反过来,在内核中调用模块的函数则不太容易。即使包含相关头文件,编译通原创 2010-02-27 17:01:00 · 1836 阅读 · 1 评论 -
container_of宏
<br />#include <stdio.h><br />#include <stdlib.h><br />#include <stddef.h><br />#define container_of(ptr, type, member) ({ /<br /> const typeof( ((type *)0)->member ) *__mptr = (ptr); /<br /> (type *)( (char *)__mptr - offse原创 2010-09-10 07:06:00 · 343 阅读 · 0 评论 -
内核数据结构:hlist_head
内核中,使用list_head作为链表,该数据结构本身即使head又是node。如果将它作为hash list的头节点,那么每个头节点会占用8个字节。因此内核中对其优化,使用hlist_head作为hash表的头节点。内核中定义其数据结构为: struct hlist_head { struct hlist_node *first; }; struct hlist_node { struct hlist_node *next, **pprev; }; 注意到原创 2011-05-16 20:58:00 · 4543 阅读 · 1 评论 -
内核数据结构:红黑树(设计)
何为红黑树? 红黑树是一种具备较好平衡性的二叉搜索树,用于存储键值对类型的数据。 1. 所谓较好平衡性,是指该二叉树的任何一个子节点,其左右子树的高度都相近。从而在搜索/插入/删除节点的时候都有较高的效率。为保证这一特性,约定红黑树具有以下性质: 性质1. 节点是红色或黑色。 性质2. 根是黑色。 性质3 每个叶节点是黑色的。 性质4 每个红色节点的两个子节点都是原创 2011-05-18 21:11:00 · 1882 阅读 · 0 评论 -
使用ftrace学习linux内核
linux中大量使用函数指针钩子,导致阅读代码困难。比如想知道一个函数的调用路径,那么就只能用source insight之类的工具看代码了。有没有办法可以迅速获得调用关系的整体印象?ftrace是内核提供的一种调试工具,可以对内核中发生的事情进行跟踪。比如函数的调用,进程的切换,中断的开关等等。这里利用这个工具来跟踪函数的调用。 # cat /boot/config-2.6.36 | grep FTRACE CONFIG_HAVE_FTRACE_NMI_ENTER=y CONFIG_HAV原创 2011-05-25 23:40:00 · 3595 阅读 · 0 评论 -
linux的NAPI方法收包
NAPI和传统收包方法的区别是:NAPI可以进一次中断收很多次的包,但是传统方法进一次中断后将包放到local cpu的softnet_data的input_queue,之后就退出中断。 一、传统方法 进入处理程序后,首先从物理设备中将数据分组拷贝到内原创 2011-09-25 19:41:22 · 4945 阅读 · 1 评论 -
Linux下开发环境配置
核心思路:1. 使用数据库缓存,加速常用操作。2. 在vim中根据环境变量加载相应工程的各种符号数据库。 1,自定义shell命令,准备工程的环境变量。本地有多个代码目录,需要切换工程,可将如下语句添加到.bashrc中,路径自定义,命令名称自定义。这些环境变量,主要是给vim准备的。alias cdsyn="export PRJTOP=~/code1/share/MT6795_SYNC ; ex原创 2014-12-13 15:38:05 · 153 阅读 · 0 评论