自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

专治各种不服

无为和尚

  • 博客(43)
  • 资源 (2)
  • 收藏
  • 关注

原创 Linux内核大讲堂 (三) 督脉之虚拟文件系统(1)

Linux内核大讲堂 (三)督脉之虚拟文件系统(1)在上一节内核大讲堂 (二)传说中的字符设备(4)>>中我们略微跟了一下文件系统相关的代码,虽然跟的不多,但是总算和虚拟文件系统和ext3打了个招呼。接下来就要专门讲文件系统了。文件系统也是分层的,简单来说分两大层。上层是虚拟文件系统,显然下层就是非虚拟文件系统了,就是“实际”的文件系统。什么才算实际?呵呵。高中学过反证法,这时候你就感

2012-06-04 22:24:40 6412 1

原创 今年过年,我回家了

当年刚进大学时,爷老子送我,临走时,娘老子哭了,我一脸不耐烦。毕业后上班了,外公逝世时,我回家了,临走时,娘老子哭了,我抱着她安慰说,一切放心。今年过年,我回家了,临走时,爷老子,娘老子和我三个人抱着哭成一团。明年?...

2012-01-28 20:49:46 6179

原创 避免当野monkey, 走野路子

一直都想写点“深”层次的东西,总停留在代码层面确实不够腕,当然啦,我也不是什么腕。^_^上面这些都可以当个笑话,但其实也是有一定意义的,最少细心的人会想到我要表达的思想:只停留在代码层面的不是腕。是的,我是这么认为的。但至于什么才算是腕,这个我真不知道。因为我目前也不是腕,所以没法对一个压根不了解的东西做总结。既然不是腕那我们就还是回到代码的层面讨论吧。我只想说一句:千万不要走野路

2011-12-18 22:58:42 14199 25

原创 Linux内核中的的原子变量分析

Linux内核中的的原子变量分析Linux内核中有几个东西是比较常见的,原子变量就是其中之一。其实之前我也没有专门去折腾过这些东西,毕竟就那么几行代码,只要知道这个意思就行了。也就仅限于知道有一条汇编指令叫lock。用这个可以保证数据操作的原子性。但前几天因为某些原因翻了一下RCU的代码,RCU的代码在指针赋值的时候并未lock。所以有些奇怪。经过一翻折腾,终于有了一些答案。现写出来与大家一起

2011-12-02 23:36:39 9701

原创 关于系统设计的一点小心得

最近接连开发了两个独立的小系统,虽然累的够呛,但还算有点心得。紧密度的开发两个小系统,非常容易在后发第二个系统的时候与第一个系统做比较。抽出两者的开发过程中的共性。经过抽象发现最重要的几点:1.根据业务量身定制数据结构是最重要的。而在需求尚不是非常明确之前,数据结构大的架子不宜设计的过于精细。比如我们可能会用到多维树,可能第一维的数据只需要一个int型就可以搞定,但这时候千W不要就

2011-11-18 22:19:55 6489 2

原创 闲着没事测了一下memcpy

前阵的时候领导提出要对memcpy做一个测试。也没有交代具体的细节。我就直接自已写了个常规memcpy,然后再把内核的__memcpy和glibc的memcpy整出来,对三者进行比较,不比不知道,一比吓一大跳。测试结论是:kernel和glibc的memcpy性能良好,glibc比内核的略高。自已写的就惨不忍睹了。测试程序大概是先定义两块1G的全局内存。然后先用memset将其全置

2011-06-21 19:09:00 18148 5

原创 Linux内核大讲堂 (二) 传说中的字符设备(4)

Linux内核大讲堂 (二) 传说中的字符设备(4)经过前面的学习,我们发现有一个东西像恶梦一样挥之不去,无论是讲驱动模型中的sysfs还是讲字符驱动的file,这些文件系统内的概念和模块已经让我们达到了无法忍受的地步,但这从侧面也说明了文件系统在内核中的至高地位。Linux宣称一切皆文件,是不是一切皆文件并不是我们目前讨论的内容,就算偶尔有一些东西没有抽象成文件,但这不重要,也不影响文件这个

2011-06-13 00:52:00 20280 25

原创 Linux内核大讲堂 (二) 传说中的字符设备(3)

Linux内核大讲堂 (二) 传说中的字符设备(3)       接下来讲的是字符设备的重点,就是从用户空间调用open最到终调用我们写的字符驱动中的open的整个过程。下面的讨论将会非常有意思,请大家一定要看完所有的描述,否则理解有问题就别怪哥没提醒你了!       在这之前我们大概说说大名鼎鼎的系统调用,从字面上理解就是系统(内核)提供的调用(服务),取小括号里面的话就拼成了:内核提

