程序员

Linux——Linux驱动之基本理论常识总结(什么是Linux驱动?Linux

作者:admin 2021-05-12 我要评论

目录 0 引言 1 什么是Linux驱动 2 Linux驱动程序需要掌握的内容 3 ARM处理器体系架构 4 ARM的前世今生 0 引言 前面Linux专题中关于Linux下系统编程总结了17篇博...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

目录

0 引言

1 什么是Linux驱动?

2 Linux驱动程序需要掌握的内容

3 ARM处理器体系架构

4 ARM的前世今生


0 引言

前面Linux专题中关于Linux下系统编程总结了17篇博文,主要是为了提高Linux下的C编程应用能力,熟悉Linux编程应用环境,从此篇博文起开始Linux驱动的总结,后面计划加一些综合实践项目练习。

1 什么是Linux驱动?

做过嵌入式的都知道裸机程序和带操作系统的程序,这里就不展开讲了,初学者最开始接触的都是裸机程序,main中while大循环跑天下。实际上,掌握了操作系统后,我们会发现基于操作系统的开发更高效,可以分工协作,A去开发应用层软件,B去开发操作系统相关的,C去开发驱动程序,D做底层硬件。

说到这里,从顶层到底层正好是A到D的顺序,驱动程序就是联接操作系统和硬件之间的桥梁,驱动程序多半都是和硬件打交道的,如何让硬件更好、稳定的运行起来,这就是看驱动程序的好坏了,它对上需要提供硬件操作的相关接口。对于顶层的应用软件,无法直接调动硬件,是通过操作系统调用驱动程序提供的接口间接进行的,这样各层各司其职,对于整体系统来说也更稳定可靠,假如每个应用都能直接操作硬件,那才是最大的隐患。

Linux驱动又具体包含三种:一般后两种,处理器厂家都会提供BSP支持包,我们不需要做什么,开发中涉及最多的就是字符设备。

  • 字符设备驱动:大部分都是字符设备,如GPIO、LED、串口、蜂鸣器、声卡等
  • 块设备驱动:存储设备,如U盘、硬盘、TF卡等
  • 网络设备驱动:通信设备,如wifi、以太网等

2 Linux驱动程序需要掌握的内容

1)GPIO,通用输入输出口

单片机中只需要对寄存器进行设置操作就可以了,但在高端处理器中,就没那么简单了。

2)内存管理单元MMU

MMU是单片机和处理器的一个区别,普通的51单片机一般叫MCU(微控制器),ARM处理器一般叫MPU(微处理器),后者加入了内存管理单元。MMU是一种负责处理处理器的内存访问请求的硬件。它的功能包括虚拟地址到物理地址的转换(即虚拟内存管理)、内存保护、中央处理器高速缓存的控制,在较为简单的计算机体系结构中,负责总线的仲裁以及存储体切换。

3)Linux中一切皆文件

Linux中一切都被看成是文件,把设备也看成文件,所以字符设备驱动的编程路子就是做一组设备对应的驱动函数,使能能用open、read、write、ioctrl、close像操作文件一样进行操作。

4)设备节点

要想用户进程与内核下的硬件进行通信,就需要建立一个设备节点,前面Linux系统编程时也是见过的,比如在开发板新插上一个U盘,使用fdisk -l指令查看,/dev/sda1就是我们新插U盘的一个设备节点。

5)上层应用如何操作外部设备

这个应该说是做嵌入式的一个常规操作了,简单说下,大致思路基本都是一样的,举个很简单例子,我们要用控制器的某个 IO 口开关蜂鸣器,该如何操作:首先根据原理图确定是那个pin,然后去控制器的datasheet中查找操作这个IO口的对应寄存器,明确物理地址,然后根据手册要求向该物理地址写数据控制IO口输出高低电平,进而控制了蜂鸣器的关断。

写到这里,是不是感觉和刚上大学时玩51单片机的套路差不多?是的,其实裸机程序中都是这么操作外设的,但是如果上了Linux,启动了MMU,就不是直接对物理地址进行操作了,而是把物理地址先转换为虚拟地址,然后对虚拟地址进行操作的。

6)底层驱动的编写方式,并注册到系统(register_chrdev())

7)MISC杂项设备(混杂设备):简化了驱动的编写

8)模块(module):驱动调试时以模块的形式进行驱动的加载和卸载

3 ARM处理器体系架构

ARM体系架构中区别于单片机的比较突出的体现在有了CACHE 高速缓存和MMU 内存管理单元,ARM体系架构还是比较繁杂的,我们一步步说起,有些基础的概念,就当是温故学习了。

1) CPU中央处理器

CPU到现在都在遵循经典的 冯诺依曼存储结构,CPU其实就是一堆数字电路,与门、或门、非门、触发器等组成,这些单个拿出来都认识,放在一起就复杂了。每个处理器(51、PIC、ARM、X86)都有自己对应的一套指令系统,处理的数字电路就是对套指令系统进行解析,并不断从存储器中按顺序取指令去执行。后来,在冯诺依曼结构基础上,又有了创新的哈佛结构,取指令和取数据分开,可以同时进行。

扩展的点一下,评价一个处理器一般从四方面:频率、性能(MIPS/MHz,MIPS指的是每秒能够处理的指令数)、功耗、面积。

