驱动开发概述

  1.驱动分类

   1.1 常规分析法

     1.1.1  字符设备

         字符设备是一种按字节来访问的设备,字符驱动则负责驱动字符设备,

         这样的驱动通常实现open, close, read和write 系统调用。例:串口,LED,按键。

     1.1.2  块设备

        在大部分的Unix系统中, 块设备定义为:以块(通常是512字节)为最小传输单位的设备,块设备不能按字节处理数据。

        而Linux则允许块设备传送任意数目的字节。因此, 块和字符设备的区别仅仅是驱动的与内核的接口不同。常见的块设备包括硬盘,flash,SD卡……

     1.1.3  网络设备

        网络接口可以是一个硬件设备,如网卡; 但也可以是一个纯粹的软件设备, 比如回环接口(lo).一个网络接口负责发送和接收数据报文。

   1.2 总线分类法

         USB设备,PCI设备,平台总线设备

  2.驱动学习方法  

    2.1 驱动模型

    2.2 驱动操作

硬件访问技术

  1. 访问流程

    1.1 地址映射

      在Linux系统中,无论是内核程序还是应用程序,都只能使用虚拟地址,而芯片手册中给出的硬件寄存器地址或者RAM地址则是物理地址,无法直接使用,因       此,我们读写寄存器的第1步就是将它的物理地址映射为虚拟地址。

    1.2 读写寄存器

  2. 地址映射

    2.1 动态映射  

      所谓动态映射,是指在驱动程序中采用ioremap函数将物理地址映射为虚拟地址。

      原型:void * ioremap(physaddr, size)

      参数:Physaddr:待映射的物理地址Size:映射的区域长度

      返回值:映射后的虚拟地址

    2.2 静态映射

      所谓静态映射,是指Linux系统根据用户事先指定的映射关系,在内核启动时,自动地将物理地址映射为虚拟地址。

      1.如何事先指定映射关系?

      2.内核启动时,在什么地方完成自动映射?

      在静态映射中,用户是通过map_desc结构来指明物理地址与虚拟地址的映射关系。

      struct map_desc

      {

        unsigned long virtual; /* 映射后的虚拟地址*/

        unsigned long pfn; /* 物理地址所在的页帧号*/

        unsigned long pfn; /* 物理地址所在的页帧号*/

        unsigned long length;/* 映射长度*/

        unsigned int type;/* 映射的设备类型*/

      };

      pfn: 利用__phys_to_pfn(物理地址)可以计算出物理地址所在的物理页帧号在静态映射中,

      用户是通过map_desc结构来指明物理地址与虚拟地址的映射关系。

      

  3. 寄存器读写

    在完成地址映射后,就可以读写寄存器了,Linux内核提供了一系列函数,来读写寄存器。

    unsignedioread8(void *addr)

    unsignedioread16(void *addr)

    unsignedioread32(void *addr)

    unsignedreadb(address)

    unsignedreadw(address)

    unsignedreadl(address)

    voidiowrite8(u8 value, void *addr)

    voidiowrite16(u16 value, void *addr)

    voidiowrite32(u32 value, void *addr)

    voidwriteb(unsigned value, address)

    voidwritew(unsigned value, address)

    voidwritel(unsigned value, address)

