ARM与裸机开发教程

ARM和裸机开发教程包含三部分内容是ARM处理框架ARM汇编编程与基于某种单板的裸机开发。ARM处理器内核在购买开发板的时候单板工厂会提供一个内核文档,针对内核的汇编语言也会提供一个用户手册(单独也可能和上个文档一起)。裸机主要是针对特定的ARM控制IP硬件逻辑原理,而汇编语言师进行ARM内核控制的特定语言基础。ARM裸机学习和汇编语言实战学习这两点是分不开的,尤其在逻辑开始阶段。当线程栈建立起来以后,C语言便用来作为逻辑开发的核心语言。进行汇编语言和逻辑开发之前需要掌握基本的计算机组成原理或者微机原理计算机基本结构_生活需要深度的博客-CSDN博客,同时需要了解基本的编译原理程序文件分布_生活需要深度的博客-CSDN博客

1、ARM体系架构

ARM体系架构主要是基于芯片内核开发商提供的架构手册,目前ARM包含ARMv6-v8等一些列芯片机构。ARM芯片架构需要掌握寄存器、处理器用户模式和各种模式下内部寄存器的状态、流水线、异常与向量表、内核扩展(MMU、cache)。但是,对于软件编程人员来说,三种内核的汇编语言、内部寄存器95%以上是相同的,内部设计可见度不高。目前为止ARM总共发布8个版本V1-V8架构:ARMv1、ARMv2、ARMv3、ARMv4、ARMv5、ARMv6、ARMv7 、ARMv8,这是ARM架构指令集的多个v版本。

  • V1-V3 :最早的版本,目前已废弃
  • V4-V6 : 经典处理器中运用的比较多
  • V7 : 目前Cortex系列处理器主要是这种架构、支持Thumb-2的32位指令集
  • V8 : 兼容ARMv7架构的特性,并支持64位数据处理

基于不同的ARM架构可以设计出不同特点的内核处理器。比如基于ARMv3架构设计出的处理器ARM6,ARMv7 这两款处理器适用于不同的场景,硬件可能不同,但是架构指令集是一样的。好比盖房子,刚开始因为水平低流行盖平房,这就是一种架构(ARMv5),然后这种平房架构你可以设计出一款独立卫生间的款式, 这叫ARM7内核。 然后其他人(芯片设计公司)想盖房子的就买你这个图纸去盖,接着过一段时间,有人觉得光独立卫生间还不够啊, 我还想有个小院子! 好吧,那ARM就满足你们的要求,出个带小院子的款式(ARM9)。即ARMv1/2/3等是指令集的架构,ARM7/9等是基于架构设计出的内核处理器。ARM的架构都是基于RISC指令集而设计的,内核是实现这一指令集的硬件架构的基础。

2、汇编语言是什么?

CPU作为一种硬件状态机,核心实现数据计算,本身不具备智能。你输入一条指令instruction,它就运行一次,然后停下来,等待下一条指令。但CPU提供特定的机器码接口,按照其约定协议接口编写的某种逻辑代码(加法计算或者数据不同位置搬运逻辑)放在特定存储位置的代码CPU按照接口约定的指令依次执行,这样便有了智能。也就是说提供了开发的基本硬件接口操作单元,我们基于这些接口便可以编写较为复杂的逻辑处理。复杂的逻辑在一开始是按照硬件接口协议方式进行编写,这种方式非常的复杂后来逐渐被淘汰。这其中涉及的指令这些指令都是二进制的,称为操作码(opcode),比如加法指令就是00000011

对于人类来说,二进制程序是不可读的,根本看不出来机器干了什么。为了解决可读性的问题,以及偶尔的编辑需求,就诞生了汇编语言。这种非机器码语言都被称为高级语言。编译器作用,就是将高级语言写好的程序,翻译成一条条操作码。当然相比于C原因而言,汇编语言编程面对的还是CPU,需要掌握CPU资源情况,针对性的完成代码开发。高级语言线程的编译器已经将相关内容进行了封装,我们不需要了解资源使用情况,只需要学习语言的基本语法即可。汇编语言教程ARM指令集.宛城布衣ARM汇编汇编语言学校ARM指令-Android文档类资源-CSDN下载

