Linux驱动入门(二)——嵌入式处理器介绍和构建驱动程序开发环境


嵌入式处理器和开发板介绍

在实际工程项目中,Linux驱动程序一般是为嵌入式系统而写的。因为嵌入式系统因用途、功能、设计厂商不同,硬件之间存在很多的差异。这些差异性,不能通过写一个通用的驱动程序来完成,需要针对不同的设备书写不同的驱动程序。要写驱动程序,必须了解处理器和开发板的相关信息。

处理器简述

处理器是解释并执行指令的功能部件。每个处理器都有一个独特的诸如mov 、add或sub这样的操作命令集,这个操作集被称为指令系统。在计算机诞生初期,设计者喜欢将计算机称为机器,所以该指令系统也被称作机器指令系统
处理器以惊人的速度执行指令指定的工作。一个称作时钟的计时器准确地发出定时电信号,该信号为处理器工作提供有规律的脉冲,通常叫时钟脉冲。测量计算机速度的术语引自电子工程领域,称作兆赫(MHz),兆赫意指每秒百万个时钟周期。一个8MHz的处理器中,执行执行速度高达了每秒8百万次。

处理器种类

处理器作为一种高科技产品,其技术含量非常高,目前全世界只有少数厂商能够设计。这些厂商主要有Intel、AMD、ARM、中国威盛、Cyrix、IBM和龙芯等,目前,处理器在嵌入式领域应用十分广泛,各大厂商都推出了自己的嵌入式处理器,嵌入式处理器主要有Intel的PXA系列处理器、StrongARM系列处理器、MIPS处理器、摩托罗拉龙珠(DragonBall)系列处理器、日立SH3处理器和德州仪器OMAP系列处理器。了解这些嵌入式处理器的特性,是驱动开发人员必须补的一课。

Intel的PXA系列处理器

这个系列最大的改建就在于较大地提高了性能,并且全面兼容旧款产品。
优点:性能和通用性得到了提高,具备了一些先进特性。例如无线局域网、通用串行总线、蓝牙技术等。
缺点:此款处理器在缺乏软件支持情况下,在性能上会被打折扣,甚至略低于旧款的StrangARM处理器。

StrongARM系列处理器

StrongARM系列处理器是Intel旗下的ARM公司推出的,一款旨在支持WinCE3.0 PocketPC系统的RISC(精简指令集)处理器,简称ARM处理器。ARM处理器由ARM公司设计,与MIPS公司类似,采用发放许可权方式,由其他公司生产。
优点:性能较高,并且使用了基于StrongARM处理器的终端设备不用再担心兼容新问题。
缺点:功耗过大一直是困扰高频率处理器的首要问题

MIPS处理器

MIPS实际上是芯片设计商MIPS Technologies公司的名字。MIPS Technologies不生产芯片,它只是把设计许可给其他公司,由其他公司制造生成。

摩托罗拉龙珠(DragonBall)系列处理器

摩托罗拉在1995年推出了第一款龙珠芯片,它的推出主要是为了应对Intel等厂商的竞争。摩托罗拉龙珠处理器走的是低功耗低成本的路线,虽然处理速度没有优势,但却特别适合小巧的PDA使用。因此摩托罗拉设计的龙珠系列处理器可以算是掌上电脑里的奔腾一代处理器,是一款具有历史意义的CPU。
优点:低功耗、低频率、稳定性好。
缺点:缺少了多媒体的支持能力和一些高级应用协议接口的能力(如安全加密、无线局域网、MPEG解码)。

日立SH3处理器

SuperH3(SH3)处理器由日立公司生产,该公司设计并生产这些芯片。SH3处理器比较少见,只使用在惠普Jornada 540系列Pokcket PC上。

德州仪器OMAP系列处理器

OMAP是一款面向多媒体操作系统的高性能低功耗处理器。它集成了包括一个数字协议处理器在内的多媒体单元,并且加入了GSM/GPRS接口和蓝牙无线协议等一些当前的高级功能。
优点:接口全面,并且具有较低的功耗和不错的性能表现。
缺点:耗电基本和旧款的彩色机型持平,但要想达到昔日的辉煌是不可能了。

