嵌入式相关基础
一.常见的芯片类型
1.微控制器(MCU)
(1)STM32
主频(MHz) | 内核 | Flash(Kbytes) | Ram(Kbytes) | 封装 | ADC channels | DAC channels | SPI | |
STM32F407ZG | 168 | ARM Cortex-M4f | 1024 | 192 | LQFP144 | 24 | 2 | 3 |
STM32F407ZE | 168 | ARM Cortex-M4f | 512 | 192 | LQFP144 | 24 | 2 | 3 |
STM32F407VE | 168 | ARM Cortex-M4f | 512 | 192 | LQFP100 | 16 | 2 | 3 |
STM32F103ZE | 72 | ARM Cortex-M3 | 512 | 64 | LQFP144 | 21 | 2 | 3 |
STM32F103C8 | 72 | ARM Cortex-M4 | 64 | 20 | LQFP48 | 10 | 0 | 2 |
(2)RA6M5
RA6M5的晶振为24MHz,拥有2MB的代码闪存
2.系统级芯片(SoC)
(1)I.MX6ULL
I.MX6ULL是一款基于ARM Cortex-A7内核的高性能应用处理器,采用ARMv7-A架构,主频可达900MHz。
(2)RZ/G2L双核A55芯片
(3)RK3588
3.数字信号处理器(DSP)
4.现场可编程门阵列(FPGA)
5.应用特定集成电路(ASIC)
二.指令集
1. RISC
2. CISC
二.架构
1.ARM架构
1)
ARMv7架构 | |
ARM架构寄存器包括31个通用寄存器和6个状态寄存器,
2)通用寄存器组
R0-R3 | 传递参数与返回值 | 这些寄存器主要用于传递子程序的参数以及存放函数的返回值。在子程序调用之间,它们可以被用于任何用途,且被调用的函数在返回之前不必恢复这些寄存器的原始值。 |
R4-R11 | 局部变量存储 | 这些寄存器通常用于保存函数的局部变量。如果一个被调用的函数使用了这些寄存器,那么它在返回之前必须恢复这些寄存器的值,以便调用者能够在返回后继续使用未改变的值。 |
R12 | 内部调用暂存器ip | 这个寄存器作为子程序间的scratch寄存器,主要用于过程链接胶合代码中。在过程调用之间,可以将它用于任何用途,并且被调用的函数在返回之前不必恢复它的值。 |
R13 | 栈指针sp | 这个寄存器用作栈指针,指向当前的栈块限制或它的上面,用于临时数据的存储等。它不能被用于其他用途,并且在退出被调用的函数时,其内存储的值必须与进入时的值相同。 |
R14 | 连接寄存器lr | R14寄存器也被称为连接寄存器,主要用于保存子程序以及中断的返回地址。如果您保存了返回地址,则可以在调用之间将R14用于其他用途,但程序返回时要恢复其原始值。 |
R15 | 程序计数器PC | R15是程序计数器,它总是包含下一个要被执行的指令的位置。由于ARM采用了流水线机制,当正确读取了PC的值后,该值为当前指令地址加8个字节,即PC指向当前指令的下两条指令地址。 |
2.MIPS架构
MIPS架构以其简洁和高效的RISC设计闻名。RISC定义了一种处理器设计的范式,而MIPS是这种范式下的一个具体产品
3.x86架构
x86架构由英特尔公司开发,因其强大的兼容性和广泛的软件支持而在全球范围内得到广泛使用。这种架构的处理器能够运行多种操作系统,包括Windows和Linux。
4.PIC架构
PIC微控制器因其低成本和低功耗特性而广受青睐,在简单的嵌入式应用中得到广泛应用。
5.RISC-V架构
三.内核
Cortex-M3 | |
Cortex-M4 | |
Cortex-M7 | |
Cortex-A7 | |
Cortex-M33 | |
Cortex-A55 | |
四.STM32,PC端Linux和嵌入式中Linux的启动流程
五. PC端Linux和嵌入式端Linux
1.引导加载程序
PC端Linux系统通常不使用U-Boot作为引导加载程序,而PC端常用的是GRUB或LILO这样的引导加载程序。接下来详细讲述一下U-Boot:
U-Boot目录分布
arch/ | 该目录包含了针对不同处理器架构的特定代码和配置文件,例如arch/arm/ 目录包含了针对ARM架构的代码 |
board/ | 该目录包含了各种嵌入式开发板的配置文件和支持代码,每个开发板通常有一个对应的子目录 |
common/ | 该目录包含了通用的U-Boot代码和功能,适用于多个处理器架构和开发板 |
configs/ | 该目录包含了不同开发板的配置文件,可以根据需要选择合适的配置文件进行编译和定制。 |
doc/ | 该目录包含了 U-Boot 的文档和说明,包括使用手册、开发指南等。 |
drivers/ | 该目录包含了硬件设备驱动程序,用于支持各种外设和接口,如串口,网络,存储等 |
include/ | 该目录包含了U-Boot的头文件,定义了各种数据结构,宏和函数原型 |
tools/ | 该目录包含了一些辅助工具和脚本,用于编译,烧录和调试U-Boot |
configs/ | 该目录包含了各种开发板的配置文件,可以根据需要选择合适的配置文件进行编译和定制 |
Makefile | U-Boot的主要Makefile,用于编译和构建U-Boot |
这只是 U-Boot 目录结构的一些常见示例,实际的目录结构可能会因版本和配置而有所变化。在 U-Boot 的源代码中,可以找到更详细的目录结构和文件。
U-Boot启动引导过程
U-Boot 的引导启动过程包括上电初始化、加载 U-Boot、U-Boot 初始化、命令行界面、加载操作系统和启动操作系统等步骤