2.1. 基本语法

这里有两套汇编的语法:分为ARM公司的标准ARM汇编语言和GNU对ARM支持的GNU ARM汇编。ARM标准汇编语言即ARM公司的开发工具ADS里用的汇编语言;GNU汇编即在LINUX下用GCC编译的汇编。两者语法有少许差异。因此,通常我们下载的LINUX下的ARM接口代码放到ADS下是不能编译通过的,需要进行少许修改。GNU AS语法即AT&T汇编语法,uboot用到的语法。其编码格式都是小写的方式。

2. ARM裸机开发

ARM裸机是针对特定芯片厂家的SOC进行特定硬件功能开发和学习,代码只是简单的涉及硬件寄存器的配置和功能使用,不会有大型操作系统复杂的软件框架。学习过程中前提必须要我们详细的对ARM控制核心的规格书进行研究,了解其各个模块的运作过程。当然只有单纯的IP控制核心是没有实际意义的,必须要有足够多的外设进行数据获取和处理结果输出,数据处理流程可以通过建立在IP控制和之上复杂的软件计算流程(算法)完成。ARM逻辑驱动主要是针对当前IP控制核心外部设备驱动功能,以便设备能够较好地完成数据输入或者数据输出。不同的应用场景有不同的数学模型,自然有不同的计算逻辑。比方说购物APP,主要实现产品展示、购买、搜索。裸机精华是uboot代码,可以通过这部分代码的学习充分掌握逻辑代码编程。

2.1 ARM内核

ARM处理器IP最经典是有M/A/R三个系列,三个系列的内核版本侧重点不同,针对每种处理器也都有相关的文档说明。这种绩效差别主要是因为ARM芯片定位都是偏向控制类有关。对于不同公司生产控制类芯片,比方说cadence,其内部寄存器和汇编语言和ARM也是没有太多区别的。对于不同类型的侧重点的芯片,比方说网络类芯片、GPU、AI芯片这种专业类型的芯片其内部的指令类型就会有很大的差别。因此,在大类学习的时候对于ARM底层的学习可以认为是一通百通,学习完这类芯片对于其他厂家IP和,只要是控制类芯片基本无压力学习。

 ARM不同系列的功能对比

2.2. 裸机硬件

裸机硬件主要是设计到硬件的基本原理和接口,需要充分掌握裸机的用户手册给定的硬件参数,对各种类型的硬件内部基本运作原理有充分的把握。逻辑硬件第一个学习的就是SOC硬件本身,其复杂的逻辑需要专业人员涉及,但是其用户手册我们可以知道其具体的怎么去控制以及基本的对外接口是什么样子的。之后涉及的各种类型的硬件资源,这些硬件资源较大的模块比方说DDR掌握其原理也是非常难的,我们只能学习了解其基本的接口和使用方式。

学习目标 掌握写汇编代码的能力,可以分析任意裸板包括 u-boot、内核里的相关汇编代码 掌握常用的硬件部件操作,比如 GPIO,UART,I2C,LCD,触摸屏; 可以写出这些硬件部件的裸板程序 深入理解 ARM 体系统架构,可以写出具备中断功能的裸板程序,对程序现场的保存、恢复有所了解,这些原理适用于任何架构 CPU,内核及应用程序 熟悉裸板程序的结构,给你一个 bootloader 就能分析它的初始化部分、内存使用情况、链接地址、重定位、程序的相对跳转/绝对跳转等 掌握 bootloader 启动内核的原理,能完全自己写出一个 bootloader、字符设备驱动

uboot是裸机精华,深入研读uboot代码可以充分掌握逻辑核心知识,具体查看专题u-boot-1.1.6 JZ2440补丁与编译_生活需要深度的博客-CSDN博客

对于不同类型的芯片,不管是大类不同(DSP和MCU)还是小类不同(ARM MCU和cadence MUC),外部硬件都是一致的,控制模块寄存器操作%99是相同的。因此,对于外部硬件学习是一通全通。

附件1:专题对应代码链接

参考:

  1. 【genius_platform软件平台开发】第八十八讲:arm公司的V架构和内核发展史(整理)_armv10架构什么时候发布-CSDN博客
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值