Linux 驱动分类 与访问技术的更多相关文章

  1. Linux驱动之内存访问

    <背景> 内存会以分页方式组织内存,而且每页大小和计算机体系结构有关系,Linux中每个页都有对应的struct page{} 与之对应.                         ...

  2. linux驱动面试题2

    1.什么是GPIO? general purpose input/output GPIO是相对于芯片本身而言的,如某个管脚是芯片的GPIO脚,则该脚可作为输入或输出高或低电平使用,当然某个脚具有复用的 ...

  3. linux驱动工程面试必问知识点

    linux内核原理面试必问(由易到难) 简单型 1:linux中内核空间及用户空间的区别?用户空间与内核通信方式有哪些? 2:linux中内存划分及如何使用?虚拟地址及物理地址的概念及彼此之间的转化, ...

  4. linux驱动面试题整理

    1.字符型驱动设备你是怎么创建设备文件的,就是/dev/下面的设备文件,供上层应用程序打开使用的文件? 答:mknod命令结合设备的主设备号和次设备号,可创建一个设备文件. 评:这只是其中一种方式,也 ...

  5. linux驱动面试题目汇总

    http://blog.csdn.net/blueice8601/article/details/7666427 1.linux驱动分类 2.信号量与自旋锁 3.platform总线设备及总线设备如何 ...

  6. Linux驱动经典面试题目

    1.  linux驱动分类 2.  信号量与自旋锁 3.  platform总线设备及总线设备怎样编写 4.  kmalloc和vmalloc的差别 5.  module_init的级别 6.  加入 ...

  7. Linux驱动设计—— 中断与时钟

    中断和时钟技术可以提升驱动程序的效率 中断 中断在Linux中的实现 通常情况下,一个驱动程序只需要申请中断,并添加中断处理函数就可以了,中断的到达和中断函数的调用都是内核实现框架完成的.所以程序员只 ...

  8. (57)Linux驱动开发之三Linux字符设备驱动

    1.一般情况下,对每一种设备驱动都会定义一个软件模块,这个工程模块包含.h和.c文件,前者定义该设备驱动的数据结构并声明外部函数,后者进行设备驱动的具体实现. 2.典型的无操作系统下的逻辑开发程序是: ...

  9. Linux驱动开发概述

    原文出处:http://www.cnblogs.com/jacklu/p/4722563.html Linux设备分类 设备的驱动程序也要像裸机程序那样进行一些硬件操作,不同的是驱动程序需要" ...

随机推荐

  1. TCP客户机-服务器

    1 僵尸进程 2 信号处理 信号: 1 由一进程发往另一进程 2 由内核发往某进程   僵尸状态: 父进程取回子进程的相关信息,进程的ID,终止状态,子进程的资源利用信息   编程时: 1 当派生子进 ...

  2. center os 6.5 vsftpd 登陆出现 530 错误拒绝 解决方法

    别管那么多 把 /etc/vsftpd/ftpusers  里面的用户名删掉就好了.

  3. 用ICSharpCode.SharpZipLib进行压缩

    今天过中秋节,当地时间(2013-09-08),公司也放假了,正好也闲着没事,就在网上学习学习,找找资料什么的.最近项目上可能会用到压缩的功能,所以自己就先在网上学习了,发现一个不错的用于压缩的DLL ...

  4. jquery的匿名函数研究

    jQuery片段: ? 1 2 3 ( function (){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也像其他人一样很兴奋地想看看源码是什么样的.然而,在 ...

  5. HDU 5573 Binary Tree 构造

    Binary Tree 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5573 Description The Old Frog King lives ...

  6. cdoj 65 CD Making 水题

    CD Making Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/65 De ...

  7. Topcomponent --sighoff

    Topcomponent --sighoff 实现一个置于右边框的Topcomponent: 1.可远程同步更新(根据远程的xml文件),修改(增删)该xml文件,查看.刷新等 2.打包工程,记录该打 ...

  8. 【UML】具体解释六种关系

    UML中包括六中关系.各自是:关联(Association).聚合(Aggregation).组合(Composition).泛化(Generalization).依赖(Dependency).实现( ...

  9. MHA 安装过程 原创

    root@monitor yum.repos.d]# cat CentOS-Base.repo [base]name=CentOS-$releasever - Basefailovermethod=p ...

  10. [设计模式3]--工厂(Factory)模式

    原文出处:http://blog.csdn.net/lwbeyond/article/details/7528309 工厂模式属于创建型模式,大致可以分为三类,简单工厂模式.工厂方法模式.抽象工厂模式 ...