Drivers
文章平均质量分 80
drizztzou
这个作者很懒,什么都没留下…
展开
-
驱动
驱动 Linux系统支持三种类型的硬件设备:字符设备、块设备和网络设备。字符设备是直接读取的,不必使用缓冲区。例如,系统的串行口/dev/cua0和/dev/cua1。块设备每次只能读取一定大小的块的倍数,通常一块是512或者1024字节。块设备通过缓冲区读写,并且可以随机地读写。块设备可以通过它们的设备文件存取,但通常是通过文件系统存取。只有块设备支持挂接的文件系统。网络设备是通过BSD套转载 2007-05-31 15:38:00 · 701 阅读 · 1 评论 -
udev与硬件抽象层HAL的实现原理
相对于linux来说,udev还是一个新事物。然而,尽管它03年才出现,尽管它很低调(J),但它无疑已经成为linux下不可或缺的组件了。udev是什么?它是如何实现的?最近研究Linux设备管理时,花了一些时间去研究udev的实现。 udev是什么?u 是指user space,dev是指device,udev是用户空间的设备驱动程序吗?最初我也这样认为,调试内核空间的程序要比调试用户空转载 2007-06-11 22:44:00 · 3571 阅读 · 1 评论 -
Linux内核NAPI机制分析
NAPI 是 Linux 上采用的一种提高网络处理效率的技术,它的核心概念就是不采用中断的方式读取数据,而代之以首先采用中断唤醒数据接收的服务程序,然后 POLL 的方法来轮询数据。随着网络的接收速度的增加,NIC 触发的中断能做到不断减少,目前 NAPI 技术已经在网卡驱动层和网络层得到了广泛的应用,驱动层次上已经有 E1000 系列网卡,RTL8139 系列网卡,3c50X 系列等主流的网络适转载 2007-06-11 23:25:00 · 1104 阅读 · 0 评论 -
Linux内核内存池管理技术实现分析
一、Linux系统内核内存管理简介 Linux将物理内存也划分成固定大小的页面,由数据结构page管理,有多少页面就有多少page结构,它们又作为元素组成一个数组mem_map[]。slab:在操作系统的运作过程中,经常会涉及到大量对象的重复生成、使用和释放问题。对象生成算法的改进,可以在很大程度上提高整个系统的性能。在Linux系统中所用到的对象,比较典型的例子是inod转载 2007-06-14 14:52:00 · 1551 阅读 · 0 评论 -
Linux内核&驱动学习笔记(二)
2007.6.14 pmLinux是如何管理内存的?今天系统的整理一下这个问题。 物理内存是如何组织的 如何分配和释放物理内存 虚拟内存到物理内存的映射 进程的地址空间是怎么样的 虚拟内存是如何组织的 如何分配和释放虚拟内存 启动时内存的分配 什么是slab 什么是页缓存 物原创 2007-06-14 16:49:00 · 1453 阅读 · 0 评论 -
网络处理的软中断机制分析
内核默认软中断机制分析(process_backlog)首先需要介绍的就是netif_rx(在net/core/dev.c中定义)函数,这个函数在网卡驱动程序与linux内核之间建立了一道桥梁,将网卡接收上来的数据包(sk_buff形式)插入内核维护的接收缓冲区队列当中:int netif_rx(struct sk_buff *skb){ int this_cpu =转载 2007-06-11 23:30:00 · 1087 阅读 · 0 评论 -
Linux2.6 驱动设计――从 2.4 到 2.6
由于 2.6 内核在驱动框架,底层调用上和 2.4 内核有很多差别,所以本文主要是为程序员提供 2.4 到 2.6 迁移的指导。 2.6 和 2.4 主要的不同在于 ? 内核的 API 变化,增加了不少新功能(例如 mem pool ) ? 提供 sysfs 用于描述设备树 ? 驱动模块从 .o 变为 .ko 移植 hello word 下面是一个最简单的 2.4 驱动:转载 2007-06-14 14:44:00 · 1452 阅读 · 0 评论 -
Linux内核网络设备操作部分阅读笔记
一、网络设备的初始化网络设备初始化就是调用具有__init 前缀的net_dev_init函数完成的,网络设备初始化包含两个部分(在linux内核2.4办源代码分析大全一书的第550页有详细说明),就是:在系统初始化期间对系统已知的网络设备进行初始化过程,也就是,我们在编译内核时选择编入内核的那部分网卡设备就会在这个时候逐个进行初始化工作。系统中已知的网络设备都存储在一个全局表中,转载 2007-06-14 14:59:00 · 1252 阅读 · 0 评论 -
Linux设备轮询机制分析
一、设备轮询机制的基本思想所谓的设备轮询机制实际上就是利用网卡驱动程序提供的NAPI机制加快网卡处理数据包的速度,因为在大流量的网络环境当中,标准的网卡中断加上逐层的数据拷贝和系统调用会占用大量的CPU资源,而真正用于处理这些数据的资源却很少。一个基本的想法是对于大流量网络,如果发现一个DMA传输中断(这表明一个网络数据通过DMA通道到达了DMA缓冲区),则首先关闭网卡的中断模式,转载 2007-06-14 16:44:00 · 2527 阅读 · 0 评论 -
基于PCI总线的中断机制研究
1 概述 高性能PC机一般以PCI总线为系统总线。由于PCI总线协议较为复杂,因此在开发PCI扩展卡时常采用专用的PCI接口芯片。常见的PCI接口芯片有AMCC公司的S59XX系列和PLX公司的PLX905X系列,其中PLX9052(文中称为9052)使用广泛。 在应用开发中,常常使用中断作为CPU和外设间交换数据的方式。但由于PCI总线具有即插即用特性,即PCI设备的存储器空间、I转载 2007-06-07 10:39:00 · 1187 阅读 · 1 评论 -
汇编语言超浓缩教程
对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必转载 2007-06-07 10:46:00 · 498 阅读 · 0 评论 -
Linux下PCI设备驱动程序开发
PCI是一种广泛采用的总线标准,它提供了许多优于其它总线标准(如EISA)的新特性,目前已经成为计算机系统中应用最为广泛,并且最为通用的总线标准。Linux的内核能较好地支持PCI总线,本文以Intel 386体系结构为主,探讨了在Linux下开发PCI设备驱动程序的基本框架。一、PCI总线系统体系结构PCI是外围设备互连(Peripheral Component Interconnect转载 2007-06-01 09:30:00 · 494 阅读 · 0 评论 -
Linux网络驱动程序编写
工作需要写了我们公司一块网卡的Linux驱动程序。经历一个从无到有的过程,深感技术交流的重要。Linux作为挑战微软垄断的强有力武器,日益受到大家的喜爱。真希望她能在中国迅速成长。把程序文档贴出来,希望和大家探讨Linux技术和应用,促进Linux在中国的普及。 本文可随意转载,但请不要在盈利性出版物上刊登。 ------------------ ------------------ ------转载 2007-05-31 16:03:00 · 432 阅读 · 0 评论 -
嵌入式Linux内核启动部分代码分析
本文通过整理之前研发的一个项目(ARM7TDMI +uCLinux),分析内核启动过程及需要修改的文件,以供内核移植者参考。整理过程中也同时参考了众多网友的帖子,在此谢过。由于整理过程匆忙,难免错误及讲解的不够清楚之处,请各位网友指正,这里提前谢过。本文分以下部分进行介绍:1. Bootloader及内核解压2. 内核启动方式介绍3. 内核启动地址的确定4. arch/armnommu/kerne转载 2007-06-04 13:49:00 · 696 阅读 · 0 评论 -
Linux内核&驱动学习笔记(一)
2007.6.4.am今天讨论到内核启动阶段对外部设备初始化的过程,于是粗略的看了一下相关代码,得到以下一些印象(未必正确,希望大家指正):1.对外部设备初始化代码出现的地方应该是init()进程 (bootloader->start汇编->decompress->start_kernel()->rest_init()->kernel_thread()->init()原创 2007-06-04 15:12:00 · 503 阅读 · 0 评论 -
XScale PXA270在Linux下的FPGA设备驱动
摘要 以ACEX1K50为例,介绍FPGA在Intel XScale PXA270微处理器系统上的应用。通过内存映射机制实现ACEX1K50在Linux下的设备驱动;通过用户应用程序实现对ACEX1K50设备的操作,为FPGA在嵌入式领域的应用提供一种方法。引言 Intel公司推出的XScale采用ARM V5TE结构,是Strong ARM的升级换代产品。XScale PXA270处理器最转载 2007-06-05 16:13:00 · 871 阅读 · 0 评论 -
把linux kernel 2.4 上的driver 移植到 2.6 kernel
随着Linux2.6的发布,由于2.6内核做了教的改动,各个设备的驱动程序在不同程度上要 进行改写。为了方便各位Linux爱好者我把自己整理的这分文档share出来。该文当列举 了2.6内核同以前版本的绝大多数变化,可惜的是由于时间和精力有限没有详细列出各个 函数的用法。 特别声明:该文档中的内容来自http://lwn.net,该网也上也有各个函数的较为详细的 说明可供各位参考。如果需要该文档的转载 2007-06-07 10:41:00 · 611 阅读 · 0 评论 -
Linux网卡数据包的接收
一、从网卡说起这并非是一个网卡驱动分析的专门文档,只是对网卡处理数据包的流程进行一个重点的分析。这里以Intel的e100驱动为例进行分析。大多数网卡都是一个PCI设备,PCI设备都包含了一个标准的配置寄存器,寄存器中,包含了PCI设备的厂商ID、设备ID等等信息,驱动程序使用来描述这些寄存器的标识符。如下:转载 2007-06-07 10:30:00 · 3105 阅读 · 0 评论 -
IA32上Linux内核中断机制分析
中断是计算机与外界联系的唯一途径。本文将分析在IA-32体系结构上的Linux内核对待中断系统的处理,针对的是2.6内核,引用的代码则具体则是2.6.14的。一。几个相关概念的澄清1, 中断信号:在电路级别来说,中断就是输送到CPU的INTR引脚上的电平信号。2, 可编程中断控制器(PIC,Programmable Interrupt Controller):PIC是在计算机外部设备与CPU之间的转载 2007-06-07 10:43:00 · 768 阅读 · 0 评论 -
零拷贝技术研究与实现
一.基本概念零拷贝(zero-copy)基本思想是:数据报从网络设备到用户程序空间传递的过程中,减少数据拷贝次数,减少系统调用,实现CPU的零参与,彻底消除CPU在这方面的负载。实现零拷贝用到的最主要技术是DMA数据传输技术和内存区域映射技术。如图1所示,传统的网络数据报处理,需要经过网络设备到操作系统内存空间,系统内存空间到用户应用程序空间这两次拷贝,同时还需要经历用户向系统发出的系统调用。而零转载 2007-06-11 22:21:00 · 1253 阅读 · 0 评论