一.什么是裸机开发
裸机是一种浅显的讲法,便是指ARM设备上没有任何现成的程序来支撑你的开发的软件运转。它是相对设备上有在操作系统的状况运转可执行程序而言的。
这两种程序有很大差异。在操作系统环境下,根本上跟桌面程序开发没有太多差异,而裸机程序需求自己初始化硬件环境来运转。由于必须有一小段汇编写的引导代码来初始化,并且直接操作硬件。
裸机程序一般选用少数汇编加C言语来编译(理论上C++能够了,但比较少)首要用来ARM汇编,硬件操控教育。硬件验证和驱动开发。
大型的程序bootloader,实时操作系统uCOS/Nclues严厉讲也是裸机程序。
并且ARM的CPU的都有JTAG的在线硬件调试接口,经过JTAG硬件调试器,能够直接运转和单步调试裸机程序
二.裸机开发流程.
编码–>编译–>调试–>下载
1.编码选用文本编辑器或相应IDE均可
2.编译器现在首要是两大类
armcc (ARM出品的编译器)
arm-linux-gcc (GNU ARM-Linux编译器,在非EABI的编译器还分为arm-elf-gcc和arm-linux-gcc的差异现在根本不分了。)
arm-linux-gcc 编译出来的可执行文件格局是ELF,除了常见的TEXT段,BSS/DATA段外,还有会有一些调试段..而armcc编译出来的格局是AXF。但AXF实质是仍然是ELF格局,只不过加一些特别的调试段。
3.调试办法
假如用JTAG在线硬件调试的那种单步调试.有两种接口。一种是ARM公司的RDI接口,别的一种硬件调试器虚拟的gdb接口。这个要运用ELF/或AXF格局
但许多程序会用直接让程序输出信息到串口方法进行调试。这种速度比较快,能够了解是广义上的调试。这个阶段要运用BIN格局。
4.下载
下载是指把可执行的BIN文件下载到开发板上的Flash之中。让其彻底脱离调试环境彻底独立运转。
假如一个空板,即Flash中没有任何程序。这时需求一些特别下载方法。比用JTAG烧录东西下载到Flash之中。有一些CPU还有一些特别的下载方法。比方S3C6410支撑SD卡发动。能够把下载的文件放在SD卡上,由SD卡里的BOOTLOADER来下载。
还有一些CPU内部带有ROM自行发动一个小程序,然后经过USB下载程序。比方JZ4740。
假如Flash上烧录有bootloader,它往往自带有烧录功用。 能够经过TFTP/USB/串口方法从PC机下载到设备上。
可执行文件格局
Elf
Linux下规范可执行结构.还有一种out是前期的较为简略的可执行文件格局。但是在新版本里out便是ELF格局。
BIN
bin文件是由ELF转化而来,专门用下载到设备。相对于ELF它有两个改变。榜首BIN只要根本的text/bss/data段,没有调试信息。第二。由于bin要下载到设备的。里边各段的地址是按相应地址对齐烧录的。由于两段之间很可能补一些空间的0空间。