Linux驱动开发前奏

xiaoxiao2021-02-28  12

Linux驱动开发前奏 一、驱动开发概述 1.驱动分类, 常规分类 字符设备:一种 以字节为最小访问单位的设备,通常支持open,close,read,write系统调用。 块设备:大部分Unix系统中,以 块(通常是512字节)为最小传输单位的设备,块设备不能按字节处理数据。 网络设备:可以是一个硬件设备,如网卡;也可以是一个纯粹的软件设备,比如回环接口(lo)。一个网络接口负责发送和接受数据报文。 2.总线分类法 USB设备 PCI设备 平台总线设备 二、驱动学习方法 1.驱动模型 分析范例程序、制作思维导图、自己编写代码、驱动程序框架 2.硬件操作 复习裸机驱动 将裸机中的硬件操作移植到Linux驱动中 三、硬件访问技术 1.1 硬件访问实质 驱动程序控制设备,主要是通过访问设备内的寄存器来达到 控制目的,因此我们讨论如何访问硬件,就成了如何访问这 些寄存器了。 2. 地址映射 在Linux系统中, 无论是内核程序还是应用程序, 都只能使用虚拟地址,而芯片手册中给出的硬件 寄存器地址或者RAM地址则是物理地址,无法直 接使用,因此,我们读写寄存器的第1步就是将 将它的物理地址映射为虚拟地址。 2.1 动态映射 所谓动态映射,是指在 驱动程序中采用 ioremap数将物理地址映射为虚拟地址。 原型: void * ioremap(physaddr, size) 参数: Physaddr:待映射的物理地址 Size: 映射的区域长度 返回值:映射后的虚拟地址 2.2 静态映射 所谓静态映射,是指Linux系统根据用户 事先指定的 映射关系在内核启动时 自动 地将物理地址映射 为虚拟地址。 1. 如何事先指定映射关系?    填充结构,告诉内核map_desc数组中 2. 内核启动时,在什么地方完成自动映射? lotable_init(); 2.3 映射关系 在静态映射中,用户是通过 map_desc结构来指明 物理地址与虚拟地址的映射关系。 struct map_desc {     unsigned long virtual; /* 映射后的虚拟地址 */     unsigned long pfn; /* 物理地址所在的页帧号 */     unsigned long length; /* 映射长度 */     unsigned int type; /* 映射的设备类型 */ }; pfn: 利用__phys_to_pfn(物理地址)可以计算出物 理地址所在的物理页帧号。 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 value, 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) <script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script> 阅读(30) | 评论(0) | 转发(0) | 0

上一篇:Linux内核链表

下一篇:字符设备驱动模型

相关热门文章 SHTML是什么_SSI有什么用...查看linux中某个端口(port)...卡尔曼滤波的原理说明...shell中字符串操作关于java中的“错误:找不到或... 给主人留下些什么吧!~~ 评论热议
转载请注明原文地址: https://www.6miu.com/read-450123.html

最新回复(0)