ARM处理器

ARM(Advanced RISC Machines)处理器价格便宜,功能相对较多,是目前最流行的嵌入式处理器之一。ARM处理器分为很多种类,适用于不同的应用。

ARM处理器简介

ARM是微处理器行业的一家知名企业,设计了大量高性能、廉价、低功耗的RISC处理器。ARM处理器具有性能高、成本低和能耗低的特点。适用于多种领域,比如嵌入式控制、消费/教育类多媒体、DSP和移动式应用等。
ARM公司将其技术授权给世界上许多著名的半导体、软件和OEM厂商。每个厂商得到的都是独一无二的ARM相关技术及服务。利用这种合作关系,ARM很快称为了许多全球性RISC标准的缔造者。
目前,总共有100多家半导体公司与ARM签订了硬件技术使用许可协议,其中包括Intel、IBM、LG半导体、NEC、SONY、飞利浦和国民半导体这样的大公司。至于软件系统的合伙人,则包括微软、IBM和MRI等一系列知名公司。

ARM处理器的特点

  • 16/32位双指令集,节省存储空间
  • 小体积、低功耗、低成本、高性能
  • 支持DSP指令集,支持复杂的算数运算,对于多媒体处理非常有用
  • Jazeller技术,对Java代码运行速度进行了优化
  • 全球众多的合作伙伴,ARM32位体系结构被公认为业界领先的32位嵌入式RISC处理器结构,所有ARM处理器共享这一体系结构。这可确保开发者转向更高性能的ARM处理器时,由于所有产品均采用一个通用的软件体系,所以基本上相同的软件可在所有产品中运行,从而使开发者在软件开发上可获得最大回报。

ARM处理器系列

ARM7带有高速缓存处理器宏单元,广泛应用于多媒体和嵌入式设备。
ARM9主要应用于引擎管理,仪器仪表、安全系统、机顶盒、高端打印机等。
ARM9E为综合处理器,允许在硬件中执行Java字节码。
ARM10系列其核心在于使用向量浮点(VFP)单元VFP10提供高性能的浮点解决方案,从而极大地提高了处理器的整型和浮点运算性能。主要用于2D和3D图形引擎应用夯实基础。
SecurCore系列主要是针对安全市场,以一种全新的安全处理器设计为智能卡和其他安全IC开发提供独特的32位系统设计,并具有特定的反伪造方法,从而有助于防止对硬件和软件的盗版。
StrongARM系列和Xscale系列
StrongARM处理器将Intel处理器技术和ARM系统结构融为一体,致力于受体通信和消费电子类设备提供理想解决方案。Intel Xscale微体系结构则提供全性能、高性价比和低功耗的解决方案,支持16位Thumb指令和DSP指令。

ARM处理器的应用

在这里插入图片描述

ARM处理器选型

参考点:

  1. ARM处理器核
  2. 系统时钟控制器
  3. 内部存储容量
  4. GPIO数量
  5. 中断控制器
  6. IIS(Integerate Interface of Sound)接口
  7. nWAITE信号——外部总线速度控制信号
  8. RTC(Real Time Clock)时钟——实时时钟
  9. LCD控制器
  10. PWM输出
  11. ADC和DAC模数转换
  12. 扩展总线
  13. UART和lrDA
  14. DSP协处理器——协处理器是协助CPU完成相应功能的处理器,它除了与CPU通信之外,不会与其他部件进行通信。DSP是协处理器中的一种,全称叫数字辛哈处理器(Digtial Signal Processing)。
  15. 时钟计数器和看门狗
  16. 电源管理
  17. DMA控制器——有些AMR芯片内部集成有DMA可以和硬盘等外部设备高速交换数据,同时减少数据交换时对CPU资源的占用。

STM32MP157开发板

后面所有的操作都是基于该开发板,关于该开发板大家可以在韦东山老师的官网进行详细学习
100ask

构建嵌入式驱动程序开发环境

