linux内核杂文
文章平均质量分 63
无为和尚
应无所住 而生其心
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
hotplug
英语我是很烂的,但是不练就提不高。请大家将就下,并提出意见。谢谢。hotplug.txt内容:LINUX热插拔在USB之类支持热插拔的总线上,上电后的设备将被注册在总线上。很多时候,用户想要设备能立即可用,这意思是说系统需要做一些事情,包括:1。查找一个驱动能与设备相匹配,包括加载内核模块,新的驱动能使用 modeule-init-tools 支持用户正常使用。2。将设备与驱动绑定。总原创 2009-08-01 00:05:00 · 4664 阅读 · 0 评论 -
将Centos5.4内核升级到2.6.38.5
Inux内核升级是学习内核的基本条件。如果自已编译的内核跑不起来,那谈linux内核学习就是镜花水月了。其实网上有很多相关的内核编译升级教程。我这个纯粹是多余的,但是为什么很多同志升级还是老失败呢?其实网上有很多教程,撞到相关的问题问一下google或百度就基本是可以解决的。虽然网上的解决方法很多时候不是很好,但是要编译成功并运行起来是没有太大问题的。好了,言归正传,把我的方法奉献给大家吧。首先我的linux是centos5.4版的,内核版本是2.6.18。其实linux内核的学习和linux发行版的关系不原创 2011-05-09 20:11:00 · 8558 阅读 · 4 评论 -
linux内核中platform框架中的一个小技巧
先给出函数原型:struct platform_device *platform_device_alloc(const char *name, int id){ struct platform_object *pa; pa = kzalloc(sizeof(struct platform_object) + strlen(name), GFP_KERNEL); if (pa) { strcpy(pa->name, name); pa->pdev.name = pa->name; pa->pdev.id原创 2011-04-29 21:59:00 · 2807 阅读 · 8 评论 -
Linux内核LED模块分析(一)
应群里几位聊的好的哥们的邀请,要我分析一个内核模块。我后面就选了LED模块分析,LED模块分析不算难,但要说清楚其实还是很挑战的。今天俺的文章被推荐到首页了。挺有成就感的。我的文章虽然不登大雅之堂,但只要能给到大家一起指点,哪怕就一点点我就心满意足了。好了,闲话不多说了,开始我们的linux内核之旅吧。这一节是应群里几位兄弟的要求讲LED模块,我稍微看了一下,就挑了一个最软的柿子来捏。怎么样挑到一个最软的柿子呢?首先我们在分析这个模块之前第一件事就是想办法缩小范围,如果不缩小范围,你我的精力都是不够的,可能原创 2011-04-28 10:02:00 · 7020 阅读 · 4 评论 -
linux双向链表分析之list_del中的技巧
linux内核的双向链表是比较经典的东西,网上分析链表的同志基本分析了99%,就差了1%。那就是list_del函数。先给出函数原型:static inline void list_del(struct list_head *entry){ __list_del(entry->prev, entry->next); entry->next = LIST_POISON1; entry->prev = LIST_POISON2;}集中体现在 entry->next = LIST_POISON1;entry->p原创 2011-04-28 18:55:00 · 8228 阅读 · 0 评论 -
Linux内核LED模块分析(二)
<br />Linux内核LED模块分析(二)<br />上次分析到那里后,还是有些同志说看不懂,那我就继续分析一把我认为不需要继续分析的东西吧。上回分析了<br />led_cdev和trigger的关系后就没有继续说了。有同志还是没明白怎么调用的。干活的函数是:<br />static void led_heartbeat_function(unsigned long data)<br />{<br /> struct led_classdev *led_cdev = (struct led_class原创 2011-04-28 14:49:00 · 2647 阅读 · 1 评论 -
netfilter框架分析
<br />本来是不打算写这种基础性的东西的,但是有很多同志经常问我(有同事也有网友)。所以就写一下吧,这个是理解LINUX内核网络子系统的基础,ip conntrack等都是依赖这些基础的。好的,闲话不多说了。来正文。<br />其实netfilter就是依靠一个全局的二维数组nf_hooks[][].可以把这个玩意看成一个8*32的矩阵。矩阵的每个成员就是一个双向链表节点。看看,又是双向链表,内核中双向链表的地位真的太重要了。以双向链表做骨架串起nf_hook_ops这个结构体。然后在运行时在挂HOOK原创 2011-04-23 18:06:00 · 3329 阅读 · 0 评论 -
linux内核代码阅读的几个技巧
<br />这些技巧都是平时我自已在阅读的时候总结的,想到哪就说到哪了,其实我总结的技巧远不止这些,但是先说这些吧。后面想到了再补充,只有在拿到代码做分析的时候遇到实际的问题时,才能见招拆招,想些办法。<br />其实linux内核源码还是比较难跟踪的,我刚开始阅读内核源码的时候,感觉很多东西经常找着找着就失去头绪了,很郁闷。<br />通过一些阅读后发现内核也就那么几招用的比较多,摸清楚其脾气后,剩下的就是耐心了。<br />1.我曾经用过一阵VI,装了一堆插件后折腾了一阵,发现还是无法感受其推崇者所说的原创 2011-04-25 21:02:00 · 19989 阅读 · 35 评论 -
双向链表在内核中的超然地位
玩过内核的人都知道,linux内核中的链表是比较有特色的。利用一个container_of宏来实现数据包含链表,不可谓不精妙。(如果不知道的同志改快上网看看)为什么linux内核要用到链表更多的双向链表,为什么不用单向链表。这是因为双向链表的灵活性,两边都有指针域,更方便删除。有的同志可能会说只要存了单向链表上一步的指针,一样可以删,双向链表没必要。还是那句话,请先看看linux内核中的代码,再来评论。以linux内核中的SKB为例。在传入的时候传的是SKB的指针,传的不是链表,为什么不用链表?因为SKB才原创 2011-04-18 21:34:00 · 2512 阅读 · 1 评论 -
如果没有typeof,内核将会怎样?
<br />一直都觉得双向链表在内核中非常重要。<br />双向链表最主要的就是用了container_of这个宏。<br />而container_of又是建立在typeof的基础之上的。<br />没有typeof,就没有container_of,双向链表,就没有max,mix这些宏,就没有...<br />linux内核将typeof已经发挥到极致了。<br />container_of中包含的面向对象的思想。<br />min,max包含的泛型设计的思想。<br />C++所推崇的两大思想在linu原创 2011-05-27 12:41:00 · 7487 阅读 · 4 评论 -
linux反汇编旁门左道小技巧一则
<br />我个是我自已在开发过程中发现的一个小技巧。不算什么牛X的技巧。只是帖出来大家一起欣赏一下而已。权当一道小菜吧。<br /><br />gdb反汇编调试技巧<br />在linux下很多时候我们需要反汇编我们的源码,然后根据所得到的信息(例如相关的寄存器)进一步定位问题所在。这时候我们很多时间用objdump或者直接用gdb。在用gdb的情况下可以对可疑的函数采用disassemble funcname来反汇编对应的funcname函数。但如果在对汇编不是很熟的情况下我们通常不容易将源码与对应的汇原创 2011-04-01 22:51:00 · 4168 阅读 · 3 评论 -
linux内核里的工作队列及内核通知链
<br />看懂后总结了一下,其实就两句话:<br />工作队列初始化就是开启一个内核线程,然后内核线程会将你注册在链表上的动作(函数)按顺序执行,执行完后将函数从链表上移除。<br />内核通知链其实就是一个回调函数链。你首先需要将你要执行的动作注册到链表上。然后在一个地方call通知链的时候,CALL函数就会将链上注册的函数顺序执行一遍。再CALL一次就再执行一次。原创 2011-04-01 22:29:00 · 1712 阅读 · 6 评论 -
ip conntrack整体框图
<br />花了三个小时画的一个图。献给大家做为愚人节的礼物。呵呵。<br /> <br /> <br /> <br /> <br /> <br />原创 2011-04-01 22:18:00 · 1874 阅读 · 1 评论 -
Linux内核中的klist分析
Linux内核中的klist分析 分析的内核版本照样是2.6.38.5。Linux内核中的klist是在神级的双向链表上扩展而形成的。先给出一个图。很清晰也很简单。先说表头:K_lock:是一把锁,用来锁表的。这个就不多啰嗦了。k_list:双向链表,用来联系各节点及链表头。get、put:两个函数指针,是用来操作链表中的节点接口。再说节点:n_klist是一个空指针,随便用来指啥,但在我们的klist原语中是用来指向链表头的。另外其最低位用来做标志位。n_node:双向链表,用来联系各节点及原创 2011-05-13 14:23:00 · 14695 阅读 · 4 评论 -
Linux内核大讲堂 (一) 设备驱动的基石驱动模型(4)
今天又升级了最新版内核2.6.38.5,编了一下,我之前写的几个模块都可以用,看来这一块没有太大差异。顺便把内核升级写了一个相关的文档。大家如果没升级过内核的可以参考一下:http://blog.youkuaiyun.com/z2007b/archive/2011/05/09/6407458.aspx 。好了。上节我们用最直观的方式知道了kobject_create_and_add("wwhs_drvmode",NULL)这个函数做了些什么事。那kset呢?经过我们在最前面两小节的分析可以知道kset_register原创 2011-05-10 00:08:00 · 19050 阅读 · 28 评论 -
Linux内核中的的原子变量分析
Linux内核中的的原子变量分析Linux内核中有几个东西是比较常见的,原子变量就是其中之一。其实之前我也没有专门去折腾过这些东西,毕竟就那么几行代码,只要知道这个意思就行了。也就仅限于知道有一条汇编指令叫lock。用这个可以保证数据操作的原子性。但前几天因为某些原因翻了一下RCU的代码,RCU的代码在指针赋值的时候并未lock。所以有些奇怪。经过一翻折腾,终于有了一些答案。现写出来与大家一起原创 2011-12-02 23:36:39 · 9800 阅读 · 0 评论
分享