2011-06-06 23:22:00 13792 15

原创 Linux内核大讲堂 (二) 传说中的字符设备(2)

<br />Linux内核大讲堂 (二) 传说中的字符设备(2)<br />       这一节我们先给出一个字符设备的小例子,源码结构如下:<br />|-- wwhs_chardev<br />|   |-- Makefile<br />|   |-- wwhs_chardrv.c      //驱动<br />|   `-- wwhs_chardrv_test.c  //小测试程序<br />`-- wwhs_public.h<br />请大家养成看Makefile的好习惯,这个Makefile很简单

2011-05-28 23:14:00 7264 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 7416 4

原创 Linux内核大讲堂 (二) 传说中的字符设备(1)

Linux内核大讲堂 (二) 传说中的字符设备(1)就当我还在学校的时候,我就曾在一个装机群里听一位装机圣手说,驱动程序的安装没你想的那么简单,分类型的,分为字符设备驱动和块设备驱动。我当时就纳闷了,我说我装机的时候好像没看到啊,我就把光盘放过去然后就一直点下一步,然后重启就好了啊。后面我在群里被几位高手围攻,败下阵来,时过境迁,哥现在也算是道上混的兄弟了,再也没那么容易被蒙了。就算你DIY再牛,你也不要和我说装驱动要分类。否则我就和你讲内核,讲晕你再说。看谁更能吹,哈哈。我得意的笑。我发现学内核的一个好处

2011-05-25 20:16:00 7336 3

原创 Linux内核大讲堂 (一) 设备驱动的基石驱动模型(7)

<br />Linux内核大讲堂 (一) 设备驱动的基石驱动模型(7)<br />终于快讲完了,这一节其实就是让上节我们所说的四大天王露下小脸。源码分析请自行完成吧。我建议大家可以试着先看一下代码,如果能看懂,那就把我写的那破玩意删掉,自已实现一遍,如果不能看懂,那马上回过去从第一小节重新看过,耐心,一定要有耐心,没耐心,啥都完了。帖上原码:<br />Makefile:<br />obj-m+=wwhs_bus.o<br />KERNELDIR=/opt/kernel/linux-2.6.38/linux

2011-05-19 20:20:00 7413 5

原创 Linux内核大讲堂 (一) 设备驱动的基石驱动模型(6)

<br />Linux内核大讲堂 (一) 设备驱动的基石驱动模型(6)<br />上节我们大概分析了driver_register是怎么工作的。有的细节虽然没有到位,但是记住一句话,贪多嚼不烂,我们首先要建立的是驱动模型在我们脑海中的第一印象。本节将讲述最后两个主角,device和class的创建。讲完这些就会来个大集合。让四大天王(device,class,device_driver,bus)一起登台向各位致敬,表演?想要四大天王表演?没问题,可四大天王不但身份尊贵,最主要的是个个都多才多艺,要完全了解四

2011-05-19 20:16:00 7771

原创 诚征大家的意见

<br />大家好。我是和尚。我想做一个意见收集,看看大家都关注哪一方面,只要是linux内核方面的,都可以。<br />希望大家把自已最关注,最想知道的东西说出来。另外对于文章的风格,大家有什么好的意见和建议也可以说。<br />我虽然不一定会全部按照大家的意见走,但是肯定会做一个参考,尽量官吏大家都感兴趣的内容。<br />比如:<br />我想知道platform的框架体系,我想知道misc的框架体系,我想了解字符设备,我想了解文件系统,我想了解xxxxx<br /> <br />你们的满意是我前进的

2011-05-19 12:36:00 7100 32

原创 Linux内核大讲堂 (一) 设备驱动的基石驱动模型(5)

