嵌入式裸板开发部分(其他在书上)

本文围绕STM32开发展开,介绍了eMMC存储器,阐述A7及A8启动方式与流程,包括内部boot模式、串行下载模式等。还分享实际问题及解决办法,如将虚拟机编译的ARM程序下载到开发板、xmode等含义、sz与rz命令,以及解决运行hello程序的权限问题。


主要针对的cotex-A7/8,两种核的认识过程。A7核对应的芯片为QG2101A,A8对应的芯片为s5p210.
== 注:这部分舍去吧,讲的不是很明白。所有的知识点都放到自己的书上,这样专心实验就可以,不用再做笔记了==

基本知识累积

什么是eMMC存储器?

eMMC是embedded Multi Media Card的简称,即嵌入式多媒体卡, 是一种闪存卡的标准。主要针对手机或平板电脑等产品的内嵌式存储器标准规格.采用统一的MMC标准接口, 把高密度NAND Flash以及MMC Controller封装在一颗BGA芯片中。

A7及A8启动方式及流程

内部boot模式

在此模式下,芯片会执行内部的 boot ROM 代码,这段 boot ROM 代码会进行硬件初始化(一部分外设),然后从 boot 设备(就是存放代码的设备、比如 SD/EMMC、NAND)中将代码拷贝出来复制到指定的 RAM 中。

串行下载模式

通过 USB 或者 UART 将代码下载到板子上的外置存储设备中,向开发板上的 SD/EMMC、NAND 等存储设备下载代码。

实现启动模式选择

一般都是类似于stm32的管脚设置的方式。模式里面的不同设备的选择也是通过管脚设置。

镜像文件内容

①、Image vector table,简称 IVT,IVT 里面包含了一系列的地址信息,这些地址信息在ROM 中按照固定的地址存放着。
②、Boot data,启动数据,包含了镜像要拷贝到哪个地址,拷贝的大小是多少等等。
③、Device configuration data,简称 DCD,设备配置信息,重点是 DDR3 的初始化配置。
④、用户代码可执行文件,比如 led.bin。在A7中内部 Boot
ROM 会将 load.imx 拷贝到 DDR 中,用户代码是要一定要从 0X87800000 这个地方开始的,因为链接地址为 0X87800000,load.imx 在用户代码前面又有 3KByte 的 IVT+Boot Data+DCD 数据,因此 load.imx 在 DDR 中的起始地址就是 0X87800000-3072=0X877FF400。
对于A8而言,就是前16个字节,保存一个校验和。程序210.bin 最终就是被拷贝到IRAM 的起始地址0xD0020000处,因为bin文件中包含了16byte的头部,代码的真实起始地址是0xD0020010,所以上述启动序列的第七步是跳转到IRAM的0xD0020010地址上继续运行

实际遇到的问题

如何将虚拟机编译好的ARM程序下载到开发板?此问题已经解决,实则是可以的,不过要按ctrl键,右击发送文件

CRT上的Zmode方式就不说了,就是麻烦点,能否用常用的moba实现呢?当前还不可以
查了一下,moba是不支持zmode的,只支持ssh连接后的ftp上传及下载。但也扩展了下原来还有sz和rz命令,这样方便的上传及下载命令。

xmode与ymode 、zmode分别是什么?了解下

sz和rz命令的原理其实是来源于下面四个文件传输协议:
XModem是一种发送等待(send-and-wait)协议, 具有流量控制功能。数据长度为128字节。
YModem是XModem的改进版。它可以传送多个文件,数据长度可达1K字节且支持16位CRC校验。
ZModem不但具有纠错功能,而且是一种流式协议。它不再以收方发ACK引导。
KERMIT类似于XModem,但它对XModem进行了改进,可以传输多个文件,错误检测方式明显改善。同时KERMIT还提供压缩功能。

sz与rz命令代表什么

嵌入式linux作为服务器
sz 表示服务器发文件到PC
rz表示要接收文件,来自PC的文件
所以服务器端要安装上sz与rz两条命令包:

