自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

sufwei的专栏

只有每时每刻的用心,才有面对困难时的从容

  • 博客(61)
  • 资源 (13)
  • 收藏
  • 关注

原创 从C++的角度理解C#的Event

使用回调函数的概念理解C#的Event

2023-02-24 14:41:43 595

转载 linux下.so的动态调试

linux 动态库使用方法

2016-07-26 10:01:39 3510

转载 解决Eclipse交叉编译环境下出现Symbol"NULL" could not be resolved

此处,Eclipse中交叉编译C项目,出错:Symbol ‘NULL’ could not be resolved的原因是:因为没有把NULL的定义所在的文件stddef.h所在的路径xxx/include/linux加入到当前项目的include所以解决办法是:把对应的include/linux路径加到对应的项目的include中即可:右击项目->C/C++

2016-06-13 09:56:31 6314

转载 SIGTERM和SIGINT的含义

SIGHUP     终止进程     终端线路挂断SIGINT     终止进程     中断进程SIGQUIT   建立CORE文件终止进程,并且生成core文件SIGILL   建立CORE文件       非法指令SIGTRAP   建立CORE文件       跟踪自陷SIGBUS   建立CORE文件       总线错误SIGSEGV   建立CORE文件  

2016-06-08 08:58:32 17004

转载 How to enable time stamps for logs in 'dmesg' on Gaia and SecurePlatform

SymptomsLogs that are written into dmesg kernel ring buffer do not have timestamps.CauseDefault configuration.SolutionTable of Contents:BackgroundEnable time stam

2016-03-29 09:20:10 457

转载 list_for_each_entry