<br />Linux内核大讲堂 (一) 设备驱动的基石驱动模型(5)<br />上节我们已经领教了传说中的bus_register,这节我们继续领教同样是神级的driver_register。<br />driver_register如果看懂了,device自行分析应该没太大的问题。<br />照样先给出一个小的例子代码。<br /> <br />typedef struct __wwhs_device_driver{<br />         char *name;<br />         str

2011-05-17 22:03:00 9454 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 14472 4

原创 Linux内核大讲堂 (一) 设备驱动的基石驱动模型(4)

今天又升级了最新版内核2.6.38.5,编了一下,我之前写的几个模块都可以用,看来这一块没有太大差异。顺便把内核升级写了一个相关的文档。大家如果没升级过内核的可以参考一下:http://blog.csdn.net/z2007b/archive/2011/05/09/6407458.aspx 。好了。上节我们用最直观的方式知道了kobject_create_and_add("wwhs_drvmode",NULL)这个函数做了些什么事。那kset呢?经过我们在最前面两小节的分析可以知道kset_register

2011-05-10 00:08:00 18900 28

原创 将Centos5.4内核升级到2.6.38.5

Inux内核升级是学习内核的基本条件。如果自已编译的内核跑不起来,那谈linux内核学习就是镜花水月了。其实网上有很多相关的内核编译升级教程。我这个纯粹是多余的,但是为什么很多同志升级还是老失败呢?其实网上有很多教程,撞到相关的问题问一下google或百度就基本是可以解决的。虽然网上的解决方法很多时候不是很好,但是要编译成功并运行起来是没有太大问题的。好了,言归正传,把我的方法奉献给大家吧。首先我的linux是centos5.4版的,内核版本是2.6.18。其实linux内核的学习和linux发行版的关系不

2011-05-09 20:11:00 8421 4

原创 Linux内核大讲堂 (一) 设备驱动的基石驱动模型(3)

实在是让大家久等了,因为最近离职,所以繁锁的事情很多,今天终于把离职手续给办完了,不过还有一堆事情没有做,如果更新的慢的话,请大家多多包涵。言归正传。俗话说的好:光说不练假把式。很明显本帅哥不是假把式。为了让大家一起对驱动模型有直观的认识,小弟花了一点点时间写了几个小例子(目前只有一个)。就是为了让大家领会最神秘的驱动模型,有了这些小例子,结合我前面两篇源码分析的文章,哥可以告诉你,你已经具备内核分析的基本能力了。首先说一下我的环境:我linux是装在虚拟机上的,装的linux发行版是centos5.4。后

2011-05-06 18:01:00 7856 3

原创 Linux内核大讲堂 (一) 设备驱动的基石驱动模型(2)

上节我们分析到int kset_register(struct kset *k)函数中的kobject_add_internal(&k->kobj),我们接着分析,先唤起来一下大家的记忆,给出kset_register的函数定义:int kset_register(struct kset *k){ int err; if (!k)  return -EINVAL; kset_init(k); err = kobject_add_internal(&k->kobj); if (err)  return err

2011-05-04 23:31:00 5165 2

原创 Linux内核大讲堂 (一) 设备驱动的基石驱动模型(1)

可能把驱动模型放在第一章讲会会有点难度,但是只要能跨过这道坎,后面就会轻松很多,驱动模型是整个linux设备驱动的基石。大部分人把驱动模型叫做设备模型,但是我查了linux的帮助文档,就是在下载源码路径下的Documentation目录中找到driver-model这个目录,里面包含的文件就是我在本章中所要讲述的东西,也就是我所说的驱动模型。因此本文都会用驱动模型这个术语(如果各位觉得这种叫法是错误的,请在评论中指出,并给出理由,本人非常诚恳的接受各位善意的批评与指正)。驱动模型的核心结构就是我们通常所说的

2011-05-03 22:41:00 11582 11

原创 LINUX内核大讲堂系列(序论)

<br />LINUX内核大讲堂系列(序论)<br /> 其实我也是过来人,深知没有接触过内核开发的同志在无人指导的情况下独自学习LINUX设备驱动的感受。都是买书,看<br />BLOG,自已调个小程序,很难有同志能够坚持下去,市面上的书籍也不是说写的不好,只是大家的基础都不一样,另外我感觉有一<br />点就是那些书籍在看了之后始终感觉有一层捅不破的纸,看书的时候感觉啥都会,书一关,好像又啥都不懂了。其实我进书店看过<br />市面上的书,很少有讲内核的框架的,不论是国内的还是国外的,要么框架讲的很抽象

2011-05-02 21:21:00 5865 22

原创 非易失性存储设备写数据掉电恢复策略

本文允许转载。转载请注明出处:http://blog.csdn.net/z2007b作者:无为和尚非易失性存储设备写数据时掉电恢复是一个比较头痛的问题,如果写入数据写入到一半的时候掉电,数据的完整性就没法得到保证,本文提出的方法是在不增加新硬件的情况下,完成掉电恢复的一个策略,但是本文介绍的方法没法保证数据逻辑上的完整性。比如你要写入的数据需要在A处写1,在B处写2,才能保证功能的正确性,如果这两步操作是分开的,并且你在写A的时候掉电了,那么可以恢复A,但是没法恢复B。就保证不是AB这个大集合的完整性。只能

2011-05-01 17:20:00 2519 2

原创 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 2735 8

原创 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 7997

原创 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 2578 1

原创 Linux内核LED模块分析(一)

应群里几位聊的好的哥们的邀请,要我分析一个内核模块。我后面就选了LED模块分析,LED模块分析不算难,但要说清楚其实还是很挑战的。今天俺的文章被推荐到首页了。挺有成就感的。我的文章虽然不登大雅之堂,但只要能给到大家一起指点,哪怕就一点点我就心满意足了。好了,闲话不多说了,开始我们的linux内核之旅吧。这一节是应群里几位兄弟的要求讲LED模块,我稍微看了一下,就挑了一个最软的柿子来捏。怎么样挑到一个最软的柿子呢?首先我们在分析这个模块之前第一件事就是想办法缩小范围,如果不缩小范围,你我的精力都是不够的,可能

2011-04-28 10:02:00 6852 4

原创 linux内核代码阅读的几个技巧

<br />这些技巧都是平时我自已在阅读的时候总结的,想到哪就说到哪了,其实我总结的技巧远不止这些,但是先说这些吧。后面想到了再补充,只有在拿到代码做分析的时候遇到实际的问题时,才能见招拆招,想些办法。<br />其实linux内核源码还是比较难跟踪的,我刚开始阅读内核源码的时候,感觉很多东西经常找着找着就失去头绪了,很郁闷。<br />通过一些阅读后发现内核也就那么几招用的比较多,摸清楚其脾气后,剩下的就是耐心了。<br />1.我曾经用过一阵VI,装了一堆插件后折腾了一阵,发现还是无法感受其推崇者所说的

2011-04-25 21:02:00 19779 35

原创 netfilter框架分析

<br />本来是不打算写这种基础性的东西的,但是有很多同志经常问我(有同事也有网友)。所以就写一下吧,这个是理解LINUX内核网络子系统的基础,ip conntrack等都是依赖这些基础的。好的,闲话不多说了。来正文。<br />其实netfilter就是依靠一个全局的二维数组nf_hooks[][].可以把这个玩意看成一个8*32的矩阵。矩阵的每个成员就是一个双向链表节点。看看,又是双向链表,内核中双向链表的地位真的太重要了。以双向链表做骨架串起nf_hook_ops这个结构体。然后在运行时在挂HOOK

2011-04-23 18:06:00 3228

原创 双向链表在内核中的超然地位

玩过内核的人都知道,linux内核中的链表是比较有特色的。利用一个container_of宏来实现数据包含链表,不可谓不精妙。(如果不知道的同志改快上网看看)为什么linux内核要用到链表更多的双向链表,为什么不用单向链表。这是因为双向链表的灵活性,两边都有指针域,更方便删除。有的同志可能会说只要存了单向链表上一步的指针,一样可以删,双向链表没必要。还是那句话,请先看看linux内核中的代码,再来评论。以linux内核中的SKB为例。在传入的时候传的是SKB的指针,传的不是链表,为什么不用链表?因为SKB才

2011-04-18 21:34:00 2455 1

原创 一个比较有意思的宏

<br />#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))<br />这个宏为编译时判断e是否为0<br />假如e等于非0值,则!(e)为0,则!!(e)为1。再struct{int:-1}则会编译出错。<br />假如e等于0,则!(e)为1,则!!(e)为0。再struct{int:-0},实际等价于struct{int:0}则编译通过。<br /> 

2011-04-15 19:06:00 1938 3

原创 想成为嵌入式软件工程师的新手可以看看

<br />时下有非常多时髦的名词,嵌入式工程师,3G开发工程师,ANDROID开发工程师等等。<br />这些名词我想十有八九是一些培训机构发明的。不是说培训机构不好,培训机构针对市场的要求提出一个名词,然后有针对性的开相应的课程没有啥不对。<br />但是我知道,大家,尤其是想进入软件开发这张门而尚未进入的新手,很容易被一些花哨的名词给搞混。<br />在这里我给大家说说我个人的看法。<br />首谈嵌入式了:<br />其实剥掉外面这层华丽的衣服,我们可以看到。所谓的嵌入式其实是从单片机发展过来的。早

2011-04-15 18:57:00 4597 11

原创 linux调试

<br />总结一下我调试linux的几种常用手段。<br />1.printk。经典的方法,有时候最笨的往往是最有效的。<br />2.打开oops。得出有效信息然后对照相应的C代码调试。<br />3.coredump。只能调试应用程序,因为coredump的潜规则是:linux内核是稳定的,并由内核产生。<br />4.打桩。对相应的函数用宏重新定义,或者在结构体中增加相应的调试成员,然后在合适的地方有效利用此成员。比如重构malloc等。<br />5.缓冲区buffer.这是听我司一位高手讲座时学

2011-04-10 11:52:00 1614 7

原创 高手是怎样炼成的

<br />高手,大牛,专家,这是对一个技术人员最高的评价。<br />前经看过几篇文章,什么程序员的十重境界,程序的几个层次等等。<br />发现大家对高手的理解各有不同,但和我所理解的高手差别还是挺大的。<br />其实我只想对高手进行分析,找到某种共性,使自已在学习成长的过程中往高手这上面靠。<br />其实我想说天赋还是很重要的。<br />曾仕强教授在讲解易经的时候说过一句话:无可奈何就是命。爱恩斯坦说的比较隐晦:天才是99%的汗水加1%的灵感。这灵感在我看来其实就是悟性,就是天赋。<br />举

2011-04-05 15:07:00 2303 7

原创 linux反汇编旁门左道小技巧一则

<br />我个是我自已在开发过程中发现的一个小技巧。不算什么牛X的技巧。只是帖出来大家一起欣赏一下而已。权当一道小菜吧。<br /><br />gdb反汇编调试技巧<br />在linux下很多时候我们需要反汇编我们的源码,然后根据所得到的信息(例如相关的寄存器)进一步定位问题所在。这时候我们很多时间用objdump或者直接用gdb。在用gdb的情况下可以对可疑的函数采用disassemble funcname来反汇编对应的funcname函数。但如果在对汇编不是很熟的情况下我们通常不容易将源码与对应的汇

2011-04-01 22:51:00 4057 3

原创 linux内核里的工作队列及内核通知链

<br />看懂后总结了一下,其实就两句话:<br />工作队列初始化就是开启一个内核线程,然后内核线程会将你注册在链表上的动作(函数)按顺序执行,执行完后将函数从链表上移除。<br />内核通知链其实就是一个回调函数链。你首先需要将你要执行的动作注册到链表上。然后在一个地方call通知链的时候,CALL函数就会将链上注册的函数顺序执行一遍。再CALL一次就再执行一次。

2011-04-01 22:29:00 1625 6

原创 ip conntrack整体框图

<br />花了三个小时画的一个图。献给大家做为愚人节的礼物。呵呵。<br /> <br /> <br /> <br /> <br /> <br />

2011-04-01 22:18:00 1797 1

原创 项目人员搭配之我见

<br />我一直都觉得我的耐心很差,无论是指导新人还是项目协调,我都觉得我是同事当中最差的。<br />我最喜欢说的一句话就是:与其分出去不如自已做,求人不如求已。事实上我也是这么做的。<br />我领导对我的评价是:野路子多,分析处理问确实有一套,如果照现在这样发展下去,可以成为一个很好的砖瓦匠,但永远成不了总设计师。<br />倒不是我骄傲,我只是现在不愿意管项目而已,因为我觉得我目前的重心是技术,所以不想分心去想别的而已,要是我愿意,我肯定可以管的很好。<br />项目的质量与项目成员的素质关系非常

2011-04-01 22:08:00 1481 4

原创 ipconntrack中的一个BUG

好不容易搞个周六,被总监叫回去救火,郁闷啊!说是BT下载有内存泄露。跑两小时就内核挂了。乱杀进程。又出现了传说中的内存泄露。哎。只好回公司。首先进行问题定位。先看是内核的还是应用的。经过对SLABINFO进行分析。发现是内核中一个数据结构在狂飚。这个数据结构就是ip_conntrack_expect。基本可以定位是内核问题了。一看这玩意就知道是netfilter这一块的事。然后对SVN进行查找。发现最近将对称NAT改成了锥形NAT。这个地方非常可疑。因为这个是要通过IPTABLES来操作NETFILTER的

2011-03-04 21:32:00 1455 1

原创 扩展EBTABLES

之前对ARP协议进行了扩展,可是只能对ARP包进行修改,后面又有了DHCP包的VLAN优先级不对的问题。想了想,这样下去不行,就直接想在在发包的过程中挂个HOOK,这个地方。然后统一修改。大小通吃。并且这样做的好处在于以后要再加什么功能也方便。说不定哪天又报这个不行那个不行,就可以统一在这里处理。选中了,dev_hard_start_xmit。本来打模仿broute表整一张的,可惜我晚了一步,有人在我之前已经想到了这一招,已经打了一张aroute表。算了那就用现成的吧。反正这一块就算自已亲手加,也没啥难的。

2011-03-04 21:16:00 2146

linux内核大讲堂_驱动模型_示例代码

linux内核大讲堂_驱动模型_示例代码_无为和尚

2011-05-16

MD5算法

MD5加密算法C++版本

2007-08-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除