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

文章目录

  • 嵌入式处理器和开发板介绍
    • 处理器简述
    • 处理器种类
      • Intel的PXA系列处理器
      • StrongARM系列处理器
      • MIPS处理器
      • 摩托罗拉龙珠(DragonBall)系列处理器
      • 日立SH3处理器
      • 德州仪器OMAP系列处理器
    • ARM处理器
      • ARM处理器简介
      • ARM处理器的特点
      • ARM处理器系列
      • ARM处理器的应用
      • ARM处理器选型
    • STM32MP157开发板
  • 构建嵌入式驱动程序开发环境
    • 小结
  • Linux操作系统复习
    • 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对其进行处理,处理完后将数据传入内存或设备中。

网络功能

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/24482.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Jupyter Notebook如何导入导出文件

目录 0.系统:windows 1.打开 Jupyter Notebook 2.Jupyter Notebook导入文件 3.Jupyter Notebook导出文件 0.系统:windows 1.打开 Jupyter Notebook 1)下载【Anaconda】后,直接点击【Jupyter Notebook】即可在网页打开 Jupyte…

初阶数据结构之栈的实现(五)

文章目录 😏专栏导读🤖文章导读🙀什么是栈?🙀画图描述 😳栈的代码实现及其各类讲解😳栈的初始化代码实现及其讲解😳栈的初始化 😳栈的销毁代码实现及其讲解😳…

PLX31-EIP-SIE 以太网/IP到西门子工业以太网

ProSoft Technology的EtherNet/IP to Siemens工业以太网通信网关允许支持EtherNet/IP的控制器或设备与西门子S7 PACs(包括S7-200s、S7-300s、S7-400s、S7-1200和S7-1500 PACs)之间进行高速双向数据传输。 此外,该网关还包括几个功能,包括数据优先级&…

横向移动-传递攻击SMB服务利用psexecsmbexec

