3-09 Linux驱动初探

来源:互联网 发布:淘宝刷好评兼职靠谱吗 编辑:程序博客网 时间:2024/06/16 02:58

一.  驱动开发概述

1.  驱动分类
    1.1常规分类法
        1.1.1字符设备
        字符设备是一种一字节为最小访问单位的设备,字符驱动负责驱动字符设备,系统按照操作文件的方式来对字符设备进行访问,这样的驱动通常支持open,close,read、和write系统调用。例如:串口,LED,按键。
        1.1.2块设备
        在大部分的Unix系统中,块设备定义为:以块(通常是512字节)为最小传输单位的设备,块设备不能按字节处理数据,而Linux则允许块设备传输任意数目的字节,因此块和字符设备的区别仅仅是驱动的设备与内核的接口不同。常见的块设备包括硬盘,Flash,SD卡等。
        1.1.3网络设备
        网络接口可以是一个硬件设备,如网卡eth0,也可以是一个纯粹的软件设备,如回环接口lo,一个网络接口负责发送和接受数据报文。
    1.2总线分类法
    USB设备,PCI设备,平台总线设备(如USB网卡)。

2.  驱动学习方法
     先弄清某驱动的驱动模型,建立驱动代码框架,再网框架中添加硬件相关的操作代码。
      1)驱动模型
        分析范例代码,总结出某类设备的驱动模型,完成代码框架。
      2)硬件操作
        把裸机中的硬件操作移植到Linux驱动中。
      3)驱动程序测试
        编译驱动模块,放入根文件系统,编写应用程序,加载模块进行测试。
//驱动学习初期,不需要过多的去阅读内核代码。


二.  硬件访问技术

1.  硬件访问流程
      驱动程序控制设备,主要通过访问设备内的寄存器来达到控制目的。
2.   Linux系统地址映射
      Linux系统中,无论是内核程序还是应用程序,都只能使用虚拟地址,而芯片手册中给出的硬件寄存器地址或RAM地址确实物理地址。因此,要对寄存器进行读写,就要把物       理地址映射为虚拟地址。Linux系统的地址映射方式分为动态映射和静态映射。

    2.1  动态映射
    动态映射是指在驱动程序中采用ioremap函数将物理地址映射为虚拟地址。函数原型为void * ioremap(physaddr, size)。参数physaddr为待映射的物理地址,size为映射的区域长度(若是四个字节,即为4),返回值为映射后的虚拟地址。
    2.2  静态映射
    静态映射是指Linux系统根据用户事先指定的映射关系,在内核启动时自动地把物理地址映射为虚拟地址。
    1)在静态映射中,用户通过map_desc结构来指明物理地址与虚拟地址的映射关系。
struct map_desc{
    unsigned long virtual;/* 映射后的虚拟地址 */
    unsigned long pfn;/* 物理地址所在的页帧号 */
    unsigned long length;/* 映射长度 */
    unsigned int type;/* 映射的设备类型 */
};
pfn:利用_phys_to_pfn(物理地址)可以计算出物理地址所在的物理页帧号。
    2)把该结构填充至位于内核源码\arch\arm\cpu.c中的struct map_desc结构数组中。


3.  寄存器读写
    在完成地址映射后,就可以读写寄存器了,Linux内核提供了一系列函数,来对寄存器进行读写。
    unsigned ioread8(void *addr)
    unsigned ioread16(void *addr)
    unsigned ioread32(void *addr)
    unsigned readb(address)
    unsigned readw(address)
    unsigned readl(address)


    void iowrite8(u8 balue, void *addr)
    void iowrite16(u16 value, void *addr)
    void iowrite32(u32 value, void *addr)
    void writeb(unsigned value, address)
    void writew(unsigned value, address)
    void writel(unsigned value, address)









0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 不想回对方微信怎么办 喜欢我的人太多怎么办 假如战争今夜打响我们该怎么办 约客户客户说忙怎么办 第一天来姨妈痛怎么办 痛经痛的很厉害怎么办 工作第一天被辞怎么办 第一天练车紧张怎么办 到新公司第一天怎么办 我妈上班别人欺负怎么办 欺负别人他妈来找了怎么办 家人都欺负我妈怎么办 人老了日不动了怎么办? 日照职业技术学院公租房怎么办留宿 眼镜上沾了胶水怎么办 近视镜片刮花了怎么办 墨镜镜片磨花了怎么办 邻居养狗味道大怎么办 邻居不让养狗了怎么办 养狗地板有味道怎么办 狗狗嘴巴被大狗咬肿了怎么办 花了钱心里难受怎么办 狗在屋里有味道怎么办 养狗家里有异味怎么办 养狗房子有味道怎么办 狗身上有腥臭味怎么办 狗狗不想养了怎么办 药流2天后没出血怎么办 药流当天血多怎么办 怀孕四十天不想要怎么办 人流后出血量大怎么办 药流一直不出血怎么办 药流一直不见红怎么办 药流12天还流血怎么办? 把别人车刮了怎么办 车划掉漆了怎么办啊 倒车时碰了车怎么办 车头掉了一点漆怎么办 新买的车被刮了怎么办 白色车车头漆掉了一小块怎么办 临时牌照丢了1张怎么办