2)指令系统

可以把它看成是一套API,一个软硬件的分界面,这是在计算机系统体系结构中比较重要的思想。对于软件开发人员,只需要知道指令系统就行,知道每一条指令的作用,直接调用指令去实现要操作的功能,至于怎么实现这个操作的,不需要自己掌握;对于处理器设计人员,需要做的是把指令解析,执行。

指令系统分两类:RISC 经典指令集和CISC复杂指令集,早期的处理器如8051、X86用的是CISC,ARM、MIPS、PowerPC等都是用的RISC,RISC指的是每条指令执行的时间相同,指令长度相同,为什么后期会有RISC呢?存在即合理,RISC的指令执行时间和指令长度相同的特点,便于实现流水线,可以使一些多项操作在时间上进行重叠进行,便于提高系统的主频,进而提高处理性能。

3)Cache高速缓存

Cache高速缓存,是CPU与内存之间的高速存储子系统,作用就是为了提高CPU访问内存的速度,高速缓存一般是SRAM,内存一般是DRAM,后者成本较低些。

为什么说高速缓存的存在提高CPU访问存储器的速度?原理是这样的,CPU存取数据首先到高速缓存中去找,若找到的话直接就用,没有的话就会到存储器中去找,同时这部分指令或相关的数据会放到内存中,CPU下次再存取数据的话,就直接能从高速缓存中获取了,总体上提高了系统性能,提高了存储器的平均访问速度,使存储器的速度和CPU的速度匹配。

既然高速缓存速度这么快(一般CPU访问速度是寄存器>高速缓存>内存),那么CPU直接集成大点的高速缓存不就OK了吗,为什么还有额外配置内存呢?答案就是它贵啊,采用CPU+高速缓存+内存的架构性价比较高,也不仅仅是贵的问题,另外,比较重要的一点是,处理器和存储器的性能差距每年大约在以50%d的速度增大,像CPU每18个月其性能都会翻一番,但是存储器发展速度就没那么快了(跟器件工艺相关性比较大),所以采用这种架构很好的平衡了这两点。

4)内存管理单元MMU

内存管理单元实现了虚拟地址到物理地址的转换,ARM上面跑Linux系统,编程用的地址都是虚拟地址,物理地址到虚拟地址的转换是通过ioremap函数实现的。MMU其实就是维护下面这样一个映射表格,ioremap通过查找这个映射表实现虚拟地址到物理地址的转换。

MMU主要应用方面的作用包括:辅助实现虚拟内存、辅助实现多任务管理。

虚拟存储器的空间大小取决于处理器的访存能力,不是实际外存的大小,比如ARM处理器有32、64位系统,32位系统2^32=4G,说明处理器有能力访问4G内存的范围,也就是程序开发人员可以操作的内存范围是4G的,就算实际内存有8G,也只能操作4G的空间,这就是为什么我们PC机8G的内存,一般都是装的64位系统的原因,否则就是浪费硬件嘛。

虚拟内存可以实现既具有外存的容量(PC机中的硬盘、ARM系统中的EMMC/FLASH),又有接近内存的访问速度的效果。

4 ARM的前世今生

ARM全名Advanced Risc Machines,Ltd,ARM公司是1990年成立的,这个公司牛的是自己并不产芯片,是设计公司,只提供IP,处理器的设计方案,ARM芯片厂商需要从ARM手里买IP核做自己的ARM芯片。主要ARM芯片厂商有哪些?我们常见的:

外企:SAMSUNG、TI、Freescale、Intel、NXP、Atmel

国产:联发科、华为、瑞芯微、全志,现在IC国产化兴起,还有很多国内公司,像中科芯、紫光展锐等。

ARM处理器的架构(指的是结构设计)从V3发展到V8,这里的架构不是具体的产品,类似于设计框架,具体的产品像ARM7、ARM8、ARM11、Cortex的A/R/M系列,下面是网络上找的一张图,参考下,发展的时间线也是这样走的。ARM处理器目标就是做出低功耗、低成本的方案,其大量使用了寄存器、指令长度固定,具有领先的性能和功耗。

目前主流的Cortex系列,包含了A、R、M、Secure四个分支,A 系列是性能最强悍的,面向平板电脑应用等,可以说对标?X86了;R系列面向实时处理场景,像工业控制、汽车领域;M系列性价比较高,一般民用、消费品等;Secure系列主要面向安全产品。可以看出ARM公司基本把所有的领域都覆盖了,这个公司还是比较可怕的。

?

作于202104062140,已归档

———————————————————————————————————

本文为博主原创文章,转载请注明出处!

若本文对您有帮助,轻抬您发财的小手,关注/评论/点赞/收藏,就是对我最大的支持!

祝君升职加薪,鹏程万里!

;原文链接:https://blog.csdn.net/w464960660/article/details/114946701

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • Linux——Linux驱动之基本理论常识总结

    Linux——Linux驱动之基本理论常识总结

  • [云数据中心] 《云数据中心网络架构与

    [云数据中心] 《云数据中心网络架构与

  • 多集群监控-thanos

    多集群监控-thanos

  • 1.教小白学ssm框架:ssm框架简介

    1.教小白学ssm框架:ssm框架简介

腾讯云代理商
海外云服务器