C/C++编程-功能实践-bootloader

Bootloader

  • 简述
  • 编写最简单的BootLoader
    • MDK生成反汇编文件和bin文件

简述

Bootloader和OTA有紧密关系。

  1. flash:很小 ; ram:很小(或者没有);
    直接升级烧写,不能做到
  2. flash:小或者大; ram:足够大;
    把前版本APP拷贝到RAM中运行,然后通过网络接收新版本APP,将新版本APP,写入到flash。可以完成升级。
    1. 需要大RAM
    2. 断电,RAM丢失变成砖
  3. 引入bootloafer (有开源代码:SWUpdate)

C/C++编程-功能实践-bootloader_第1张图片
4. Linux中的bootloader
C/C++编程-功能实践-bootloader_第2张图片

编写最简单的BootLoader

MDK生成反汇编文件和bin文件

C/C++编程-功能实践-bootloader_第3张图片
生成bin文件
fromelf –bin –output=xxxx.bin xxxx\xxxx.axf
其中–bin是制定输出文件格式是bin格式,
–output=xxxx.bin指定输出文件名,
xxxx\xxxx.axf 是指定路径下的指定axf文件,此文件作为输入文件,是keil编译后产生的

生成反汇编文件
fromelf –text -a -c –output=xxxx.txt xxxx\xxxx.axf
其中–text是指定输出文件格式为text格式,
-a Prints the global and static data addresses (including addresses for structure and union contents). This option can only be used on files containing debug information. Use the -select option to output a subset of the data addresses.
-c Disassembles code
–output=xxxx.txt 指定输出文件名,
xxxx\xxxx.axf 是指定路径下的指定axf文件,此文件作为输入文件,是keil编译后产生的;

想要了解更多那就看fromelf userguide吧!

关于MDK的编译环境信息

map文件
bin文件
hex文件
反汇编文件
.o文件
.elf文件

然后这些除了bin或者hex是最后的编译二进制文件以为,其他的信息输出文件,不是真正的编译过程。在编译过程种,数据的具体值信息,编译器不作信息输出,只有通过真正的编译过程文件查看,比如二进制文件、.o文件。

查看二进制文件,需要用专用的编辑器(segger studio),因为它需要对arm内核进行地址偏移,比如0x08000000


查看.o文件,可在linux下通过命令查询

objdump -h xxxx.o
打印主要段的信息

objdump -x xxxx.o
打印更多的详细信息

objdump -s xxx.o
将所有段的内容以16进制方式打印出来

objdump -d xxx.o 或者-S
将所有包含指令的段反汇编
objdump -t xxx.o
查看所有的符号以及他们所在段
readelf -h xxx.o
查看.o文件的文件头详细信息
readelf -S xxx.o
显示.o文件中的所有段,即查看段表
size xxx.o
查看.o文件中各个段所占大小
nm xxx.o
查看.o文件中所有的符号

你可能感兴趣的:(C/C++编程,嵌入式,Linux,c语言,linux,开发语言)