win2012以上版本,关闭了wdigest 或者安装了 KB287199补丁。无法获取明文密码 总的来说就是win2012后无法获取明文密码 解决办法就是: 1.可以利用哈希hash传递(pth,ptk等进行移动) 2.利用其他服务协议(S…

UGUI进阶知识[二十九]循环GridView

节省内存的常用滑动列表还有一种形式,上下滑动的GridView。这种格式的滑动列表可用于移动设备的背包,仓库,商店UI等数据可能海量从而导致产生特别多但又看不见的UI的情况。 于是基于 UGUI进阶知识[八]循环利用滑动列表的循环ListView工程做了…

Tomcat服务器、Servlet生命周期、上传下载文件、使用XHR请求数据、注解使用

文章目录 Servlet认识Tomcat服务器使用Maven创建Web项目创建Servlet探究Servlet的生命周期解读和使用HttpServletWebServlet注解详解使用POST请求完成登陆上传和下载文件下载文件上传文件 使用XHR请求数据重定向与请求转发重定向请求转发 ServletContext对象初始化参数 Servlet…

Office project 2010安装教程

哈喽,大家好。今天一起学习的是project 2010的安装,Microsoft Office project项目管理工具软件,凝集了许多成熟的项目管理现代理论和方法,可以帮助项目管理者实现时间、资源、成本计划、控制。有兴趣的小伙伴也可以来一起试试手。…

在职阿里6年,一个29岁女软件测试工程师的心声

简单的先说一下,坐标杭州,14届本科毕业,算上年前在阿里巴巴的面试,一共有面试了有6家公司(因为不想请假,因此只是每个晚上去其他公司面试,所以面试的公司比较少) 其中成功的有4家&am…

CSAPP Lab5- MallocLab

实验目标 本实验需要用c语言实现一个动态的存储分配器,也就是你自己版本的malloc,free,realloc函数。 实验步骤 tar xvf malloclab-handout.tar解压文件 我们需要修改的唯一文件是mm.c,包含如下几个需要实现的函数 int mm_ini…

c++调用dll出现LNK2001 无法解析的外部符号

先说说下正常的dll。 动态库显试调用一般3个文件.h .lib .dll ,隐式调用 只需要2个文件:.h(函数定义) .dll 静态库2个文件:.h .lib 先说C正常dll显式调用 #include "BYD_MES/MES2Interface.h" //#include 是以当前…

Android 12.0下拉状态栏通知栏的通知设置默认展开

1.概述 在12.0的产品定制化中,对于SystemUI的定制也是常用的功能,而在下拉状态栏中的通知栏部分也是极其重要的部分,每条通知实时更新在通知栏部分,由于通知栏高度的限制,每条通知是默认收缩的,功能开发需要要求通知默认展开,所以就要从通知的加载流程分析 如图: 2.…

【Java基础篇】运算符

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏:Java.SE,本专栏主要讲解运算符,程序逻辑控制,方法的使用&…

多态的原理、单继承和多继承的虚函数表、以及虚函数表的打印。

一、多态原理 1、下面这个结果是多少&#xff1f; class A { public:virtual void func(){cout << "func()" << endl;}private:int _a 1; };int main() {printf("%d\n", sizeof(A));return 0; } 是 4&#xff1f;8&#xff1f;还是多少&am…

MVC 接收不到参数? —— 看我如何给你安排得明明白白

文章结构 问题背景&#xff1a;问题处理总结 问题背景&#xff1a; 现有如下代码&#xff1a; PostMapping(value "/payment/create") ResponseBody public CommonResult create(Payment payment) {}乍眼看去是不是很好&#xff0c;至少没啥问题很自然&#xff0c…

什么是日志关联

什么是日志关联 日志关联是一种分析来自不同源的日志数据以识别事件模式的技术。它用于更好地了解网络的活动&#xff0c;从而有效地保护网络免受漏洞和威胁。 日志关联是日志管理过程的关键部分。收集和存储日志后&#xff0c;集中式日志服务器将执行分析以检测特定事件。日…

LC-3 机器码编程实验

一、实验目的 分析和理解试验指定的需解决问题。利用LC-3的机器代码设计实现相关程序。通过LC-3仿真器调试和运行相关程序并得到正确的结果。 二、实验内容 利用LC-3的机器代码计算一个16位的字中有多少位是“1”&#xff0c;程序从x3000开始&#xff0c;需计算的字存储在x3…

c++ 11标准模板(STL) std::map(九)

定义于头文件<map> template< class Key, class T, class Compare std::less<Key>, class Allocator std::allocator<std::pair<const Key, T> > > class map;(1)namespace pmr { template <class Key, class T, clas…

知识图谱实战应用12-食谱领域智能问答系统,实现菜谱问答

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用12-食谱领域智能问答系统,实现菜谱问答,本项目基于py2neo和neo4j图数据库,将知识图谱应用于菜谱领域。通过构建菜谱知识图谱,实现简单的菜谱食材问答系统。用户可以通过问答系统,快速获取简单的菜谱食材信息。 一…

悦灵犀-全新的智能AI工具

最近一段时间&#xff0c;人工智能再次成为人类创新的焦点&#xff0c;不得不说&#xff0c;人工智能正在以一种全新的方式改变人们的生活&#xff0c;这是一个以大模型为核心的人工智能新时代&#xff0c;大模型的出现让千行百业将迎来新的机遇。 悦享星光作为国内高新技术企…

VC GDI双缓冲绘图

VC GDI双缓冲绘图 VC GDI双缓冲绘图创建内存DC和内存图片&#xff0c;缺一不可最好是封装一下内存绘制绘制效果 关键是不闪烁PS 重绘机制 VC GDI双缓冲绘图 双缓冲绘图&#xff0c;知道这个知识点&#xff0c;每次用的时候还得踩一遍坑&#xff0c;真是服&#xff0c;总结记录…