arm裸机编程
主要针对的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解决。