[cpp] view plain copyprint?/**  * list_for_each_entry  -   iterate over list of given type  * @pos:    the type * to use as a loop cursor.  * @head:   the head for your list.  * @membe

2016-02-23 15:47:57 396

转载 I/O体系结构和设备驱动程序(五)

4.5、直接内存访问(DMA)最初的PC体系结构中,CPU是系统唯一的总线主控器,为了提取和存储RAM存储单元的值,CPU是唯一可以驱动地址/数据总线的硬件设备,随着诸如PCI这样的现代总线体系结构的出现,如果提供合适的电路,每一个外围设备都可以充当总线主控器。因此,现在所有的PC都包含一个辅助的DMA电路,它可以用来控制在RAM和I/O设备之间数据的传送。 DMA一旦被CPU激活,就

2016-02-23 14:31:49 1498

转载 Linux 网卡驱动学习(七)(MAC 与 IP)

Linux 网卡驱动学习(七)(MAC 与 IP)标签: Linux网卡驱动MACIP2015-08-17 22:02 441人阅读 评论(0)收藏举报分类: 网卡驱动(8) 作者同类文章X版权声明:本文为博主原创文章,未经博主允许不得转载。目录(?)[+]MAC 地址IP 地址

2016-02-22 10:41:25 430

转载 Linux 网卡驱动学习(六)(应用层、tcp 层、ip 层、设备层和驱动层作用解析)

本文将介绍网络连接建立的过程、收发包流程,以及其中应用层、tcp层、ip层、设备层和驱动层各层发挥的作用。1、应用层对于使用socket进行网络连接的服务器端程序,我们会先调用socket函数创建一个套接字:fd = socket(AF_INET, SOCK_STREAM, 0);以上指定了连接协议,socket调用返回一个文件句柄,与soc

2016-02-22 10:40:45 589

转载 Linux 网卡驱动学习(五)(收发包具体过程)

设备初始化函数网络设备驱动在 Linux 内核中是以内核模块的形式存在的,对应于模块的初始化,需要提供一个初始化函数来初始化网络设备的硬件寄存器、配置 DMA 以及初始化相关内核变量等。设备初始化函数在内核模块被加载时调用,它的函数形式如下: static int __init xx_init (void) { …… } module_init(xx_init);

2016-02-22 10:35:16 942

转载 Linux 网卡驱动学习(四)(缓存描述符 Buffer Description)

Linux 内核中对网络设备进行描述的核心结构类型叫做 net_device,net_device 结构定义在 include/linux/netdevice.h 文件中。该结构的字段可以分为以下几类。1、net_device 结构分类(1)全局信息 该类中包含了设备名(name 字段)、设备状态(state 字段)、设备初始化函数(init 字段)等。 (2)硬件信息 该类中

2016-02-22 10:34:43 1253

转载 Linux 网卡驱动学习(三)(net_device 等数据结构)

【摘要】前文对网络驱动例子进行一个简单的梳理总结,本文贴出 net_device 的数据结构以及一些驱动中常用的数据结构。1、网络设备驱动结构1)、网络协议接口层向网络层协议提供提供统一的数据包收发接口,不论上层协议为ARP还是IP,都通过dev_queue_xmit()函数发送数据,并通过netif_rx()函数接受数据。这一层的存在使得上层协议独立于具体的设备。2)、网络设备接

2016-02-22 10:22:45 879

转载 Linux 网卡驱动学习(二)(网络驱动接口小结)

摘要】前文我们分析了一个虚拟硬件的网络驱动例子,从中我们看到了网络设备的一些接口,其实网络设备驱动和块设备驱动的功能比较类似,都是发送和接收数据包(数据请求)。当然它们实际是有很多不同的。1、引言首先块设备在/dev目录下有设备节点,而网络设备没有这样的设备入口。read,write等常规的文件接口在网络设备下也没有意义。 最大的区别在于:块设备只响应内核的数据请求;而网络设备驱动要异

2016-02-22 09:27:04 505

转载 Linux 网卡驱动学习(一)(分析一个虚拟硬件的网络驱动例子)

在Linux,网络分为两个层,分别是网络堆栈协议支持层,以及接收和发送网络协议的设备驱动程序层。网络堆栈是硬件中独立出来的部分,主要用来支持TCP/IP等多种协议,网络设备驱动层是连接网络堆栈协议层和网络硬件的中间层。网络设备驱动程序的主要功能是:(1)模块加载或内核启动相关的初始化处理(2)清除模块时的处理(3)网络设备的检索和探测(4)网络设备的初始化和注册(5)打

2016-02-22 09:25:18 650

转载 内核调试工具 — kdump & crash

kdump是系统崩溃的时候,用来转储运行内存的一个工具。系统一旦崩溃,内核就没法正常工作了,这个时候将由kdump提供一个用于捕获当前运行信息的内核,该内核会将此时内存中的所有运行状态和数据信息收集到一个dump core文件中以便之后分析崩溃原因。一旦内存信息收集完成,可以让系统将自动重启。 kdump是RHEL5之后才支持的,2006被主线接收为内核的一部分。它的原理简单来

2016-02-02 11:42:14 2452

转载 系统级性能分析工具 — Perf

从2.6.31内核开始,linux内核自带了一个性能分析工具perf,能够进行函数级与指令级的热点查找。 perf Performance analysis tools for Linux.Performance counters for Linux are a new kernel-based subsystem that provide a framework for al

2016-02-02 11:41:11 469

转载 内核调试神器SystemTap

SystemTap是我目前所知的最强大的内核调试工具,有些家伙甚至说它无所不能:)

2016-02-02 11:15:55 2074

转载 数据包接收系列 — NAPI的原理和实现

概述 NAPI是linux新的网卡数据处理API,据说是由于找不到更好的名字,所以就叫NAPI(New API),在2.5之后引入。简单来说,NAPI是综合中断方式与轮询方式的技术。中断的好处是响应及时,如果数据量较小,则不会占用太多的CPU事件;缺点是数据量大时,会产生过多中断,而每个中断都要消耗不少的CPU时间,从而导致效率反而不如轮询高。轮询方式与中断方式相反,它更适合处

2016-02-02 11:13:02 484

转载 网卡驱动:传输超时watchdog_timeo/ndo_tx_timeout

网络子系统提供了对传输超时的处理框架,在驱动程序中要支持传输超时处理,只需要实现net_device的watchtimeo和net_device_ops中的ndo_tx_timeout函数。1】watchdog_timeo【作用】用于实现传出超时的时间设定。1】ndo_tx_timeout【作用】在发送队列停止(netif_queue_stopped(dev)返回1),且watch

2016-02-02 11:05:47 1576

转载 Linux napi与netif简要分析

、linux网络接收函数与软中断的关系及初始化。   关于软中断的原理就不依依介绍了,本节主要介绍网络数据处理对软中断的使用(关于软中断的工作原理可参看 linux中断底半部之 softirq 原理与代码分析)。网络数据处理的软中断的注册是在函数net_dev_init进行初始化,主要是通过调用函数open_softirq,将rx、tx的处理函数注册到数组softirq_vec中相应软

2016-02-02 11:00:04 908

转载 linux 时间戳转换/dmesg 时间转换

摘要:linux时光戳转换 1. 将日期转换成时光戳 $date %s -d 04/24/2014 15:30:00 1398324600 2. 将时光戳转换成日期 $date -d @1398324600 Thu Apr 24 15:30:00 CST 2014 3. 将当前日期转换成时光戳 $date %s 1398765730 dmesg 时]linux时间戳转换1. 将

2016-01-31 11:26:56 2107

转载 linux状态及原理全剖析

linuxTable of Contents1 linux1.1 proc filesystem1.1.1 /proc1.1.1.1 /proc/meminfo1.1.1.2 /proc/stat1.1.1.3 /proc/swaps1.1.1.4 /proc/cmdline1.1.1.5 /proc/uptime1.1.1.6 /proc/version1

2016-01-31 09:54:20 3992

原创 伺服驱动器动力电和控制电

伺服驱动器的控制电和动力电讲解

2016-01-26 11:04:39 5332

转载 Linux PCI网卡驱动的详细分析

学习应该是一个先把问题简单化,在把问题复杂化的过程。一开始就着手处理复杂的问题,难免让人有心惊胆颤,捉襟见肘的感觉。读Linux网卡驱动也是一样。那长长的源码夹杂着那些我们陌生的变量和符号,望而生畏便是理所当然的了。不要担心,事情总有解决的办法,先把一些我们管不着的代码切割出去,留下必须的部分,把框架掌握了,哪其他的事情自然就水到渠成了,这是笔者的心得。  一般在使用的Linux网卡驱动代码动

2016-01-20 10:30:53 642

转载 I/O空间介绍

I/O空间-----I/O端口和I/O内存  首先上图,如下:外设中的寄存器被称为I/O端口,外设中的内存被称为I/O内存。二者合起来统称为I/O空间。               设备驱动程序要直接访问外设或其接口卡上的物理电路,这部分通常都是以寄存器的形式出现。外设寄存器称为I/O端口,通常包括:控制寄存器、状态寄存器和数据寄存器三大类。根据访问外设寄存器的不同方式

2016-01-18 15:03:22 930

转载 Linux下的PCI总线驱动

一.理论1.      PCI总线的特点:(1)速度上快,时钟频率提高到33M,而且还为进一步把时钟频率提高到66MHZ、总线带宽提高到64位留下了余地。(2)对于地址的分配和设置,系统软件课自动设置,每块外设通过某种途径告诉系统该外设有几个存储区间和I/O地址区间,每个区间的大小以及本地地址。系统软件知道了总共有多少外设以及各种的存储空间后就会统一为外设分配物理地址。(3)对于总线的竞争

2016-01-18 14:39:45 1162

转载 Linux下的PCI驱动编程

PCI设备上有三种地址空间:PCI的I/O空间、PCI的存储空间和PCI的配置空间。CPU可以访问PCI设备上的所有地址空间,其中I/O空间和存储空间提供给设备驱动程序使用,而配置空间则由Linux内核中的PCI初始化代码使用。内核在启动时负责对所有PCI设备进行初始化,配置好所有的PCI设备,包括中断号以及I/O基址,并在文件/proc/pci中列出所有找到的PCI设备,以及这些设备的参数和属性

2016-01-18 14:24:10 410

转载 常用的网络驱动收包方式

noNAPI:      MAC每收到一个包或者BD即产生一个中断,缺点是网络PPS高时,CPU将大部分时间耗费在了MAC中断上。netpoll:      轮询收包,实时性差。NAPI:      中断+轮询方式,MAC收到第一个包时产生中断,收包程序中关闭该中断,启动轮询收包,知道收完buffer中的所有包或者是netdev_max_backlog个包之后,重新打开中断。S

2016-01-18 09:27:05 1694

转载 The GNU configure and build system-configure的详细介绍

第一篇:The GNU configure and build systemIan Lance TaylorIntroductionGoalsToolsHistoryBuildingGetting StartedWrite configure.inWrite Makefile.amWrite acconfig.hGenerate filesExamp

2016-01-14 14:38:43 578

转载 makefile是如何自动生成的

GNU make允许将一个软件项目的代码分开放在不同的源文件里,有改动的时候可以只对改动的文件重新编译,然后重新连接,这种编译管理方法提高了生成目标的效率。make要调用一个makefile文件来实现。Makefile的编写是使用make的关键问题。当工程里面包含的很多源文件,库,文件放在不同的子目录时,手动书写makefile文件不方便且容易出错。一般情况下我们用autoconf和autom

2016-01-14 14:00:38 334

转载 Automake的标准工程组织

一、总体上的目录:一般会有如下目录和文件,这些自己创建(见二)或用acmkdir自动生成:1. 目录:(1) 必选:m4: 第三方或自己写的用于configure.in中的宏doc: 各种文档src: 源码顶层目录(里面怎么细分是自己的事)config: 放置configure过程中的一些文件,使得顶层目录不那么多文件(2) 可选:include: 可选目录,你

2016-01-14 11:06:53 581

转载 autoconf 和 automake 生成 Makefile

本文介绍了在 linux 系统中,通过 Gnu autoconf 和 automake 生成 Makefile 的方法。主要探讨了生成 Makefile 的来龙去脉及其机理,接着详细介绍了配置Configure.in 的方法及其规则。引子无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或 make

2016-01-12 15:08:58 488

转载 使用 GNU autotools 改造一个软件项目

示例项目· 软件布局· Makefile 分析· GNU 的软件风格· 准备 autotools· 改造文件布局· autoscan· configure.ac 的基本结构· Makefile 文件的产生· 编写 Makefile.am  软件根目录 Makefile.am     src/Makefile.am     data/Makefile.

2016-01-12 11:04:59 594

转载 Kernel启动时 驱动是如何加载的module_init,加载的次序如何

Init.h中有相关initcall的启动次序,在system.map中可看出具体的__initcall指针的前后次序

2016-01-11 16:02:41 610

转载 ubuntu环境下重新编译内核

由于调试内核、驱动或工作需要,有可能需要对ubuntu下的内核进行重新编译,本文对内核重新编译过程进行简单分析,在进行重新编译内核前你可以通过uname -a来确认你的linux系统的当前版本。1.根据你的需要获取内核源码,获取内核源码有两种方式,一种是直接到http://www.kernel.org/下载你要的源码,另一种是通过在terminal中输入shell命令 sudo apt-g

2016-01-11 15:57:57 354

转载 KBUILD系统原理分析

kbuild,即kernel build,用于编译Linux内核文件。kbuild对makefile进行了功能上的扩充,使其在编译内核文件时更加高效,简洁。大部分内核中的Makefile都是使用Kbuild组织结构的kbuild Makefile。 下面将分两部分介绍,首先介绍Linux的命令工具make及其所操作的makefile,它负责将源代码编译成可执行文件;然后介绍kbuild m

2016-01-11 11:19:02 2780

转载 linux内核可装载模块(lkm)传参机制 module_param()/module_param_string()

对于如何向模块传递参数,Linux kernel 提供了一个简单的框架。其允许驱动程序声明参数,并且用户在系统启动或模块装载时为参数指定相应值,在驱动程序里,参数的用法如同全局变量。  使用下面的宏时需要包含头文件。  通过宏module_param()定义一个模块参数:  module_param(name, type, perm);  name既是用户看到的参数名,又是模块内接

2016-01-11 09:42:55 604

转载 内核文件权限值 S_IRUGO=S_IRUSR | S_IRGRP | S_IROTH

mode_t 内核文件权限值 S_IRUGO=S_IRUSR | S_IRGRP | S_IROTH 创建一个 proc 文件根据对 proc 文件的不同使用,内核提供了多种包装函数来创建一个 proc 文件。方法一:struct proc_dir_entry *create_proc_entry(const char *name, mode_t m

2016-01-11 09:38:10 837

转载 简单实例讲解linux的module模块编译步骤

本文将直接了当的带你进入linux的模块编译。当然在介绍的过程当中,我也会添加一些必要的注释,以便初学者能够看懂。之所以要写这篇文章,主要是因为从书本上学的话,可能要花更长的时间才能学会整个过程,因为看书的话是一个学习过程,而我这篇文章更像是一个培训。所以实践性和总结性更强。通过本文你将会学到编译一个模块和模块makefile的基本知识。以及加载(卸载)模块,查看系统消息的一些知识;声明:

2016-01-08 15:41:30 279

转载 解析 Linux 内核可装载模块的版本检查机制

为保持 Linux 内核的稳定与可持续发展,内核在发展过程中引进了可装载模块这一特性。内核可装载模块就是可在内核运行时加载到内核的一组代码。通常 , 我们会在两个版本不同的内核上装载同一模块失败,即使是在两个相邻的补丁级(Patch Level)版本上。这是因为内核在引入可装载模块的同时,对模块采取了版本信息校验。这是一个与模块代码无关,却与内核相连的机制。该校验机制保证了内核装载的模块是用户认可

2016-01-08 15:16:04 824

Understanding Digital Signal Processing

进行数字信号处理的经典教程,对于傅里叶变换、Hilber分解等关键概念讲的很透彻

2015-11-17

Hilbert分解源码

对于Hilbert分解的源代码,用在经验模态分解以后,进行希尔伯特谱分析,供参考

2015-11-17

用VC++实现图像连通区域标记

用VC++实现图像连通区域标记,包含源代码

2010-03-30

C++笔试面试试题汇总

c++笔试面试试题的汇总,对于正找工作的是很好的参考!

2008-10-27

VC进行界面设计的各种技巧

包含对于VC的工具栏、状态栏、分割窗口、弹出式菜单等各种界面的编程实现,各种技巧,很全!

2008-10-16

MFC42UD的dll和lib

Unicode环境下需要的dll和lib,挺有用处

2008-09-03

linux多线程编程

是linux多线程编程的指导

2008-03-19

VC++高级界面制作源码

VC++高级界面制作源码,能够帮助你熟悉界面制作。

2008-03-16

一个好用的示波器类

一个好用的示波器类,用来进行曲线实时显示

2008-03-15

Programming Windows with MFC

Programming Windows with MFC

2008-03-15

IT常见面试笔试题

IT常见面试笔试题文档

2008-03-09

Berkey db

Berkey db is a database for embedded system

2008-03-08

空空如也

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

TA关注的人

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