ARM与裸机开发教程
ARM和裸机开发教程包含三部分内容是ARM处理框架、ARM汇编编程与基于某种单板的裸机开发。ARM处理器内核在购买开发板的时候单板工厂会提供一个内核文档,针对内核的汇编语言也会提供一个用户手册(单独也可能和上个文档一起)。裸机主要是针对特定的ARM控制IP硬件逻辑原理,而汇编语言师进行ARM内核控制的特定语言基础。ARM裸机学习和汇编语言实战学习这两点是分不开的,尤其在逻辑开始阶段。当线程栈建立起来以后,C语言便用来作为逻辑开发的核心语言。进行汇编语言和逻辑开发之前需要掌握基本的计算机组成原理或者微机原理计算机基本结构_生活需要深度的博客-CSDN博客,同时需要了解基本的编译原理程序文件分布_生活需要深度的博客-CSDN博客。
1、ARM体系架构
ARM体系架构主要是基于芯片内核开发商提供的基本硬件用户手册开发。芯片ARM内核需要掌握寄存器、处理器用户模式和各种模式下内部寄存器的状态、流水线、异常与向量表、内核扩展(MMU、cache)。
2、汇编语言是什么?
CPU作为一种硬件状态机,核心实现数据计算,本身不具备智能。你输入一条指令instruction,它就运行一次,然后停下来,等待下一条指令。但CPU提供特定的机器码接口,按照其约定协议接口编写的某种逻辑代码(加法计算或者数据不同位置搬运逻辑)放在特定存储位置的代码CPU按照接口约定的指令依次执行,这样便有了智能。也就是说提供了开发的基本硬件接口操作单元,我们基于这些接口便可以编写较为复杂的逻辑处理。复杂的逻辑在一开始是按照硬件接口协议方式进行编写,这种方式非常的复杂后来逐渐被淘汰。这其中涉及的指令这些指令都是二进制的,称为操作码(opcode),比如加法指令就是00000011
。
对于人类来说,二进制程序是不可读的,根本看不出来机器干了什么。为了解决可读性的问题,以及偶尔的编辑需求,就诞生了汇编语言。这种非机器码语言都被称为高级语言。编译器作用,就是将高级语言写好的程序,翻译成一条条操作码。当然相比于C原因而言,汇编语言编程面对的还是CPU,需要掌握CPU资源情况,针对性的完成代码开发。高级语言线程的编译器已经将相关内容进行了封装,我们不需要了解资源使用情况,只需要学习语言的基本语法即可。汇编语言教程ARM指令集.宛城布衣ARM汇编汇编语言学校ARM指令-Android文档类资源-CSDN下载
1.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内核版本目前有M/A/R三个系列,三个系列的内核版本侧重点不同,针对每种内核也都有相关的文档说明。但是,对于软件编程人员来说,三种内核的汇编语言、内部寄存器%95以上是相同的。这种绩效差别主要是因为ARM芯片定位都是偏向控制类有关。对于不同公司生产控制类芯片,比方说cadence,其内部寄存器和汇编语言和ARM也是没有太多区别的。对于不同类型的侧重点的芯片,比方说网络类芯片、GPU、AI芯片这种专业类型的芯片其内部的指令类型就会有很大的差别。因此,在大类学习的时候对于ARM底层的学习可以认为是一通百通,学习完这类芯片对于其他厂家IP和,只要是控制类芯片基本无压力学习。
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:专题对应代码链接
ARM与裸机开发教程相关推荐
- 6410裸机开发教程下载
6410裸机开发教程下载 转载于:https://www.cnblogs.com/tanghuimin0713/p/3857593.html
- 基于stm32mp157 linux开发板ARM裸机开发教程4:Cortex-A7 内核存储系统与流水线(连载中)
前言: 目前针对ARM Cortex-A7裸机开发文档及视频进行了二次升级持续更新中,使其内容更加丰富,讲解更加细致,全文所使用的开发平台均为华清远见FS-MP1A开发板(STM32MP157开发板) ...
- 基于stm32mp157 linux开发板ARM裸机开发教程3:Cortex-A7 架构与工作模式(连载中)
前言: 目前针对ARM Cortex-A7裸机开发文档及视频进行了二次升级持续更新中,使其内容更加丰富,讲解更加细致,全文所使用的开发平台均为华清远见FS-MP1A开发板(STM32MP157开发板) ...
- 嵌入式ARM系统实战开发教程下载
分享一套韩老师的关于嵌入式ARM的视频教程--<嵌入式ARM系统实战开发(编程模型.指令系统.程序设计.混合编程.驱动开发)>,本课程重点是给大家讲解嵌入式ARM的开发方法,采用理论与实践 ...
- 【疯壳·ARM功能手机开发教程1】开发板上电教程
ARM功能手机 --疯壳·开发板系列 开发板上电教程 图1 硬件连接 做完全部的实验,需要有以下模块∶ WT 手机开发板(手机主控底板+手机电容屏模块+FPC 30P排线+GS ...
- Maix Bit(K210) 裸机开发教程(七) SD卡文件系统使用
SD卡使用 1.代码获取 2.代码修改 3. SD卡常用API 4.修改 5.效果展示 K210 裸机使用SD卡,下图是SD卡接口 1.代码获取 在我前面一篇博客里面简述了代码如何下载以及使用.htt ...
- Maix Bit(K210) 裸机开发教程(二)串口通信
Maix Bit SDK 1.使用API简介 2.代码 3.实现效果 Maix Bit 开发板 Kendryte IDE开发环境 实现功能,在串口助手输入字符,通过Maix Bit回显在串口. 嵌 ...
- Maix Bit(K210) 裸机开发教程(三) 定时的使用
Maix Bit SDK 1.常用API 2 代码 定时器(TIMER)K210有3个,每个定时器有4个通道.实现使用定时控制RGB LED灯循环闪烁. TIMER有如下功能: 启动或者禁用定时器 ...
- ARM裸机开发篇3:ARM汇编语言程序设计
写在前面: 本文章为<ARM Cortex-A7裸机开发篇>系列中的一篇,全系列总计11篇.笔者使用的开发平台为华清远见FS-MP1A开发板(STM32MP157开发板). 针对FS-MP ...
- ARM裸机开发篇2:ARM微处理器指令系统
目录 ARM微处理器指令系统 ARM处理器寻址方式 数据处理指令寻址方式 内存访问指令寻址方式 ARM处理器指令集 数据操作指令 乘法指令 Load/Store指令 跳转指令 状态操作指令 协处理器指 ...
最新文章
- Oracle11gExp导出空表方法
- python能写桌面程序吗_python能写桌面程序吗
- iostat 命令查看linux磁盘I/O
- sublime text2如何连接FTP/SFTP——图文详细教程
- 云原生开发框架dapr环境搭建:CLI安装和初始化
- JMetro版本4.8已发布
- Core Graphics 定制UIVIew 处理图片
- 收藏 | 深度学习图像分类任务中那些不得不看的技巧总结
- javascript基础修炼(10)——VirtualDOM和基本DFS
- MTK驱动开发(21)---camera基础知识2
- 2019.8.13节点的选取
- [svc]容器网络学习索引及网络监控
- 【主动轮廓模型(二)】《GVF Snake》算法原理与OpenCV实现
- 应届生简历如何写实习经历?
- Can not squeeze dim[1], expected a dimension of 1
- 0days最好的破解网站
- debian live-buid
- 三.栈与栈的实例——汉诺塔
- 魔法宝石(动态规划)
- 《数值分析(原书第2版)》—— 导读