wget http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz 
tar zxvf lrzsz-0.12.20.tar.gz && cd lrzsz-0.12.20 
./configure && make && make install
# 创建软链接,这样就可以直接使用rz和sz了
cd /usr/bin 
ln -s /usr/local/bin/lrz rz 
ln -s /usr/local/bin/lsz sz

使用crt时,可以通过 session opetion,设置好zmode默认的上传及下载目录。
此种方式,需要将arm板当作服务器,不太现实,资源有限。

运行开发板上第一个hello程序,遇到./hello: Permission denied

权限问题,执行chmod u+x hello,即可。
原理:首先执行 ls --all,可以看到文件的所有者及权限为:rw-r-r
就是没有x,执行权限,而u:表示所有者,所以用chmod更改权限后变为rwxr-r解决。

嵌入式开发与有操作系统的嵌入式开发存在多方面的区别: ### 对硬件资源的控制方式 - **嵌入式开发**:开发者需要直接对硬件资源进行控制,包括CPU、内存、外设等。要详细了解硬件的工作原理、寄存器配置等底层知识,通过编写底层驱动程序来操作硬件。例如在开发中点亮LED,需要手动配置相关寄存器地址,像GPFCON(控制寄存器)和GPFDAT(数据寄存器)等,将LED对应的引脚设置为输出引脚 [^1]。 ```c // 示例代码:开发点亮LED #define GPFCON (*(volatile unsigned long *)0x56000050) #define GPFDAT (*(volatile unsigned long *)0x56000054) void main() { GPFCON = 0x00000100; // 设置GPF4为输出引脚 GPFDAT = 0x00000000; // 输出低电平点亮LED while(1); } ``` - **有操作系统的嵌入式开发**:操作系统负责管理硬件资源,开发者通过操作系统提供的接口来使用硬件。不需要深入了解硬件的底层细节,只需调用系统提供的API函数即可完成硬件操作,开发效率相对较高。例如在Linux操作系统下,可以使用系统调用函数来控制LED。 ```c // 示例代码:在Linux系统下控制LED #include <stdio.h> #include <fcntl.h> #include <unistd.h> #define LED_DEVICE "/dev/led" int main() { int fd; fd = open(LED_DEVICE, O_RDWR); if (fd < 0) { perror("open"); return -1; } write(fd, "1", 1); // 点亮LED close(fd); return 0; } ``` ### 系统复杂度与功能实现 - **嵌入式开发**:由于没有操作系统的支持,系统复杂度相对较低,适合实现一些简单、对实时性要求极高的功能。但开发难度较大,需要开发者自己处理各种硬件和软件的细节,如内存管理、中断处理等。 - **有操作系统的嵌入式开发**:可以实现复杂的功能,如多任务处理、网络通信、图形界面等。操作系统提供了丰富的功能和服务,开发者可以利用这些资源来快速开发出功能强大的应用程序。 ### 开发难度和效率 - **嵌入式开发**:开发难度大,需要开发者具备深厚的硬件知识和底层编程技能。开发周期长,因为需要手动实现很多基础功能。但对于理解硬件工作原理和提高编程能力有很大帮助。 - **有操作系统的嵌入式开发**:开发难度相对较低,开发者可以专注于应用程序的开发。借助操作系统的功能和工具,开发效率高,能够快速推出产品。 ### 可移植性 - **嵌入式开发**:代码的可移植性较差,因为代码通常与特定的硬件平台紧密相关。如果更换硬件平台,可能需要重新编写大部分代码。 - **有操作系统的嵌入式开发**:具有较好的可移植性。只要操作系统支持目标硬件平台,应用程序可以在不同的硬件平台上运行,只需进行少量的修改。 ### 实时性 - **嵌入式开发**:由于没有操作系统的调度开销,能够实现较高的实时性。开发者可以精确控制任务的执行时间,适用于对实时性要求严格的场合,如工业控制、航空航天等领域。 - **有操作系统的嵌入式开发**:实时性取决于操作系统的实时性能。一般的通用操作系统(如Linux)实时性较差,但有一些实时操作系统(如VxWorks、RTLinux等)可以提供较好的实时性能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guangod

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值