自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 资源 (16)
  • 收藏
  • 关注

原创 linux使用积累

CentOS + rar + unrar 安装 # vi /etc/yum.repos.d/dag.repo放入如下内容 [dag]name=Dag RPM Repository for Red Hat Enterprise Linuxbaseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/daggpgc

2014-09-12 21:17:35 814

转载 linux的netlink机制

netlink作为一种用户空间和内核空间通信的机制已经有一定年头了,它不光为了内核和用户通信,还可以作为IPC机制进行进程间通信。其实netlink定义了一个框架,人们可以基于这个框架用它来做可以做的任何事情,linux中不乏这些类似的好的框架。它们的共同点就是内核并不管它们能做什么,然而它们真的很强大,往往可以做到的事情很多,这就是内核不问策略只管实现机制,所有策略让用户实现,netlink框架

2013-10-09 22:19:19 826

转载 send、sendto与sys_sendto之间的关系

sys_sendto()sys_socketcall() --> sys_sendto()asmlinkage long sys_sendto(           int                    fd,            void __user            *buff, size_t len,            unsigned

2013-10-09 21:46:49 4301

转载 系统调用(追踪sys_socket)

系统调用(追踪sys_socket)在include/linux/syscalls.h中定义了sys_socket函数的函数原型(prototype)asmlinkage long sys_socket(int, int, int);系统调用函数必须满足:asmlinkage long sys_##function-name(##ar

2013-10-09 21:40:34 1597

转载 .bss .data .text 区别

BSS段在采用段式内存管理的架构中,BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。数据段在采用段式内存管理的架构中,数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。

2013-09-22 11:14:42 705

原创 linux使用

1、开启路由转发功能echo "1">/proc/sys/net/ipv4/ip_forwardThe '1' in "/proc/sys/net/ipv4/ip_forward" enables IP forwarding.2、设置linux日期#date -s "2007-08-03 14:15:00"3、windows路由开启在注册表编辑器中,定位

2013-09-05 21:34:36 617

转载 Linux内核配置系统浅析

1、随着 Linux 操作系统的广泛应用,特别是 Linux 在嵌入式领域的发展,越来越多的人开始投身到 Linux 内核级的开发中。面对日益庞大的 Linux 内核源代码,开发者在完成自己的内核代码后,都将面临着同样的问题,即如何将源代码融入到 Linux 内核中,增加相应的 Linux 配置选项,并最终被编译进 Linux 内核。这就需要了解 Linux 的内核配置系统。众所周

2013-09-02 10:20:11 696

转载 Linux Netfilter实现机制和扩展技术

2.4.x的内核相对于2.2.x在IP协议栈部分有比较大的改动, Netfilter-iptables更是其一大特色,由于它功能强大,并且与内核完美结合,因此迅速成为Linux平台下进行网络应用扩展的主要利器,这些扩展不仅包括防火墙的实现--这只是Netfilter-iptables的基本功能--还包括各种报文处理工作(如报文加密、报文分类统计等),甚至还可以借助Netfilter-iptable

2013-08-20 22:45:06 919

转载 linux下的管理内存相关的函数

malloc的实现,在linux下的实现是这样的,当所需要分配的内存大于128k,会用mmap(匿名映射)来实现。小于128k使用在堆分配(改天会分析下malloc函数的源码实现)。 这里还有几个 mallopt(int param,int value); 这个函数能设置一些内存分配管理的参数,也就是设置param为value的值(比如我们想要强制所分配的内存是mm

2013-08-20 22:30:11 780

转载 linux 内核tcp拥塞处理(一)

这次我们来分析tcp的拥塞控制,我们要知道协议栈都是很保守的,也就是说只要有一个段被判断丢失,它就会认为发生了拥塞.而现在还有另一种,也就是路由器来通知我们发生了拥塞,这里ip头还会有一个ECN的位(准确的说是两位),来表示已经发送拥塞,不过这里要注意首先收到ECN的是接受方,可是真正需要被通知的却是发送方,因此当接受方收到ECN之后,用下一个ack来通知发送方有拥塞发生了,然后发送方才会做出响应

2013-08-20 22:30:02 1525

转载 内核tcp协议栈SACK的处理

上一篇处理ack的blog中我们知道当我们接收到ack的时候,我们会判断sack段,如果包含sack段的话,我们就要进行处理。这篇blog就主要来介绍内核如何处理sack段。 SACK是包含在tcp的option中的,由于tcp的头的长度的限制,因此SACK也就是最多包含4个段,也就是32个字节。我们先来看tcp中的SACK段的表示: Java代码  str

2013-08-20 22:29:45 1694

转载 内核tcp的ack的处理

我们来看tcp输入对于ack,段的处理。 先是ack的处理,在内核中,处理ack段是通过tcp_ack来进行的。 这个函数主要功能是: 1 update重传队列,并基于sack来设置skb的相关buf。 2 update发送窗口。 3 基于sack的信息或者重复ack来决定是否进入拥塞模式。 在看之前我们要知道tcp是累积确认的。为了解决带来的缺

2013-08-20 22:29:37 2734

转载 内核处理time_wait状态详解

这次来详细看内核的time_wait状态的实现,在前面介绍定时器的时候,time_wait就简单的介绍了下。这里我们会先介绍tw状态的实现,然后来介绍内核协议栈如何处理tw状态。 首先我们要知道在linux内核中time_wait的处理是由tcp_time_wait这个函数来做得,比如我们在closing状态收到一个fin,就会调用tcp_time_wait.而内核为time_wait状态

2013-08-20 22:28:57 3209

转载 tcp协议栈处理各种事件的分析

首先我们来看socket如何将一些状态的变化通知给对应的进程,比如可读,可写,出错等等。 先来看sock结构中这几个相关域: Java代码  struct sock {  ..........................  wait_queue_head_t   *sk_sleep;  ............................

2013-08-20 22:28:34 2492

转载 tcp的输入段的处理

tcp是全双工的协议,因此每一端都会有流控。一个tcp段有可能是一个数据段,也有可能只是一个ack,异或者即包含数据,也包含ack。如果是数据段,那么有可能是in-sequence的段,也有可能是out-of-order的段。如果是in-sequence的段,则马上加入到socket的receive队列中,如果是out-of-order的段,则会加入到socket的ofo队列。一旦当我们接收到数据

2013-08-20 22:28:26 825

转载 内核协议栈tcp层的内存管理

我们先来看tcp内存管理相关的几个内核参数,这些都能通过proc文件系统来修改: Java代码  ///内核写buf的最大值.  extern __u32 sysctl_wmem_max;  ///协议栈读buf的最大值  extern __u32 sysctl_rmem_max;  这两个值在/proc/sys/net/core 下。这

2013-08-20 22:28:04 2819

转载 linux内核定时器的实现

由于linux还不是一个实时的操作系统,因此如果需要更高精度,或者更精确的定时的话,可能就需要打一些实时的补丁,或者用商用版的实时linux,. 这里内的定时器最小间隔也就是1个tick. 这里还有一个要注意的,我这里的分析并没有分析内核新的hrt 定时器.这个定时器是Monta Vista加入到内核的一个高精度的定时器的实现. 先来看几个相关的数据结构. ///这个是

2013-08-20 22:27:45 835

转载 linux内核中tcp连接的断开处理

我们这次主要来分析相关的两个断开函数close和shotdown以及相关的套接口选项SO_LINGER。这里要注意SO_LINGER对shutdown无任何影响。它只对close起作用。 先来坎SO_LINGER所对应的数据结构: Java代码  struct linger {  ///linger的开关      int     l_onoff;

2013-08-20 22:27:20 7794

转载 linux内核tcp的定时器管理(二)

这次我们来看后面的3个定时器; 首先是keep alive定时器。 这个定时器主要是由于一条连接可能长时间idle,此时就需要发送探测包,来探测对端是否存活,如果对端收到这个探测包,它会立即相应一个ack,而当接受到ack之后,我们就能确认对端是存活的。否则我们会认为这个连接除了问题。 这个定时器是当一个新的连接变为establish状态的时候被激活,如果在当定时器超时还没

2013-08-20 22:27:10 926

转载 linux内核tcp的定时器管理(一)

在内核中tcp协议栈有6种类型的定时器: 1 重传定时器。 2 delayed ack定时器 3 零窗口探测定时器 上面三种定时器都是作为tcp状态机的一部分来实现的。 4 keep-alive 定时器 主要是管理established状态的连接。 5 time_wait定时器 主要是用来客户端关闭时的time_wait状态用到。

2013-08-20 22:26:52 2743

转载 linux 内核tcp接收数据的实现

相比于发送数据,接收数据更复杂一些。接收数据这里和3层的接口是tcp_v4_rcv(我前面的blog有介绍3层和4层的接口的实现).而4层和用户空间,也就是系统调用是socket_recvmsg(其他的读取函数也都会调用这个函数).而这个系统调用会调用__sock_recvmsg.下面我们就先来看下这个函数。 它的主要功能是初始化sock_iocb,以便与将来数据从内核空间拷贝到用户空间。

2013-08-20 13:51:38 2124

转载 linux 内核tcp数据发送的实现

在分析之前先来看下SO_RCVTIMEO和SO_SNDTIMEO套接口吧,前面分析代码时没太注意这两个.这里算是个补充. SO_RCVTIMEO和SO_SNDTIMEO套接口选项可以给套接口的读和写,来设置超时时间,在unix网络编程中,说是他们只能用于读和写,而像accept和connect都不能用他们来设置.可是我在阅读内核源码的过程中看到,在linux中,accept和connect

2013-08-20 13:51:00 5096

转载 tcp connection setup的实现(三)

先来看下accept的实现. 其实accept的作用很简单,就是从accept队列中取出三次握手完成的socket,并将它关联到vfs上(其实操作和调用sys_socket时新建一个socket类似).然后返回.这里还有个要注意的,如果这个传递给accept的socket是非阻塞的话,就算accept队列为空,也会直接返回,而是阻塞的话就会休眠掉,等待accept队列有数据后唤醒他.

2013-08-20 13:50:28 1058

转载 tcp connection setup的实现(二)

首先来看下内核如何处理3次握手的半连接队列和accept队列(其实也就是server端的三次握手的状态变换).而半连接队列和accept队列在内核如何表示,我们上次已经介绍过了,这里就不介绍了. 首先我们知道当3层的数据包到达之后会调用4层的协议handle,tcp的话就是tcp_v4_rcv.如何调用可以看我前面的blog: 而在tcp_v4_rcv中,则最终会调用tcp_v

2013-08-20 13:49:38 1028

转载 PCI驱动

关于PCI,看了很多资料,现在搞的还是很迷茫,不知道怎么回事,好在比起以前对其了解还是有一些进步的。因为具体我也没理解透彻,特别一些代码还是看不懂。所以自己暂时也就不怎么总结了,继续慢慢研究吧、要拿出愚公移山的精神来、下面我把自己研究过的一篇感觉好的文章,摘录过来:   一、PCI简介    PCI是一种外设总线规范。我们先来看一下什么是总线:总线是一种传输信号的路径或信道。典型情

2013-08-17 14:42:20 983

转载 Sys文件系统分析

还记得上篇讲到的platform总线、设备、驱动的知识??这里我们先来看一段documentation/filesystems/sysfs.txt里关于sysfs文件系统的描述:  sysfs is a ram-based filesystem initially based on ramfs.It provides a means to export kernel data struct

2013-08-17 14:22:38 1353

转载 理解 Proc 文件系统

/proc --- 一个虚拟文件系统/proc 文件系统是一种内核和内核模块用来向进程 (process) 发送信息的机制 (所以叫做 /proc)。这个伪文件系统让你可以和内核内部数据结构进行交互,获取 有关进程的有用信息,在运行中 (on the fly) 改变设置 (通过改变内核参数)。 与其他文件系统不同,/proc 存在于内存之中而不是硬盘上。如果你察看文件 /proc/mounts

2013-08-17 14:09:04 628

转载 tcp connection setup的实现(一)

bind的实现: 先来介绍几个地址结构. struct sockaddr 其实相当于一个基类的地址结构,其他的结构都能够直接转到sockaddr.举个例子比如当sa_family为PF_INET时,sa_data就包含了端口号和ip地址(in_addr结构). Java代码  struct sockaddr {      sa_family_

2013-08-16 09:45:14 1447

转载 linux内核中socket的实现

首先来看整个与socket相关的操作提供了一个统一的接口sys_socketcall. 下面就是它的代码片段: Java代码  asmlinkage long sys_socketcall(int call, unsigned long __user *args)  {      unsigned long a[6];      unsigned

2013-08-15 22:42:28 2449

转载 ip层和4层的接口实现分析

首先来看一下基于3层的ipv4以及ipv6实现的一些4层的协议: 这里要注意并没有IGMPV6,这是因为在ipv6中,它是作为iCMPv6的一部分实现的. 首先我们要知道输入数据包的ip头中的protocol域标识了,将要传递的4层协议. 我们这里主要介绍的是ip数据包从3层传递到4层的接口(也就是输入帧接口).而输出帧的处理,我前面的blog都已经

2013-08-15 22:40:58 783

转载 linux下ip协议(V4)的实现(五)

这次主要介绍一些ip层管理以及统计相关的东西. 首先来看 long-living ip peer information. 我们知道ip协议是无状态的协议.这里内核为了提升性能.为每个目的ip地址(换句话说,也就是和本机进行通信过的主机)保存了一些信息. peer子系统一般是被tcp,或者routing子系统所使用. 这个信息的数据结构是inet_peer,它是一棵

2013-08-15 22:39:25 1270

转载 linux下ip协议(V4)的实现(四)

这次主要介绍的是ip层的切片与组包的实现。 首先来看一下分片好的帧的一些概念: 1 第一个帧的offset位非0并且MF位为1 2 所有的在第一个帧和最后一个帧之间的帧都拥有长度大于0的域 3 最后一个帧MF位为0 并且offset位非0。(这样就能判断是否是最后一个帧了). 这里要注意在linux中,ip头的frag_off域包含了 rfcip头的定义中的

2013-08-15 22:37:46 1747

转载 linux下ip协议(V4)的实现(三)

这次我们来看数据包如何从4层传递到3层。 先看下面的图,这张图表示了4层和3层之间(也就是4层传输给3层)的传输所需要调用的主要的函数:  我们注意到3层最终会把帧用dst_output函数进行输出,而这个函数,我们上一次已经讲过了,他会调用skb->dst->output这个虚函数(他会对包进行3层的处理),而最终会调用一个XX_finish_output的函数,从而

2013-08-15 22:36:33 908

转载 linux下ip协议(V4)的实现(二)

这次主要介绍下forward和local delivery。 上次我们提到当ip_rcv_finish完成后后调用相关的发送函数ip_forward或者ip_local_deliver.这次就主要介绍这两个函数。 先来看forward。 forward一般由下面几部组成: 1 执行ip option 2 确定这个包能被forward 3 减小ttl,当ttl

2013-08-15 22:35:33 759

转载 linux下ip协议(V4)的实现(一)

首先来看校验相关的一些结构: 1 net_device结构: 包含一个features的域,这个表示设备的一些特性(比如控制校验),下面的几个flag就是用来控制校验: Java代码  #define NETIF_F_IP_CSUM     2   /* Can checksum TCP/UDP over IPv4. */  #define NE

2013-08-15 22:34:30 736

转载 linux下ip层的一些概念

首先来看这个ip层的结构: 这里看到非常多的netfilter hook,这是因为netfilter主要是针对ip层的。 ip层的主要任务有下面5个方面: 1 ip数据包的校验 2 防火墙的处理(也就是netfilter子系统) 3 处理options(这里的options包含了一些可选的信息。比如时间戳或者源路由option). 4 切

2013-08-15 22:33:33 704

转载 网桥在内核的实现

我们知道netdevice有一个priv域,这个域用来保存设备的私有数据,当这个设备是一个网桥的时候,priv域也就指向一个struct net_bridge. 接下来看net_bridge以及相关的数据结构: Java代码  struct net_bridge  {  ///自旋锁      spinlock_t          lock;  

2013-08-15 22:32:21 771

转载 Spanning Tree Protocol介绍

Spanning Tree Protocol(STP)主要是用在网桥上,用来避免网络回路,并制造冗余连接(也就是保证网络的可靠性). 这里只是一个大概的介绍,具体的还是要去看IEEE 的 802.1D STP的文档。 先看下面的图: 我们可以看到在stp中,只有一个根节点,然后root port指的是将此网桥和root连接起来的那个端口,而designated

2013-08-15 22:31:10 2020

转载 linux下的网桥介绍

网桥用来连接不同的网段。使不同的网段能够相互通信,看起来很像三层的路由。它能够有多个port,从而能够将数据帧从一个port复制到另一个port。 这里要注意一点,linux下的网桥只能用于以太网。 来看下示意图:  其中一个是bridge,一个是route。 网桥的主要工作是从输入帧学习主机的位置,建立一个地址的表(也就是表明这个主机(mac地址)属于那个

2013-08-15 22:28:58 915

转载 链路层到网络层的数据传递

我们知道在tcp/ip模型中,基本每一层都可以处理多重协议类型,那么当一个输入帧到达后,内核的每一层是如何来取得相应的处理函数呢?也就是说当我要把包传递给上层的时候,如何取得相应协议的处理函数。 我们这里先来看从二层如何把把数据传递给三层。 Java代码  struct sk_buff {  ...............................

2013-08-15 22:27:40 1266

SIM908GPRS

SIM908资料大全,包括AT指令集,及相关的应用资料,很有实用价值

2011-11-22

SPI总线协议介绍

SPI总线协议介绍.pdf ,很有价值,很实用

2011-11-22

Microsoft内部关于WinCE培训资料

Microsoft内部关于WinCE培训资料,很有参考价值哦

2011-10-09

VC上位机For 51

c51上位机程序,用vc很有参考价值,很实用

2011-10-09

数字信号处理C语言程序集

数字信号处理语言程序集,很有实用价值,很简单

2011-10-09

串口调试精灵编程

vc 下面串口调试精灵编程,很有参考价值哦

2011-09-30

维纳滤波程序

基于VS2005维纳滤波程序,很有参考价值

2011-09-30

基于矩阵特征值分解谱分析(music等等)

基于矩阵特征值分解谱分析(music等等)

2011-09-30

wince5.0 GPIO测试程序

wince5.0 GPIO测试程序,实现对led控制

2011-09-30

wince5.0串口通信

wince5.0串口通信可以实现与计算机收发信息,很简单很实用

2011-09-30

DIBMotionRestore

运动图像复原方法很实用,只分析在x方向匀速运动的情况!!!

2011-04-14

图像旋转matlab

matlab旋转很实用的程序!不过没有插值!有点缺陷

2011-03-30

CWnd-MFC中文手册

CWnd类提供了微软基础类库中所有窗口类的基本功能。 CWnd对象与Windows的窗口不同,但是两者有紧密联系。CWnd对象是由CWnd的构造函数和析构函数创建或销毁的。另一方面,Windows的窗口是Windows的一种内部数据结构,它是由CWnd的Create成员函数创建的,而由CWnd的虚拟析构函数销毁。DestroyWindow函数销毁Windows的窗口,但是不销毁对象。 CWnd类和消息映射机制隐藏了WndProc函数。接收到的Windows通知消息通过消息映射被自动发送到适当的CWnd OnMessage成员函数。你可以在派生类中重载OnMessage成员函数以处理成员的特定消息。 CWnd类同时还使你能够为应用程序创建Windows的子窗口。先从CWnd继承一个类,然后在派生类中加入成员变量以保存与你的应用程序有关的数据。在派生类中实现消息处理成员函数和消息映射,以指定当消息被发送到窗口时应该如何动作。 你可以经过两个步骤来创建一个子窗口。首先,调用构造函数CWnd以创建一个CWnd对象,然后调用Create成员函数以创建子窗口并将它连接到CWnd对象。 当用户关闭你的子窗口时,应销毁CWnd对象,或者调用DestroyWindow成员函数以清除窗口并销毁它的数据结构。 在微软基础类库中,从CWnd派生了许多其它类以提供特定的窗口类型。这些类中有许多,包括CFrameWnd,CMDIFrameWnd,CMDIChildWnd,CView和CDialog,被用来进一步派生。从CWnd派生的控件类,如CButton,可以被直接使用,也可以被进一步派生出其它类来。

2010-11-23

空空如也

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

TA关注的人

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