linux驱动
tangtang_yue
这个作者很懒,什么都没留下…
展开
-
scatter / gather
什么是scatter / gather (2007-06-08 14:05:23)转载▼ 分类: 技术问题 scatter/gather方式是与block dma方式相对应的一种dma方式。 在dma传输数据的过程中,要求源物理地址和目标物理地址必须是连续的。但在有的计算机体系中,如IA,连续的存储器地址转载 2016-01-19 13:57:57 · 479 阅读 · 0 评论 -
上半部与下半部
中断处理是分为两个部分:中断处理程序是上半部,它接收到一个中断,就立即执行,但只做有严格时限的工作;而另外被叫做下半部的另外一个部分主要做被允许能稍后完成的工作。这个下半部正是今天的重点。 下半部的任务就是执行与中断处理密切相关但中断处理程序本生身不执行的任务。最好情况当然是中断处理程序把所有的工作都交給下半部执行,而自己啥都不做。因为我们总是希望中断处理程序尽可能快的返回。但是,转载 2016-01-20 09:57:53 · 797 阅读 · 0 评论 -
千兆以太网的物理层
千兆以太网的物理层分为物理编码子层PCS(Physical Coding Sublayer)、物理介质连接子层PMA(Physical Medium Attachment)和物理介质相关子层PMD(Physical Medium Dependent)三层其中PCS子层负责8b10b编码,它可以把从GMII口接收到的8位并行的数据转换成10位并行的数据输出。因为10比特的数据能有转载 2016-03-03 10:05:47 · 13407 阅读 · 0 评论 -
Linux内核配置和编译
一、引言: 本文档的内容大部份内容都是从网上收集而来,然后配合一些新的截 图(内核版本:V2.4.19)。在每一配置项后会有一个选择指南的部份,用来指导大家怎么样 根据自己的情况来做相应的选择;还有在每一个大项和文档的最后会有一个经验谈,它是一些高手们在应对问题和处理特有硬件时的一些经验(这个还得靠各位)。 文档最后会发到网上,到时会根据网友们的回复随时进行更新。 我们的目的是让我们有一个转载 2016-02-03 09:04:51 · 1374 阅读 · 0 评论 -
Linux日志级别详解
前几天,我在想printk中到底是哪些信息会打印到console上,哪些东西可以通过dmesg来查看。参考了网上一些资料以及自己做的一些实验,总结一下Linux中的console loglevel以及printk, dmesg知识。只有当printk打印信息时的loglevel小于console loglevel的值(即:优先级高于console loglevel),这些信息才会被打印到c转载 2016-02-03 10:09:44 · 1249 阅读 · 0 评论 -
在 Linux 下用 mkdir 命令来创建目录和子目录
了解了用 ls 命令在目录中列出条目后,现在我们要学习在 Linux 系统下创建目录。在 Linux 下,我们可以使用 mkdir 命令。Mkdir 是“make directory” 的缩写词。mkdir 是什么呢Mkdir 是一个用来在 Linux 系统下创建目录的命令。此命令属于内建命令。运行 mkdir 命令你可以在你的控制台直接键入 mkdir 来转载 2016-02-03 14:41:41 · 1889 阅读 · 0 评论 -
./configure参数配置
Linux环境下的软件安装,并不是一件容易的事情;如果通过源代码编译后在安装,当然事情就更为复杂一些;现在安装各种软件的教程都非常普遍;但万变不离其中,对基础知识的扎实掌握,安装各种软件的问题就迎刃而解了。Configure脚本配置工具就是基础之一,它是autoconf的工具的基本应用。'configure'脚本有大量的命令行选项。对不同的软件包来说,这些选项可能会有变化,但是许多基本的选项是转载 2016-02-03 16:56:32 · 608 阅读 · 0 评论 -
U-BOOT命令分析1
bootm 用于将内核镜像加载到内存的指定地址处,如果有需要还要解压镜像,然后根据操作系统和体系结构的不同给内核传递不同的启动参数,最后启动内核。一、arm 架构处理器对 linux 内核启动之前环境的五点需求1、cpu 寄存器设置 * R0 = 0 * R1 = 板级 id * R2 = 启动参数在内存中的起始地址2、cpu 模式转载 2016-02-04 11:18:49 · 286 阅读 · 0 评论 -
U-BOOT命令分析2
1、setenv 命令该命令用于设置环境变量,用法介绍如下[cpp] view plain copy# setenv setenv - set environment variables Usage: setenv name value ... - set environment variabl转载 2016-02-04 10:57:34 · 375 阅读 · 0 评论 -
kconfig .config makefile 之间关系
当我们编写完一个驱动后,我们要把它以模块形式编译或者直接编译进内核时,需要修改相关文件,其中最重要的便是kconfig ,makefile。主要是分析一下三者之间的关系,然后就其语法简要的谈一下。 当我们在内核源码目录下执行make (或者make menuconfig等命令)命令时,实际上是根据makefile 来进行编译的。 在mini2440开发板上编写了一个按键控转载 2016-02-02 15:49:39 · 557 阅读 · 0 评论 -
揭开linux内核中container_of的神秘面纱
在linux 内核中有一个大名鼎鼎的宏container_of(),这个宏是用来干嘛的呢?我们先来看看它在内核中是怎样定义的。呵呵,乍一看不知道是什么东东。我们先来分析一下container_of(ptr,type,member),这里面有ptr,type,member分别代表指针、类型、成员。看一个例子:Struct test {转载 2016-02-04 15:48:20 · 220 阅读 · 0 评论 -
sk_buff 详解
在2.6.24之后这个结构体有了较大的变化,此chǔ先说一说2.6.16版本的sk_buff,以及解释一些问题。 一、 先直观的看一下这个结构体~~~~~~~~~~~~~~~~~~~~~~在下面解释每个字段的意义~~~~~~~~~~~ struct sk_buff { /* These two members must be first. */转载 2016-02-04 15:50:59 · 1461 阅读 · 0 评论 -
linux网卡驱动程序分析
linux网卡驱动程序分析学习应该是一个先把问题简单化,在把问题复杂化的过程。一开始就着手处理复杂的问题,难免让人有心惊胆颤,捉襟见肘的感觉。读Linux网卡驱动也是一样。那长长的源码夹杂着那些我们陌生的变量和符号,望而生畏便是理所当然的了。不要担心,事情总有解决的办法,先把一些我们管不着的代码切割出去,留下必须的部分,把框架掌握了,哪其他的事情自然就水到渠成了,这是笔者的心得。转载 2016-02-04 16:00:32 · 476 阅读 · 0 评论 -
网卡驱动的队列数据的接收e100
网卡驱动和队列层中的数据包接收 一、从网卡说起 这并非是一个网卡驱动分析的专门文档,只是对网卡处理数据包的流程进行一个重点的分析。这里以Intel的e100驱动为例进行分析。 大多数网卡都是一个PCI设备,PCI设备都包含了一个标准的配置寄存器,寄存器中,包含了PCI设备的厂商ID、设备ID等等信息,驱动转载 2016-02-04 16:03:38 · 601 阅读 · 0 评论 -
那些情况该使用它们spin_lock到spin_lock_irqsave
Spinlock的目的是用来同步SMP中会被多个CPU同时存取的变量。在Linux中,普通的spinlock由于不带额外的语义,是用起来反而要非常小心。在Linux kernel中执行的代码大体分normal和interrupt context两种。tasklet/softirq可以归为normal因为他们可以进入等待;nested interrupt是interrupt context的一种转载 2016-02-04 16:08:07 · 282 阅读 · 0 评论 -
DMA映射
1.DMA通道DMA(Direct Memory Access)通道建立在设备和RAM之间,DMAC(DMA Controler)与设备I/O控制器相互作用共同实现数据传送。在PC中,DMA控制器位于主板上负责管理I/O总线的南桥上。典型的PC架构的数据通道示意图如下:DMAC(DMA Controller)一旦被CPU激活,就可以自行传送数据。在实转载 2016-02-04 16:11:43 · 4416 阅读 · 1 评论 -
网卡驱动的数据包发送接收
我们在许多网卡驱动中,都可以在网卡的中断函数中见到这一过程。但是,这一种方法,有一种重要的问题,就是大流量的数据来到,网卡会产生大量的中断,内核在中断上下文中,会浪费大量的资源来处理中断本身。所以,一个问题是,“可不可以不使用中断”,这就是轮询技术,所谓NAPI技术,说来也不神秘,就是说,内核屏蔽中断,然后隔一会儿就去问网卡,“你有没有数据啊?”……从这个描述本身可以看到,哪果数据转载 2016-02-04 16:24:20 · 2497 阅读 · 0 评论 -
ioctl函数
.ioctl的实现 一、ioctl的简介:虽然在文件操作结构体"struct file_operations"中有很多对应的设备操作函数,但是有些命令是实在找不到对应的操作函数。如CD-ROM的驱动,想要一个弹出光驱的操作,这种操作并不是所有的字符设备都需要的,所以文件操作结构体也不会有对应的函数操作。 出于这样的原因,ioctl就有它的用处了———转载 2016-02-04 16:30:16 · 351 阅读 · 0 评论 -
Linux DM9000网卡驱动程序完全分析
原文地址:http://blog.csdn.net/ypoflyer/article/details/6209922Linux DM9000网卡驱动程序完全分析说明1:本文分析基于内核源码版本为linux-2.6.31 说明2:本文在理解了linux中总线、设备和驱动模型的基础上加以分析代码 虽然Linux驱动程序应该是和具体的硬件平台分离的,但是为了更好的理解DM9000转载 2016-02-04 16:38:39 · 280 阅读 · 0 评论 -
MAC地址格式小结
原文地址:http://blog.csdn.net/skyflying2012/article/details/40322563之前一段时间在做网卡驱动的工作,现在产品量产,利用ifconfig eth hw ether在配置mac地址时发现一个问题,随机配置一个mac地址,发现有的会报出Cannot assign requested address。错误码是E转载 2016-02-04 16:42:15 · 2644 阅读 · 0 评论 -
内核request_mem_region 和 ioremap的理解
内核request_mem_region 和 ioremap的理解几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种: (1)I/O映射方式(I/O-mapped) 典型地,如X86处理器为外设专门实现了一个单独的地址转载 2016-02-04 16:45:06 · 244 阅读 · 0 评论 -
Linux的inode的理解
一、问题: 在一台Linux服务器的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了66%,还有12G的剩余空间。二、分析问题: 用df -i查看了一下/data分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。 inode译成中文就是索引节转载 2016-03-17 14:58:14 · 424 阅读 · 0 评论 -
字符设备驱动程序中重要的三个数据结构file_operations、inode、file
struct _file_operations在Fs.h这个文件里面被定义的,如下所示:struct file_operations { struct module *owner;//拥有该结构的模块的指针,一般为THIS_MODULES loff_t (*llseek) (struct file *, loff_t, int);//用来修改文件当前的读写位置转载 2016-03-17 15:41:04 · 2150 阅读 · 0 评论 -
Mac与Phy组成原理的简单分析
本文乃fireaxe原创,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,并注明原作者及原链接。内容可任意使用,但对因使用该内容引起的后果不做任何保证。作者:[email protected]博客:fireaxe.blog.chinaunix.netMac与Phy组成原理的简单分析1 1. general下图是网口结构简图。网口由CPU、MAC和PHY转载 2016-02-19 14:17:58 · 558 阅读 · 0 评论 -
嵌入式: jffs2,yaffs2,logfs,ubifs文件系统性能分析
在嵌入式领域,FLASH是一种常用的存储介质,由于其特殊的硬件结构,所以普通的文件系统如ext2,ext3等都不适合在其上使用,于是就出现了专门针对FLASH的文件系统,比较常用的有jffs2,yaffs2,logfs,ubifs。那么对于这几个文件系统,如何选择一个针对自己的硬件最合适的呢?他们各自的特点是什么?性能优劣如何? 下面一个PDF为我找到的一篇专门针对这几个文件系统做的转载 2016-03-30 10:09:03 · 509 阅读 · 0 评论 -
Linux设备驱动安装的基本过程
在windows系统里面,如果发现新的硬件设备但是系统没有可以用的自带驱动程序,那用户就得自己安装驱动。Linux内核的设计也是一样,下面就以marvel PHY设备的发现和驱动安装(即模块插入)为例说明一般嵌入式里设备的发现和安装过程。假如某个小系统里面,soc上集成了MAC,然后外面通过MDIO BUS接了一个PHY芯片,那么在定制内核的时候肯定会选择libphy以及相应的SOC MD转载 2016-02-19 17:42:06 · 711 阅读 · 0 评论 -
linux 系统时间的与当前时间的差别
获取系统当前的时间。下面的文章希望能帮到您。在一些系统调用中需要指定时间是用CLOCK_MONOTONIC还是CLOCK_REALTIME,以前总是搞不太清楚它们之间的差别,现在终于有所理解了。CLOCK_MONOTONIC是monotonic time,而CLOCK_REALTIME是wall time。monotonic time字面意思是单调时间,实际上它指的是系统启动以后流转载 2016-03-18 15:11:53 · 1017 阅读 · 0 评论 -
Linux内核——定时器和时间管理
定时器和时间管理系统定时器是一种可编程硬件芯片,它能以固定频率产生中断。该中断就是所谓的定时器中断,它所对应的中断处理程序负责更新系统时间,还负责执行需要周期性运行的任务。系统定时器和时钟中断处理程序是Linux系统内核管理机制中的中枢。另外一个关注的焦点是动态定时器——一种用来推迟执行程序的工具。比如说,如果软驱马达在一定时间内都未活动,那么软盘驱动程序会使用动态定时器关闭软驱马转载 2016-03-18 15:40:55 · 418 阅读 · 0 评论 -
Linux时间函数之gettimeofday()函数之使用方法
一.gettimeofday()函数的使用方法:1.简介:在C语言中可以使用函数gettimeofday()函数来得到时间。它的精度可以达到微妙2.函数原型:#includeint gettimeofday(struct timeval*tv,struct timezone *tz )3.说明:gettimeofday()会把目前的时间用转载 2016-03-18 16:18:53 · 522 阅读 · 0 评论 -
clock()、time()、clock_gettime()和gettimeofday()函数的用法和区别
一)ANSI clock函数 1)概述:clock 函数的返回值类型是clock_t,它除以CLOCKS_PER_SEC来得出时间,一般用两次clock函数来计算进程自身运行的时间.ANSI clock有三个问题:1)如果超过一个小时,将要导致溢出.2)函数clock没有考虑CPU被子进程使用的情况.3)也不能区分用户空间和内核空间.所以clock函数在转载 2016-03-18 17:04:42 · 1902 阅读 · 0 评论 -
Device Tree(二):基本概念
一、前言一些背景知识(例如:为何要引入Device Tree,这个机制是用来解决什么问题的)请参考引入Device Tree的原因,本文主要是介绍Device Tree的基础概念。简单的说,如果要使用Device Tree,首先用户要了解自己的硬件配置和系统运行参数,并把这些信息组织成Device Tree source file。通过DTC(Device Tree Compile转载 2016-03-30 16:56:09 · 787 阅读 · 0 评论 -
Linux网络设备phy
一.结构体1.PHY设备[cpp] view plaincopystruct phy_device { struct phy_driver *drv; //PHY设备驱动 struct mii_bus *bus; //对应的MII总线 struct device dev; //设备文件转载 2016-02-22 14:59:26 · 446 阅读 · 0 评论 -
设备树相关
chosen节点也位于根节点下,该节点用来给内核传递参数(不代表实际硬件)。对于Linux内核,该节点下最有用的属性是bootargs,该属性的类型是字符串,用来向Linux内核传递cmdline。memory和chosen节点在内核初始化的代码都位于start_kernel()->setup_arch()->setup_machine_fdt()->early_init_dt_sca转载 2016-03-31 10:37:10 · 586 阅读 · 0 评论 -
设备、驱动、总线的关系
Kobject,kset是设备模型的基本结构体,设备模型使用这两个结构体来完成设备的层次关系,但在实际的设备驱动编写中,我们基本上用不到kobject,kset这些结构体,是因为这些结构体又被嵌入到更大的结构体中,原因在于kobject,kset结构体只能表征设备的层次关系,但是一个设备的驱动,并不是简单的一个层次关系而已,因此,必需要把kobject,kset结构体嵌入到更大的结构体中,使用ko转载 2016-04-01 14:21:38 · 3071 阅读 · 0 评论 -
kobiect和kset的关系
Linux2.6以后的设备驱动,都是在设备模型的基础上构建的,因此,要编写linux下的设备驱动程序,不论是usb设备,pci设备等,都需要了解设备模型。设备模型的基础结构体主要是kobject,kset这两个结构体:struct kobject { char * k_name; char name[KOBJ_NAME_LEN];转载 2016-04-01 14:23:35 · 559 阅读 · 1 评论 -
网卡的基础知识
网卡本身是有内存的,每个网卡一般都有4K以上的内存,用来发送,接收数据。 数据在从主内存搬到网卡之后,不是立即就能被发送出去的,而是要先在网卡自身的内存中排队,再按照先后顺序发送;同样的,数据从以太网传递到网卡时,网卡也是先把数据存储到自身的内存中,等到收到一帧数据了,再经过中断的方式,告诉主CPU(不是网卡本身的微处理器)把网卡内存的数据读走,而读走后的内存,又被清空,再次被使用转载 2016-04-01 14:29:13 · 1344 阅读 · 0 评论 -
Linux设备模型(6)_Bus
1. 概述在Linux设备模型中,Bus(总线)是一类特殊的设备,它是连接处理器和其它设备之间的通道(channel)。为了方便设备模型的实现,内核规定,系统中的每个设备都要连接在一个Bus上,这个Bus可以是一个内部Bus、虚拟Bus或者Platform Bus。内核通过struct bus_type结构,抽象Bus,它是在include/linux/device.h中定义的。本转载 2016-04-01 17:55:39 · 220 阅读 · 0 评论 -
Linux设备模型(2)_Kobject
原文地址:http://www.wowotech.net/device_model/kobject.htmlLinux设备模型(2)_Kobject作者:wowo 发布于:2014-3-7 0:25 分类:统一设备模型1. 前言Kobject是Linux设备模型的基础,也是设备模型中最难理解的一部分(可参考Documentation/kobject.txt的表述转载 2016-05-24 17:32:02 · 317 阅读 · 0 评论 -
bash之通配符
为什么要写这篇文章我相信很多人和我一样,天天在使用Linux的shell命令,也大概知道有通配符这么个概念,不过比较模糊。平时也会使用简单的通配符,也许还知道有正则表达式的存在,甚至不清楚两者的区别,往往搞混淆。我也是同样的问题,从来没有好好地静下心来总结这些东西。其实学习东西还是要踏实,这样才能发挥工具最大的作用,不是吗?本篇文章就shell的通配符来做个总结,方便以后自己查找记忆。注意转载 2017-05-27 09:55:00 · 702 阅读 · 0 评论 -
dpkg的用法
dpkg是一个Debian的一个命令行工具,它可以用来安装、删除、构建和管理Debian的软件包。下面是它的一些命令解释:1)安装软件命令行:dpkg -i 示例:dpkg -i avg71flm_r28-1_i386.deb2)安装一个目录下面所有的软件包命令行:dpkg -R示例:dpkg -R /usr/local/src3)释放软件包,但是不进行配置命令转载 2017-05-27 10:17:52 · 337 阅读 · 0 评论