当前位置:   article > 正文

ARM开发之一:嵌入式开发简介

arm开发

1.ARM的历史版本

        一方面去了解ARM,另一方面为了可以在做项目的时候选择一款合适的ARM版本来支持你的项目

注意:选择ARM版本时并不是越高越好,版本越高性能越好,但是价格也会更高

所以在做项目的时候一定是选择一款适合的ARM版本。

ARM原本的含义是(Acorn RISC Machine),后来Acron公司剥离出了ARM部门,又成立了ARM公司,含义改为(Advanced RISC Machine)。

ARM在英国剑桥成立的,

ARM    ST公司        某工厂  某公司 

ARM-CORTEX-M3   STM32F103RBT6  单片机开发板  购买者

ARM-CORTEX-A53  三星(s5p6818) 深圳九鼎科技 购买者

全球90%的电子设备使用的都是ARM体系架构的芯片

但是ARM公司并不挣钱

在2016年年底被日本软银给收购了

本次学习使用的开发板是s5p6818(三星公司的芯片)(便宜,性价比高),内部的核心使用的是ARM-CORTEX-A53核心,使用的是ARMV8架构。

ARM-CORTEX-A53(8核)的CPU,多数是四核的,要根据实际硬件情况

和S5P6818类似的哈有一个芯片是S5P4818,内部使用的核心是ARMV7架构的

ARM-CORTEX-A9(4核)的CPU

S5P6818和S5P418芯片从外观上一模一样,所以硬件上可以同平台走高端和低端定制,一款开发板电路既可以有高端产品,也可以有中端的产品。

2.ARM嵌入式开发环境

和以前学习的STM32开发做一个对比

STM32的开发环境:Windows(7 8 10 11) + Keil(5.20及以上版本)+仿真器驱动 + STM32CUBEMX

我们在写STM32程序的时候,写的是裸板驱动,写的程序是直接操作芯片上的外设或者开发板外接的模块

SP6818的开发环境:Linux(Ubuntu 20.04LTS)

Linux操作系统的其他分支也行

我们在做嵌入式开发时,首选更趋向于开发者使用

  1. Ubuntu操作系统更趋向于开发者使用
  2. 将来开发出现问题,在网上Ubuntu环境的解决方法最多

LTS(长期支持的版本),选择Ubuntu时,前面的数字都是偶数,后面的是04版本(因为Ubuntu每半年发行一次,分别是4月和10月)

可以使用uname -a命令查看自己的乌班图系统版本

或者lsb_release -a查看

我们在高端开发板上可以移植操作系统,如:

  • Linux 定制一款Linux
  • Android 移植安卓
  • Ubuntu 在很多的电子设备上,现在使用Ubuntu系统也很多
    • 如北京地铁上的小电视、购票机器、广告牌

3.嵌入式开发的结构

APP :QQ 微信 腾讯会议 游戏 控制界面

GUI :     QT(C++) Android(Java) CTK(C) MiniGUI(C) LVGL(C/C++)

本地库: libc.so libjpeg.so libc++  libsqlite3.so...

文件系统: 根文件系统

Kernel: Linux Android Windows

bootloader :uboot

-----

硬件

S5P6818开发板  = 核心板 + 底板

核心板 = SOC(芯片)+ 内存(DDR3运行内存1GB) + EMMC(硬盘8G) + PMU(电源管理芯片)+PHY芯片(网络芯片:核心板左上角的那个芯片,为了ETH(以太网)工作的)

SOC(芯片) = CPU(ARM-CORTEX-A53(8核*1.4GHz)) + 内存 + 硬盘(ROM只读)+总线(CPU通过总线访问外设的)+外设(GPIO\USART\IIC\SPI\TIMER...)

CPU =  ARM-CORTEX-A53 + cashe(高速缓存) + mmu(内存管理单元<访问的地址是虚拟地址>)+ 中断控制器(GIC) + ...

底板 = reset + beep + ...

PS:冯诺依曼结构和哈弗结构,冯诺依曼结构只有Ucashe,只能加载内存或者硬盘;哈弗结构有Icashe和Dcashe。三缓层级

1)APP

        首先是最上层的图形化程序就是APP,比如说开发板上配了一个LCD液晶显示屏或者OLED显示屏也可以通过开发板上的HDMI...显示接口外接显示屏,显示应用程序。

2)GUI

        我们想要开发图形化程序需要使用GUI的支持,说白了就是要用图形库

        其实不用图形库也可以开发,一个个像素点点,但是相当麻烦, 我使用的比较多的GUI是QT,GTK对于嵌入式来说,支持的并不完备,不是很推荐。红帽6的界面就是GTK写的,就显得少许卡顿,在Linux平台下用的比较多,QT由于跨平台性较好,较为推荐。MIniGUI也是C语言开发的,但是做的是一些简单的界面。LVGL(免费开源,体积小,跨平台)使用的是C、C++,嵌入式当中比较流行。

3)LIB库

        在本地执行的程序,都需要本地库的支持。

        如何制作动态库和静态库?(自行学习吧)

4)文件系统

        将硬盘中的二进制文件识别成各种各样的文件。

5)内核

        在文件系统之下就是内核了:Linux内核\Android内核\Windows内核

6)bootloader

        是一个启动程序,其功能就是:检测硬件 + 引导内核

PS:大家比较熟悉PC机,PC机中有一个BIOS(basic input output system)BIOS的功能主要是检测硬件的,检测硬件之后,再启动GRUB(引导内核)

我们嵌入式中的bootloader就相当于BIOS + GRUB的功能。

在当前嵌入式中,常用的bootloader是uboot(Universal bootloader<通用的bootloader>)

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号