在编写驱动程序之前,需要构建一个合适的开发环境。这个环境包括适合的Linux操作系统,网络,交叉编译工具及NFS服务等。下面进行简单的介绍,详细的环境搭建过程建议大家上百问网直接看韦东山老师的视频。
在这里插入图片描述
Link

小结

关于Linux内核源码下载和如何愉快的阅读放在下一章和大家分享。

Linux操作系统复习

前一章博客已经较详细的介绍了Linux的基础知识。这里我们复习一下
Linux驱动入门(一)——基础概念

Linux内核子系统

编写设备驱动程序,涉及Linux内核的许多子系统,了解这些子系统对于了解Linux操作系统和编写驱动程序都非常有用。这些主要的子系统包括进程管理、内存管理、文件管理、设备管理和网络管理

进程管理

进程是操作系统中一个很重要的概念。进程是操作系统分配资源的基本单位,也是CPU调度的基本单位(最开始的Linux中没有线程概念)。可以给进程这样一个定义:进程是程序运行的一个实例,是操作系统分配资源和调度的一个基本单位。Linux将进程分为就绪态、执行态和阻塞态三个状态。Linux内核负责对这三种状态进行管理。下面对这三种状态的基本概念介绍如下。

  • 就绪状态:在这种状态中,进程具有处理器外的其他资源,进程不运行。当处理器空闲时,进程就被调度来运行。
  • 执行状态:进程处于就绪状态后,获得处理器资源,就能进入执行状态此时程序正在运行。
  • 阻塞状态:进程因为等待某种事件的发生而暂时不能运行。这些事件如设备中断,其他进程的信号。
    参考下图,当系统分配资源并创建一个进程后,进程就进入就绪状态。当调度程序分配了处理器资源后,进程便进入执行状态。相应地,当处理器资源用完后,进程又进入就绪状态。在执行状态中,因发生某些事件而使进程不能运行,则进程进入阻塞状态。在阻塞状态下,当外部事件得到满足后,进程就进入就绪状态。
    在这里插入图片描述

内存管理

内存是计算机的主要资源之一,可以将内存理解为一个线性的存储结构。用来管理内存的策略是决定系统性能的主要因素。内核在有限的资源上为每个进程创建一个虚拟地址空间,并对虚拟地址空间进行管理。为了方便内存的管理,内核提供了一些重要的函数。这些函数包括kmalloc()、kfree()等。另外设备驱动程序需要使用内存分配,不同的分配方式对驱动程序的影响不同,所以需要对内存分配有比较清晰的了解。

文件系统

在Linux操作系统中,文件系统是用来组织、管理、存放文件的一套管理机制。Linux文件系统的一大优点是,它几乎可以支持所有的文件格式。任何一种新的文件格式,都可以容易地写出相应的支持代码,并无缝地添加到内核中。虽然不同文件格式的文件以不同的存储方式存放在磁盘设备中,但是在用户看来,文件总以树形结构显示给用户。这种树形结构如下图所示:
在这里插入图片描述
另一方面,在Linux中,几乎每一个对象都可以当作文件来看待,最常见的就是设备文件。设备文件将设备当作文件来看待,这样就可以像操作文件一样操作设备。

设备管理

无论是桌面系统还是嵌入式系统,都存在各种类型的设备。操作系统的一个重要功能就是对这些设备进行统一管理。由于设备的种类繁多,不同设备的操作方式都不一样,使设备管理成为操作系统中非常复杂的部分。Linux系统通过某种方式较好地解决了这个问题,使设备的管理得到了统一。
设备管理的一个主要任务是完成数据从设备到内存的传输。一个完成的数据传输过程是:数据首先从设备传入内存,然后CPU对其进行处理,处理完后将数据传入内存或设备中。

网络功能

网络功能也由操作系统来完成。大部分的网络操作与用户进程都是分离的,数据包的接收和发送都是由相应的驱动程序来完成的,而与用户进程无关。进程处理数据之前,驱动程序必须先收集、标识和发送或重组数据。当数据准备好后,系统负责用户进程和网络接口之间的数据传送。另外内核也负责网络通信协议。

猜你喜欢

转载自blog.csdn.net/m0_56145255/article/details/130845521