
linux
sufwei
这个作者很懒,什么都没留下…
展开
-
linux下.so的动态调试
linux 动态库使用方法转载 2016-07-26 10:01:39 · 3513 阅读 · 0 评论 -
内核调试神器SystemTap
SystemTap是我目前所知的最强大的内核调试工具,有些家伙甚至说它无所不能:)转载 2016-02-02 11:15:55 · 2075 阅读 · 0 评论 -
数据包接收系列 — NAPI的原理和实现
概述 NAPI是linux新的网卡数据处理API,据说是由于找不到更好的名字,所以就叫NAPI(New API),在2.5之后引入。简单来说,NAPI是综合中断方式与轮询方式的技术。中断的好处是响应及时,如果数据量较小,则不会占用太多的CPU事件;缺点是数据量大时,会产生过多中断,而每个中断都要消耗不少的CPU时间,从而导致效率反而不如轮询高。轮询方式与中断方式相反,它更适合处转载 2016-02-02 11:13:02 · 489 阅读 · 0 评论 -
网卡驱动:传输超时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 · 1578 阅读 · 0 评论 -
Linux napi与netif简要分析
、linux网络接收函数与软中断的关系及初始化。 关于软中断的原理就不依依介绍了,本节主要介绍网络数据处理对软中断的使用(关于软中断的工作原理可参看 linux中断底半部之 softirq 原理与代码分析)。网络数据处理的软中断的注册是在函数net_dev_init进行初始化,主要是通过调用函数open_softirq,将rx、tx的处理函数注册到数组softirq_vec中相应软转载 2016-02-02 11:00:04 · 909 阅读 · 0 评论 -
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 · 580 阅读 · 0 评论 -
makefile是如何自动生成的
GNU make允许将一个软件项目的代码分开放在不同的源文件里,有改动的时候可以只对改动的文件重新编译,然后重新连接,这种编译管理方法提高了生成目标的效率。make要调用一个makefile文件来实现。Makefile的编写是使用make的关键问题。当工程里面包含的很多源文件,库,文件放在不同的子目录时,手动书写makefile文件不方便且容易出错。一般情况下我们用autoconf和autom转载 2016-01-14 14:00:38 · 337 阅读 · 0 评论 -
Automake的标准工程组织
一、总体上的目录:一般会有如下目录和文件,这些自己创建(见二)或用acmkdir自动生成:1. 目录:(1) 必选:m4: 第三方或自己写的用于configure.in中的宏doc: 各种文档src: 源码顶层目录(里面怎么细分是自己的事)config: 放置configure过程中的一些文件,使得顶层目录不那么多文件(2) 可选:include: 可选目录,你转载 2016-01-14 11:06:53 · 584 阅读 · 0 评论 -
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 · 2109 阅读 · 0 评论 -
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 · 3994 阅读 · 0 评论 -
autoconf 和 automake 生成 Makefile
本文介绍了在 linux 系统中,通过 Gnu autoconf 和 automake 生成 Makefile 的方法。主要探讨了生成 Makefile 的来龙去脉及其机理,接着详细介绍了配置Configure.in 的方法及其规则。引子无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或 make转载 2016-01-12 15:08:58 · 490 阅读 · 0 评论 -
使用 GNU autotools 改造一个软件项目
示例项目· 软件布局· Makefile 分析· GNU 的软件风格· 准备 autotools· 改造文件布局· autoscan· configure.ac 的基本结构· Makefile 文件的产生· 编写 Makefile.am 软件根目录 Makefile.am src/Makefile.am data/Makefile.转载 2016-01-12 11:04:59 · 595 阅读 · 0 评论 -
系统级性能分析工具 — 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 · 470 阅读 · 0 评论 -
内核调试工具 — kdump & crash
kdump是系统崩溃的时候,用来转储运行内存的一个工具。系统一旦崩溃,内核就没法正常工作了,这个时候将由kdump提供一个用于捕获当前运行信息的内核,该内核会将此时内存中的所有运行状态和数据信息收集到一个dump core文件中以便之后分析崩溃原因。一旦内存信息收集完成,可以让系统将自动重启。 kdump是RHEL5之后才支持的,2006被主线接收为内核的一部分。它的原理简单来转载 2016-02-02 11:42:14 · 2456 阅读 · 0 评论 -
Linux 网卡驱动学习(一)(分析一个虚拟硬件的网络驱动例子)
在Linux,网络分为两个层,分别是网络堆栈协议支持层,以及接收和发送网络协议的设备驱动程序层。网络堆栈是硬件中独立出来的部分,主要用来支持TCP/IP等多种协议,网络设备驱动层是连接网络堆栈协议层和网络硬件的中间层。网络设备驱动程序的主要功能是:(1)模块加载或内核启动相关的初始化处理(2)清除模块时的处理(3)网络设备的检索和探测(4)网络设备的初始化和注册(5)打转载 2016-02-22 09:25:18 · 651 阅读 · 0 评论 -
解决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 · 6320 阅读 · 0 评论 -
SIGTERM和SIGINT的含义
SIGHUP 终止进程 终端线路挂断SIGINT 终止进程 中断进程SIGQUIT 建立CORE文件终止进程,并且生成core文件SIGILL 建立CORE文件 非法指令SIGTRAP 建立CORE文件 跟踪自陷SIGBUS 建立CORE文件 总线错误SIGSEGV 建立CORE文件转载 2016-06-08 08:58:32 · 17008 阅读 · 0 评论 -
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 · 459 阅读 · 0 评论 -
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 · 398 阅读 · 0 评论 -
I/O体系结构和设备驱动程序(五)
4.5、直接内存访问(DMA)最初的PC体系结构中,CPU是系统唯一的总线主控器,为了提取和存储RAM存储单元的值,CPU是唯一可以驱动地址/数据总线的硬件设备,随着诸如PCI这样的现代总线体系结构的出现,如果提供合适的电路,每一个外围设备都可以充当总线主控器。因此,现在所有的PC都包含一个辅助的DMA电路,它可以用来控制在RAM和I/O设备之间数据的传送。 DMA一旦被CPU激活,就转载 2016-02-23 14:31:49 · 1498 阅读 · 0 评论 -
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 阅读 · 0 评论 -
Linux 网卡驱动学习(六)(应用层、tcp 层、ip 层、设备层和驱动层作用解析)
本文将介绍网络连接建立的过程、收发包流程,以及其中应用层、tcp层、ip层、设备层和驱动层各层发挥的作用。1、应用层对于使用socket进行网络连接的服务器端程序,我们会先调用socket函数创建一个套接字:fd = socket(AF_INET, SOCK_STREAM, 0);以上指定了连接协议,socket调用返回一个文件句柄,与soc转载 2016-02-22 10:40:45 · 590 阅读 · 0 评论 -
Linux 网卡驱动学习(五)(收发包具体过程)
设备初始化函数网络设备驱动在 Linux 内核中是以内核模块的形式存在的,对应于模块的初始化,需要提供一个初始化函数来初始化网络设备的硬件寄存器、配置 DMA 以及初始化相关内核变量等。设备初始化函数在内核模块被加载时调用,它的函数形式如下: static int __init xx_init (void) { …… } module_init(xx_init);转载 2016-02-22 10:35:16 · 946 阅读 · 0 评论 -
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 · 1255 阅读 · 0 评论 -
Linux 网卡驱动学习(三)(net_device 等数据结构)
【摘要】前文对网络驱动例子进行一个简单的梳理总结,本文贴出 net_device 的数据结构以及一些驱动中常用的数据结构。1、网络设备驱动结构1)、网络协议接口层向网络层协议提供提供统一的数据包收发接口,不论上层协议为ARP还是IP,都通过dev_queue_xmit()函数发送数据,并通过netif_rx()函数接受数据。这一层的存在使得上层协议独立于具体的设备。2)、网络设备接转载 2016-02-22 10:22:45 · 880 阅读 · 0 评论 -
Linux 网卡驱动学习(二)(网络驱动接口小结)
摘要】前文我们分析了一个虚拟硬件的网络驱动例子,从中我们看到了网络设备的一些接口,其实网络设备驱动和块设备驱动的功能比较类似,都是发送和接收数据包(数据请求)。当然它们实际是有很多不同的。1、引言首先块设备在/dev目录下有设备节点,而网络设备没有这样的设备入口。read,write等常规的文件接口在网络设备下也没有意义。 最大的区别在于:块设备只响应内核的数据请求;而网络设备驱动要异转载 2016-02-22 09:27:04 · 508 阅读 · 0 评论 -
Kernel启动时 驱动是如何加载的module_init,加载的次序如何
Init.h中有相关initcall的启动次序,在system.map中可看出具体的__initcall指针的前后次序转载 2016-01-11 16:02:41 · 612 阅读 · 0 评论 -
ubuntu环境下重新编译内核
由于调试内核、驱动或工作需要,有可能需要对ubuntu下的内核进行重新编译,本文对内核重新编译过程进行简单分析,在进行重新编译内核前你可以通过uname -a来确认你的linux系统的当前版本。1.根据你的需要获取内核源码,获取内核源码有两种方式,一种是直接到http://www.kernel.org/下载你要的源码,另一种是通过在terminal中输入shell命令 sudo apt-g转载 2016-01-11 15:57:57 · 354 阅读 · 0 评论 -
module_init的加载和释放
像你写C程序需要包含C库的头文件那样,Linux内核编程也需要包含Kernel头文件,大多的Linux驱动程序需要包含下面三个头文件:#include #include #include 其中,init.h 定义了驱动的初始化和退出相关的函数,kernel.h 定义了经常用到的函数原型及宏定义,module.h 定义了内核模块相关的函数、变量及宏。 几乎每个lin转载 2016-01-07 14:41:05 · 263 阅读 · 0 评论 -
信号量semaphore
1.信号量用于保护临界区的一种方法。临界区:在任何给定的时间,只有一个线程可以执行的代码2.只有得到信号量的进程才能执行临界区代码,当得不到信号量时,进入休眠等待状态-----------------------------------------------------------1.定义信号量struct semaphore sem;2.初始化信号量void sema_init转载 2016-01-07 14:40:02 · 317 阅读 · 0 评论 -
详解Linux内核之双向循环链表
本文详解了内核中面向对象的list结构的原理,以及如何以list为内嵌对象来构造自己的链表结构,如何从内嵌list对象获得自定义的对象指针;探讨了各种宏或者函数的详细使用方法及怎样以通用list结构来操作自定义对象。【关键字】双向循环链表,list,list_entry,typeof,containerof,list_for_each, list_for_each_entry 1、双循转载 2016-01-07 14:38:31 · 440 阅读 · 0 评论 -
linux等待队列wait_queue_head_t和wait_queue_t
等待队列在linux内核中有着举足轻重的作用,很多linux驱动都或多或少涉及到了等待队列。因此,对于linux内核及驱动开发者来说,掌握等待队列是必须课之一。 Linux内核的等待队列是以双循环链表为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。它有两种数据结构:等待队列头(wait_queue_head_t)和等待队列项(wait_queue_t)。等待队列头和等待转载 2016-01-07 14:36:15 · 374 阅读 · 0 评论 -
struct ethhdr结构体详解
在linux系统中,使用struct ethhdr结构体来表示以太网帧的头部。这个struct ethhdr结构体位于#include之中。1234567891011121314151转载 2016-01-07 14:32:15 · 1902 阅读 · 0 评论 -
linux中 likely与unlikely
ikely() 与 unlikely()是内核中定义的两个宏。位于/include/linux/compiler.h中,具体定义如下:#define likely(x) __builtin_expect(!!(x), 1)#define unlikely(x) __builtin_expect(!!(x), 0)__builtin_expect是gcc中提供的一个预处理命令,有转载 2016-01-07 14:27:48 · 469 阅读 · 0 评论 -
Linux PCI网卡驱动的详细分析
学习应该是一个先把问题简单化,在把问题复杂化的过程。一开始就着手处理复杂的问题,难免让人有心惊胆颤,捉襟见肘的感觉。读Linux网卡驱动也是一样。那长长的源码夹杂着那些我们陌生的变量和符号,望而生畏便是理所当然的了。不要担心,事情总有解决的办法,先把一些我们管不着的代码切割出去,留下必须的部分,把框架掌握了,哪其他的事情自然就水到渠成了,这是笔者的心得。 一般在使用的Linux网卡驱动代码动转载 2016-01-20 10:30:53 · 643 阅读 · 0 评论 -
I/O空间介绍
I/O空间-----I/O端口和I/O内存 首先上图,如下:外设中的寄存器被称为I/O端口,外设中的内存被称为I/O内存。二者合起来统称为I/O空间。 设备驱动程序要直接访问外设或其接口卡上的物理电路,这部分通常都是以寄存器的形式出现。外设寄存器称为I/O端口,通常包括:控制寄存器、状态寄存器和数据寄存器三大类。根据访问外设寄存器的不同方式转载 2016-01-18 15:03:22 · 935 阅读 · 0 评论 -
Linux下的PCI总线驱动
一.理论1. PCI总线的特点:(1)速度上快,时钟频率提高到33M,而且还为进一步把时钟频率提高到66MHZ、总线带宽提高到64位留下了余地。(2)对于地址的分配和设置,系统软件课自动设置,每块外设通过某种途径告诉系统该外设有几个存储区间和I/O地址区间,每个区间的大小以及本地地址。系统软件知道了总共有多少外设以及各种的存储空间后就会统一为外设分配物理地址。(3)对于总线的竞争转载 2016-01-18 14:39:45 · 1167 阅读 · 0 评论 -
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 · 411 阅读 · 0 评论 -
常用的网络驱动收包方式
noNAPI: MAC每收到一个包或者BD即产生一个中断,缺点是网络PPS高时,CPU将大部分时间耗费在了MAC中断上。netpoll: 轮询收包,实时性差。NAPI: 中断+轮询方式,MAC收到第一个包时产生中断,收包程序中关闭该中断,启动轮询收包,知道收完buffer中的所有包或者是netdev_max_backlog个包之后,重新打开中断。S转载 2016-01-18 09:27:05 · 1696 阅读 · 0 评论 -
用户空间与内核的交互---IOCTL
在procfs一节中我们提到过ioctl,它的作用编写过驱动和从事过网络编程的人,一定不会陌生. 就是由于它架构的思路的精妙之处,屏蔽了大量抽象的东西.这里我们就分析下它的使用和架构,当然这里不会分析ioctl系统调用的实现.这里参考资料有《linux设备驱动程序》,《深入理解linux网络技术内幕》 ,当然也少不了网上好的文章和帖子. 或许我们最熟悉就是文件的操作,文件有read转载 2016-01-07 14:42:14 · 574 阅读 · 0 评论