• 嵌入式裸板开发



    主要针对的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程序下载到开发板?

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

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

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

  • 相关阅读:
    矩阵运算_矩阵的协方差矩阵/两个矩阵的协方差矩阵_求解详细步骤示例
    【Java SE】面向对象、类和对象详解
    To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.
    如何防止服务器被攻击
    postgis数据库导出csv表再导入postgis
    红杉官网已删长文:伴随SBF一路走来的救世主情结(上)
    猜数字游戏(2)
    【C++】入门三
    24PL-18-50-1836、12PN-4.1-50-1836比例电磁铁控制器
    期货开户交易所的手续费和查询方法
  • 原文地址:https://blog.csdn.net/guangod/article/details/126346548