![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux驱动
Whisper_J
这个作者很懒,什么都没留下…
展开
-
linux时间管理 之 jiffies
1、jiffies 又称时钟滴答,是一个全局变量,它的值在系统引导的时候初始化为0,在时钟中断初始化完成后,每次时钟中断发生,在时钟中断处理例程中都会将jiffies的值 +1。 jiffies_64:为了解决jiffies溢出问题,更重要的是通过jiffies_64可以知道自开机以来的时间间隔。2、HZ HZ表示时钟中断发生的频率。可以在.config原创 2012-09-27 17:44:35 · 7274 阅读 · 0 评论 -
linux虚拟内存管理 之 内存映射
1、内存映射主要是将用户空间的MMAP区域的虚拟地址空间映射到物理内存或者设备内存和IO空间 主要通过file_operation中的mmap来实现用户空间对设备内存的直接访问。2、设备缓存与设备内存 设备缓存:驱动程序分配管理的一段物理内存,是主内存RAM中的一部分。 设备内存:是设备自带的存贮空间,是设备的一部分 设备缓存与设备原创 2012-09-26 10:31:19 · 1496 阅读 · 0 评论 -
sk_buff
从网上转载了一篇讲sk_buff的文章,讲的很清楚,最棒的是还有图。sk_buff结构可能是linux网络代码中最重要的数据结构,它表示接收或发送数据包的包头信息。它在中定义,并包含很多成员变量供网络代码中的各子系统使用。 这个结构在linux内核的发展过程中改动过很多次,或者是增加新的选项,或者是重新组织已存在的成员变量以使得成员变量的布局更加清晰。它的成员变量可以大致分为以下几类:转载 2013-03-04 22:02:58 · 4794 阅读 · 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原创 2013-03-05 10:33:36 · 7614 阅读 · 0 评论 -
网卡驱动:数据包发送的流控机制-netif_start_queue/netif_wake_queue/netif_stop_queue
在网卡驱动中,内核为发送数据包的流量控制提供了几个主要的函数,用来在驱动程序和内核之间传递流控信息。主要有三个:1】netif_start_queue2】netif_wake_queue3】netif_stop_queue4】netif_queue_stoppedNETIF_STOP_QUEUE:【作用】在驱动程序中调用这个函数来告诉内核的网络子系统,当前网原创 2013-03-05 09:56:21 · 16567 阅读 · 1 评论 -
网卡驱动:载波检测-netif_carrier_ok/netif_carrier_on/netif_carrier_off
网卡在物理上具有载波侦听的功能,当网络连接完整或者网络链接断开时,网卡芯片硬件会自动设置寄存器标志位来标识。如网线链接断开的时候,会将LinkSts清位;重新链接网线,则硬件自动将此位置位。这样,在网卡驱动中读写该位信息就可一判断网络是否链接通路。网卡驱动程序通过netif_carrier_on/netif_carrier_off/netif_carrier_ok来和内核网络子系统传递原创 2013-03-05 14:39:15 · 18218 阅读 · 0 评论 -
网卡驱动:设备挂起恢复-netif_device_attach/netif_device_detach
在网卡驱动程序中通常需要实现suspend和resume函数来支持设备的挂起和恢复操作。网络驱动程序可以用两个函数来告知网络子系统网络设备的挂起和恢复:1】netif_device_attach2】netif_device_detachNETIF_DEVICE_ATTCH:【作用】将net_device的state中的__LINK_STATE_PRESENT置位。同时开原创 2013-03-05 15:02:50 · 4269 阅读 · 0 评论 -
NAPI
内核为网络设备提供了NAPI机制来代替tasklet等。=======napi_struct结构体======【位置】include/linux/netdevice.h/* * Structure for NAPI scheduling similar to tasklet but with weighting */ struct napi_struct { _原创 2013-03-05 16:50:16 · 2311 阅读 · 0 评论 -
通过/proc访问内核空间
最初开发 /proc 文件系统是为了提供有关系统中进程的信息。但是由于这个文件系统非常有用,因此内核中的很多元素也开始使用它来报告信息,或启用动态运行时配置。/proc 文件系统包含了一些目录(用作组织信息的方式)和虚拟文件。虚拟文件可以向用户呈现内核中的一些信息,也可以用作一种从用户空间向内核发送信息的手段。实际上我们并不会同时需要实现这两点,但是本文将向您展示如何配置这个文件系统进行输入和转载 2013-03-12 14:04:45 · 1410 阅读 · 0 评论 -
linux内存管理 之 虚拟内存管理
1、虚拟内存空间的划分32位系统,1-4G的虚拟内存空间中,1-3G是用户空间,3G-4G是内核空间。内核空间分为几个部分:物理内存直接映射区(PAGE_OFFSET-----highmem) VMALLOC区(VMALLOC_START-----VMALLOC_END)原创 2012-09-24 13:08:37 · 804 阅读 · 0 评论 -
linux内存管理 之 slab分配器
1、页面分配器是页面级的内存分配工具,能分配2的order次幂的连续物理内存。 linux在页面级内存分配的基础上,开发了小内存分配方案--slab、slob、slub。 后两者分別针对大型系统和嵌入式系统。 2、slab分配器的思想 先利用页面分配器分配出单个或者一组连续的物理页面,然后在此基础上将整块页面分割成多个相等的小内存单元,以满足小内存原创 2012-09-24 11:19:24 · 712 阅读 · 0 评论 -
linux内存管理 之 物理内存管理
1、linux对物理内存的管理分为 内存节点、内存区域、内存页面对内存管理总体上分成两大部分:最底层的是页面级内存管理,然后是基于页面级内存管理之上的slab内存管理。2、内存节点a、内存节点是为了实现UMA和NUMA架构UMA: 一致内存访问NUMA:非一致内存访问struct pglist_data 来表示单个内存节点。3、内存区域zonestr原创 2012-09-21 15:26:44 · 773 阅读 · 0 评论 -
linux时间管理 之 延时操作
1、有时候为了同步CPU与外设的速度问题,带来了延时操作。 延时可以分为长延时和断延时。2、长延时 a、忙等待 while(i--) 优点:简单 缺点:i、忙等待,CPU效率低 ii、内核允许抢占时,时间不精确 b、让出处理器原创 2012-09-27 20:17:37 · 903 阅读 · 0 评论 -
linux内存管理 之 DMA
1、DMA:直接内存访问 用于在主存贮器和设备内存之间的大量数据的交换,无须CPU参与,可以提高系统效率。2、内核中的DMA层struct dma_map_ops { ____void* (*alloc_coherent)(struct device *dev, size_t size, ________________dma_addr_t原创 2012-09-27 11:06:10 · 2544 阅读 · 0 评论 -
linux的时间与时钟中断处理
转载地址:http://blog.sina.com.cn/s/blog_62401233010118et.html本文主要介绍在Linux下的时间实现以及系统如何进行时钟中断处理。一. Linux的硬件时间PC机中的时间有三种硬件时钟实现,这三种都是基于晶振产生的方波信号输入。这三种时钟为:(1)实时时钟RTC( Real Time Clock) (2)可编程间隔器PIT(P转载 2012-09-28 16:13:45 · 2242 阅读 · 0 评论 -
linux时间管理 之 内核定时器
1、内核定时器的定义 struct timer_list { /* * All fields that change during normal runtime grouped to the * same cacheline */ struct list_head原创 2012-09-28 15:26:26 · 651 阅读 · 0 评论 -
linux互斥与同步 之 顺序锁
1、顺序锁seqlock的思想对某一共享数据在读取的时候不加锁,写的时候加锁。引入一顺序值sequence,读取者在开始读取前读取该变量的值,在读取后再次读取该值,如果两次读取的值不一致,说明在读取期间数据发生变化,读取无效。写入者通过自旋锁做写入者之间的互斥。每次写入前,将sequence值加1,写入之后,再次将sequence值加1。在学如过程中spinlock对其他写入者互斥翻译 2012-09-20 16:23:04 · 902 阅读 · 0 评论 -
linux互斥与同步 之 原子变量和位操作
1、有时候要保护的共享资源是一个简单的变量,可以通过架构相关的原子命令来实现互斥2、atomic_t的定义typedef struct { int counter;}3、在Linux系统中,atomic_打头的是原子操作函数,这些函数的实现都依赖于特定的硬件平台。static inline void atomic_inc(atom翻译 2012-09-20 16:34:44 · 964 阅读 · 0 评论 -
linux内存管理 之 页面分配器page allocator
1、a、物理内存分配的page allocator 是页面级的内存分配,是建立在页面伙伴关系的基础上的分配方式。 只能分配2 order次方大小的物理页面。 mem_map、物理内存、虚拟地址空间的关系如下图: TODO b、内存分配的两个基本函数 alloc_pages原创 2012-09-21 17:04:30 · 1114 阅读 · 0 评论 -
linux 之 等待队列
1、等待队列由等待队列头和队列节点构成,当进程要获得某一资源而暂时不能得到时候,进程可以进入睡眠状态内核为此要生成一个队列节点,并将睡眠的进程挂到等待队列中。2、等待队列头wait_queue_head_tstruct __wait_queue_head { spinlock_t lock; struct list_head task_l原创 2012-09-21 10:10:38 · 494 阅读 · 0 评论 -
intel 网卡点滴
S = PCI - copperEF = PCI express - fibrePF = PCI express - fibreET = PCI express - copperPT = PCI express - copperXF = PCI-X - fibreMF = PCI-X - fibreMT = PCI-X - copperGT = PCI-X转载 2013-06-08 16:17:52 · 952 阅读 · 0 评论