Go to My Blog
Go to Lin's Blog
摘要: 今天在驱动里面改了UDP packet的payload,发出这个UDP包之后,对方在驱动里面能收到这个包。但是indicate给OS之后,APP却收不到这个包。Debug了一段时间之后,我怀疑应该是checksum之类的问题,果然...简单讲下UDP的checksum:UDP字段占用8个字节,checksum就是最后的两个字节,如果checksum==0,那么Receiver这边就不会检查Payload的checksum。否则,OS检查checksum,发现不对的时候会drop这个包。有函数可以配置socket,enable/disable checksum。如下disable checksu 阅读全文
posted @ 2013-02-20 23:51 一ke小小草 阅读(5823) 评论(0) 推荐(0) 编辑
摘要: 网上关于virtual address到physical address的转换的文章太多了,写在这里只为了给blog加点内容,以及自己整理下:32bit OS每个进程有4G的寻址空间,一个32bit的virtual address怎么被映射到physical address上呢?1.拿到CR3的值,代表PDE Base的物理地址,页目录下占用连续的4K物理内存,共有1k个PTE.2.根据Virtual Address的Bit31--Bit22为index,PDE Base+ index指向的PTE就是virtual address对应的PTE Base.3.每个PTE又占用连续的4K物理内存, 阅读全文
posted @ 2013-02-11 21:33 一ke小小草 阅读(1968) 评论(1) 推荐(0) 编辑
摘要: Windbg是Windows下debug的神器,下面直接写命令,注释很少,我觉得看到命令就够,具体含义太多地方可以查了。Then let's begin:.kdfiles -m \systemroot\system32\drivers\abc.sys D:\local\abc.sys!ndiskd.miniports!stacks 2: display stack and other information of all the thread.lm: list module information!lmi abc.sys: list information about the spec 阅读全文
posted @ 2013-02-07 14:36 一ke小小草 阅读(371) 评论(0) 推荐(0) 编辑
摘要: 转自:http://www.cnblogs.com/zhujudah/archive/2012/03/22/2411240.html1.#假如希望在字符串中包含宏参数,ANSI C允许这样作,在类函数宏的替换部分,#符号用作一个预处理运算符,它可以把语言符号转化程字符串。例如,如果x是一个宏参量,那么#x可以把参数名转化成相应的字符串。该过程称为字符串化(stringizing).#incldue <stdio.h>#define PSQR(x) printf("the square of" #x "is %d.\n",(x)*(x))int 阅读全文
posted @ 2013-02-06 12:49 一ke小小草 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 这几天在看这个project,功能类似于Win7自带的Sticky Notes,在桌面上显示便签,不过感觉pNote功能稍微多一点。代码量不大,c语言的应该也蛮容易看的,网上下了个Pelles C的编译器,打开工程文件,配置下include,lib路径,再下载一个sapi.lib,就可以顺利编译通过了。但是按照官网的步骤,设置breakpoint来Debug出了点问题,不过尝试了下,在compile tag中设置Full,在link中设置coff format貌似现在可以设断点了。http://sourceforge.net/projects/pnotes/?source=dlphttp:// 阅读全文
posted @ 2013-02-04 22:49 一ke小小草 阅读(467) 评论(0) 推荐(0) 编辑
摘要: 1.DMA传之前是否需要把cache更新到内存。It depends。大部分X86支持DMA当主存跟Cache不一致时,DMA直接从Cache里面去数据,那就不需要cache flush了。但有些hardware不支持DMA从cache取数据,这时候就有必要在DMA之前flush cache到主存了。不过在windows下,cache flush的操作其实不需要driver来关心,当driver调用OS的API去做DMA的时候,OS已经帮我们做好了cache跟memory之间的coherence了。2. DMA有哪些类型。可以分为Packet Based, Common-Buffer, Hyb 阅读全文
posted @ 2013-02-01 23:35 一ke小小草 阅读(506) 评论(0) 推荐(0) 编辑
摘要: 这几天遇到了64bit Win8下的一个Bug,我们的chip是支持ScatterGather的,但是在做DMA之前,我们修改对应的Memory却没有生效。DMA传输出去的内容还是之前没有改过的。回来的路上,看了下面这篇文章,终于明白其中的原因了。www.microsoft.com/whdc/driver/kernel/dma.mspxDevice跟Memory进行传输DMA的时候,Device能访问的地址访问受Device本身的寻址范围所限。在我的环境下,Chip是32bit的Bus,所以只能访问0-4G的地址,而系统是64bit的,有些Memory(Mem1)的物理地址在4G以上的空间。导 阅读全文
posted @ 2013-01-30 23:12 一ke小小草 阅读(1537) 评论(0) 推荐(0) 编辑