
杂文
文章平均质量分 76
jw212
这个作者很懒,什么都没留下…
展开
-
linux多进程和多线程分析之二
很想写点关于多进程和多线程的东西,我确实很爱他们。但是每每想动手写点关于他们的东西,却总是求全心理作祟,始终动不了手。今天终于下了决心,写点东西,以后可以再修修补补也无妨。一.为何需要多进程(或者多线程),为何需要并发?这个问题或许本身都不是个问题。但是对于没有接触过转载 2011-08-30 10:44:53 · 3605 阅读 · 1 评论 -
网络数据包收发流程(二):不配置NAPI的情况
上一篇讲的是内核配置成NAPI的情况,那也是绝大多数内核使用的配置现在讲讲内核不配置成NAPI时的情况一、no NAPI 数据结构不配置NAPI的时候,网络设备不使用自己的napi_struct结构,所有网络设备驱动都使用同一个napi_struct,即c转载 2011-09-01 10:34:37 · 3736 阅读 · 0 评论 -
网络数据包收发流程(一):从驱动到协议栈
网络数据包收发流程(一):从驱动到协议栈早就想整理网络数据包收发流程了,一直太懒没动笔。今天下决心写了一、硬件环境intel82546:PHY与MAC集成在一起的PCI网卡芯片,很强大bcm5461: PHY芯片,与之对应的MAC是TSEC转载 2011-09-01 10:32:46 · 7179 阅读 · 0 评论 -
谈EXPORT_SYMBOL使用
EXPORT_SYMBOL只出现在2.6内核中,在2.4内核默认的非static 函数和变量都会自动导入到kernel 空间的, 都不用EXPORT_SYMBOL() 做标记的。2.6就必须用EXPORT_SYMBOL() 来导出来(因为2.6默认不到处所有的符号)。 1、EXP转载 2011-07-21 19:42:15 · 645 阅读 · 0 评论 -
Linux设备驱动学习笔记
这次的主要内容:1.linux设备驱动程序的作用2.内核模块和用户空间程序的区别3.Hello world程序. 4.Makefile文件5.编译,加载内核模块6.Other tips7.好书和网站1.linux设备驱动程序的作用简单的说,驱动程序告诉了我们可以提供了那些能力,但转载 2011-07-20 16:59:13 · 761 阅读 · 0 评论 -
kbuild系统-编译到内核和编译成模块的区别
代码编译到内核和编译成模块在代码中有什么区别呢? 从模块的代码中看是一样的。入口函数都是MODULE_init(fun),但是代码中的条件编译会使宏module_init()在编译到内核和编译成模块的情况下替换成不同的代码。 include/linux/init.h中可知转载 2011-07-20 16:37:16 · 621 阅读 · 0 评论 -
linux udev详解
udev简介: 早期的linux的/dev目录下有一大堆设备文件,不管你的主机上是否有这些设备,相当于提供一个标准接口,比 如 /dev/sda 一般表示 SISC 盘第一块磁盘,但你主机上即使没有这种磁盘,/dev/sda还是存在。 于是,这就有个问题:/dev/下会有很多实际转载 2011-07-12 18:53:05 · 1004 阅读 · 0 评论 -
网络设备驱动基础
在已挂装磁盘和数据包发送接口之间,存在着一些非常重要的不同。首先,磁盘在 /dev 目录中作为一个特殊文件而存在,而网络接口并没有类似的 /dev 目录入口点。普通的文件操作(读取、写入等等)对网络接口来讲没有任何意义,因此,无法将 Unix 的“所有东西都是文件”这一思想应用于翻译 2011-07-12 17:27:44 · 784 阅读 · 0 评论 -
linux kernel 2.4 和 2.6 的区别
随着Linux2.6的发布,由于2.6内核做了教的改动,各个设备的驱动程序在不同程度上要进行改写。为了方便各位Linux爱好者我把自己整理的这分文档share出来。该文当列举了2.6内核同以前版本的绝大多数变化,可惜的是由于时间和精力有限没有详细列出各个函数的用法。特别声明:该文转载 2011-07-12 10:38:04 · 689 阅读 · 0 评论 -
linux udev 自动创建node
我们知道,生成设备文件节点的方法有三个:手动mknod利用devfs利用udevUdev是今后发展的趋势第一、什么是udev? 这篇文章UDEV Primer给我们娓娓道来,花点时间预习一下是值得的。当然,不知道udev是什么也没关系, 把它当个助记符好了,有了下面的上路指南,可原创 2011-07-12 18:51:37 · 892 阅读 · 0 评论 -
深入剖析uClinux
uclinux表示micro-control linux.即“微控制器领域中的Linux系统”,,是Lineo公司的主打产品,uCLinux是Lineo公司的主打产品,同时也是开放源码的嵌入式Linux的典范之作。uCLinux主要是针对目标处理器没有存储管理单元MMU(Memo转载 2011-07-12 10:54:35 · 633 阅读 · 0 评论 -
Skype国际版最新版及老版本下载
Skype国际版最新版及老版本下载建议还是使用国际版,而不是tom版。三条理由:1、tom版的往往不是最新版。2、tom版广告太多,占用很多系统资源。3、tom版有监听程序,隐私和安全得不到保证。Skype最新正式版:http://download.skype.com/SkypeSetupFull.exehttp://upgrade.skype.com/SkypeSetup转载 2011-06-20 16:13:00 · 17698 阅读 · 0 评论 -
网络数据包收发流程(三):e1000网卡和DMA
一、硬件布局每个网卡(MAC)都有自己的专用DMA Engine,如上图的 TSEC 和 e1000 网卡intel82546。上图中的红色线就是以太网数据流,DMA与DDR打交道需要其他模块的协助,如TSEC,PCI controller以太网数据在 TSECD转载 2011-09-01 10:37:19 · 8441 阅读 · 4 评论 -
网络数据包收发流程(四):协议栈之packet_type
进入函数netif_receive_skb()后,skb正式开始协议栈之旅。先上图,协议栈大致过程如下所示:跟OSI七层模型不同,linux根据包结构对网络进行分层。比如,arp头和ip头都是紧跟在以太网头后面的,所以在linux协议栈中arp和ip地位相同(如上转载 2011-09-01 10:38:35 · 10113 阅读 · 2 评论 -
raw socket编程例子
转自:http://bbs.chinaunix.net/viewthread.php?tid=876233&extra=page%3D3前几天看了看>第一卷,为了加深理解,便写了几个简单的程序,最近好忙,但是又怕忘记前面所学的知识,就粗糙的整理了一下,贴出来,希望能给初学者以转载 2011-09-01 18:47:33 · 2503 阅读 · 1 评论 -
linux多进程和多线程分析之一
多线程 or 多进程?中级 | 2010-08-16 16:38 | 分类:①Unix/Linux、服务器技术 ②评比 | 2,638 次阅读作者:diaoyf | 文章来源:http://programmerdigest.cn在U转载 2011-08-30 10:44:10 · 5340 阅读 · 1 评论 -
linux sock_raw原始套接字编程
sock_raw原始套接字编程可以接收到本机网卡上的数据帧或者数据包,对与监听网络的流量和分析是很有作用的.一共可以有3种方式创建这种socket1.socket(AF_INET, SOCK_RAW, IPPROTO_TCP|IPPROTO_UDP|IPPROTO_ICM转载 2011-08-26 18:05:15 · 854 阅读 · 0 评论 -
Linux网络编程一步一步学+基础
http://blogold.chinaunix.net/u1/48325/showart.php?id=413841·Linux网络编程基础(一)·Linux网络编程基础(二)·Linux网络编转载 2011-08-26 17:59:01 · 1414 阅读 · 0 评论 -
字节序(wiki)
字节序维基百科,自由的百科全书跳转到: 字节序,又称端序,尾序,英文:Endianness。在计算机科学领域中,字节序是指存放多字节数据的字节(byte)的顺序,典型的情况是整数在内存中的存放方式和网络传输的传输顺序。Endianness有时候也可以用指位序转载 2011-08-23 14:52:00 · 859 阅读 · 0 评论 -
linux 实现简单定时器的功能
对于程序中需要定时去check某些变量或者function返回结果的功能,最早就是用最简单的sleep()的一行语句,虽然可以实现,但是需要主程序一直等待一段时间,无论是否提前有返回值。后面就想到可以用time()来实现相同的功能,和sleep不同的地方就是,如果check到原创 2011-08-19 18:08:42 · 1137 阅读 · 1 评论 -
驱动开发的一些错误解决方法
驱动开发的一些错误解决方法In file included from /linux-2.6.32/arch/arm/include/asm/timex.h:15,from include/linux/timex.h:转载 2011-08-19 16:04:19 · 7208 阅读 · 0 评论 -
“asm/semaphore.h: No such file or directory”
今天编译发现一个error: “asm/semaphore.h: No such file or directory” ,发现2.6.19和2.6.31对这个信号量声明并不相同[patch] include linux/semaphore.h for kernel 2.6原创 2011-08-19 16:02:34 · 8227 阅读 · 1 评论 -
TCP/IP 通訊協定及網路架構研析
一、TCP/IP 整體架構概述二、利用 TCP/IP 傳送訊息 TCP 資料頭格式 IP 資料頭格式 Ethernet 資料頭格式三、IP 網路架構概述 IP 功能概述 IP 的定址方式 次級網路(Subnet)转载 2011-08-17 16:32:02 · 1139 阅读 · 0 评论 -
jiffies溢出与时间先后比较 + linux的HZ, Tick, Jiffies
Linux核心几个重要跟时间有关的名词或变数,底下将介绍HZ、tick与jiffies。(1)HZLinux核心每隔固定周期会发出timer interrupt (IRQ 0),HZ是用来定义每一秒有几次timer interrupts。举例来说,HZ为1000,代表每秒转载 2011-08-16 10:16:22 · 2791 阅读 · 0 评论 -
IEEE 802.11 Frame Types
IEEE 802.11 Frame Types IEEE 802.11 in the OSI Reference ModelThe IEEE 802.11 architecture resides in the Data Link Media Ac转载 2011-08-17 17:29:37 · 4211 阅读 · 0 评论 -
全局变量、静态全局变量、静态局部变量、局部变量
全局和静态变量都在堆里。(这句话应该错了,应该是放在常量数据段)全局变量的作用范围是整个程序(如果程序是多个文件,必须在其他的文件中说明)。静态变量的作用范围要看静态变量的位置,如果在函数里,则作用范围 就是这个函数。静态全局变量,只在本文件可以用,虽然整翻译 2011-08-03 19:30:49 · 675 阅读 · 0 评论 -
Windbg对过滤驱动DriverEntry函数下断点技巧
<br />方法1: <br />1> 先用DeviceTree.exe查看指定的过滤驱动的Load Address(加载地址) <br />2> 再用LordPE.EXE查看指定过滤驱动文件的入口点地址<br />3> 计算过滤驱动的DriverEntry函数内存地址 DriverEntry函数内存地址 = Load Address + 入口点地址<br />例子: <br />1> Load Address = 0xFAABF000 <br />2> 入口地址 = 0x3400 <br />3> Win转载 2011-03-31 15:06:00 · 1832 阅读 · 0 评论 -
Wince6.0 中断的产生及响应
<br />摘抄自- 程序设计实战一书<br /> <br />各种外设时通过中断和wince核心进行通信的。过程是:<br />1)硬件设备产生硬件中断<br />2)OAL完成硬件中断到逻辑中断(SYSINTR)的转换(OEMinit函数实现)<br />3)系统识别逻辑中断,同时进行处理。<br />分两步:中断服务例程(ISR)和中断服务线程(IST)。<br />ISR主要负责中断响应,一般要求短小精干,对执行效率有很高的要求,只负责最简单的工程,即响应设备并返回一个中断标示给核心。而对中断的实际原创 2011-03-17 12:06:00 · 1904 阅读 · 0 评论 -
CSMA/CA
<br />概述<br />无线局域网标准802.11的MAC和802.3协议的MAC非常相似,都是在一个共享媒体之上支持多个用户共享资源,由发送者在发送数据前先进行网络的可用性检测。在802.3协议中,是由一种称为CSMA/CD(Carrier Sense Multiple Access with Collision Detection)的协议来完成调节,这个协议解决了在Ethernet上的各个工作站如何在线缆上进行传输的问题,利用它检测和避免当两个或两个以上的网络设备需要进行数据传送时网络上的冲突。在8转载 2010-12-07 09:58:00 · 1047 阅读 · 1 评论 -
网络驱动程序--数据传输流程
<br />DMA的英文拼写是“Direct Memory Access”,汉语的意思就是直接内存访问,是一种不经过CPU而直接从内存了存取数据的数据交换模式。PIO模式下硬盘和内存之间的数据传输是由CPU来控制的;而在DMA模式下,CPU只须向DMA控制器下达指令,让DMA控制器来处理数的传送,数据传送完毕再把信息反馈给CPU,这样就很大程度上减轻了CPU资源占有率。<br /> <br />DMA模式与PIO模式的区别就在于,DMA模式不过分依赖CPU,可以大大节省系统资源,二者在传输速度上的差异并不十翻译 2010-10-11 12:44:00 · 2321 阅读 · 0 评论 -
进程和线程
<br /><br />线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。 进程拥有这许多共性的同时,还拥有自己的个性。有了这些个性,线程才能实现并发性。这些个性包括:<br /> 1.线程ID<br /> 每个线程都有自己的线程ID,这个ID在本进程中是唯一的。进程用此来标 识线程。 2.寄存器组的值<br /> 由于线程间是并发运行的,转载 2010-10-09 10:32:00 · 571 阅读 · 0 评论 -
多进程和多线程
什么是多线程: <br /><br />多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。线程是在同一时间需要完成多项任务的时候被实现的。 <br /><br />使用线程的好处有以下几点: <br /><br />·使用线程可以把占据长时间的程序中的任务放到后台去处理 <br /><br />·用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度 <br /><br />·程序的运行速度可能加快 <br /><br />·在一些等待的转载 2010-10-09 10:39:00 · 1687 阅读 · 1 评论 -
字符串常见算法之一:查找一个短串在一个长串中位置
字符串常见算法之一:查找一个短串在一个长串中位置 http://www.cppblog.com/humanchao/archive/2009/11/25/101918.aspx介绍的一些字符串处理的问题在日常编程中比较常见,但是在大学读书的时候几乎一个都没有涉及,最近学习了一下在这里介绍给大家,仅供参考。这些算法与内容包括:1、 查找一个短串在一个长串中位置;2、 查找一个字符串中最长的重复子串;3、 查找一个字符串中重复最多的子串;4、 两个字符转载 2010-10-09 14:00:00 · 2141 阅读 · 0 评论 -
WCE7- New and Undocumented Features
<br />The following features are new or undocumented for this release. <br /><br />Browser New Features <br />New user interfaces are available for Internet Explorer Embedded. To implement the browser UI <br />for a device with a medium-sized display, set翻译 2010-09-09 14:46:00 · 1822 阅读 · 0 评论 -
Windows Embedded Compact 7 Preview Release Notes
<br />Windows Embedded Compact 7. The Compact 7 release offers several new features <br />and improvements, including kernel improvements, NDIS 6.1, and Platform Builder integrated <br />with Visual Studio 2008. <br /> <br />Windows Embedded Compact 7 Inst翻译 2010-09-09 11:09:00 · 845 阅读 · 1 评论 -
IRP处理模型
IRP处理的“标准模型”<br /> <br /><br />图5-5.IRP处理的“标准模型”创建IRP<br />IRP开始于某个实体调用I/O管理器函数创建它。在上图中,我使用术语“I/O管理器”来描述这个实体,尽管系统中确实有一个单独的系统部件用于创建IRP。事实上,更精确地说,应该是某个实体创建了IRP,并不是操作系统的某个例程创建了IRP。例如,你的驱动程序有时会创建IRP,而此时出现在图中第一个方框中的实体就应该是你的驱动程序。<br />可以使用下面任何一种函数创建IRP: IoBuildA转载 2010-09-17 16:46:00 · 1283 阅读 · 0 评论 -
驱动程序访问用户模式数据缓冲区的三种方式
<br />当应用程序发起一个读或写操作时,通过给出一个用户模式虚拟地址和长度,应用程序向I/O管理器提供了一个数据缓冲区。正如我在第三章中提到的,内核模式驱动程序几乎从不使用用户模式虚拟地址访问内存,因为你不能把线程上下文确定下来。Windows 2000为驱动程序访问用户模式数据缓冲区提供了三种方法:在buffered方式中,I/O管理器先创建一个与用户模式数据缓冲区大小相等的系统缓冲区。而你的驱动程序将使用这个系统缓冲区工作。I/O管理器负责在系统缓冲区和用户模式缓冲区之间复制数据。 在direct方转载 2010-09-17 14:34:00 · 3850 阅读 · 0 评论 -
驱动编程中的同步处理
<br />作为驱动程序开发者我们需要了解的是:执行在某线程上下文中的代码在任何时刻都可能被系统夺去控制权。另外,只有在多处理器的计算机上才能真正实现多线程的并发执行。一般,我们需要做两个最差的假定: 操作系统可以在任何时间抢先任何例程并停留任何长的时间,所以我们不能保证自己的任务不被干扰或延迟。 即使我们能防止被抢先,但其它CPU上执行的代码也会干扰我们代码的执行,甚至一个程序的代码可以在两个不同线程的上下文中并发执行。 <br />Windows NT为解决一般的同步问题提供了两种方法,一个是中断请求优翻译 2010-09-07 17:37:00 · 1012 阅读 · 0 评论 -
WinCE BSP中的Dirs文件和Sources文件
<br />1. Dirs文件<br /> 关于Dirs文件,就是指定要编译的路径,这个地球人都知道。还是简单介绍一下。按照文档上面介绍有三种定义:DIRS,DIRS_CE和OPTIONAL_DIRS。<br /> DIRS:就是指定要编译的目录。<br /> DIRS_CE:只有目录下的源代码用于WinCE的映像文件时,才编译该目录。<br /> OPTIONAL_DIRS:指定可以选择编译的目录。比如:OPTIONAL_DIRS=proj1,如果想编译proj1目录,可以设置BUILD_OPTI转载 2010-09-15 15:04:00 · 494 阅读 · 0 评论 -
最全的英文面试问题加答案。
最全的英文面试问题加答案。不要再看只有分析没有答案的版本了^_^ English job interview Questions and Answers<br />"What are your goals for the future?" or "Where do you see yourself in five years?" <br /> <br />Don't discuss your goals for returning to school or having a family, they are转载 2010-10-23 12:15:00 · 1402 阅读 · 0 评论