Bootloader
简述
Bootloader和OTA有紧密关系。
- flash:很小 ; ram:很小(或者没有);
直接升级烧写,不能做到 - flash:小或者大; ram:足够大;
把前版本APP拷贝到RAM中运行,然后通过网络接收新版本APP,将新版本APP,写入到flash。可以完成升级。- 需要大RAM
- 断电,RAM丢失变成砖
- 引入bootloafer (有开源代码:SWUpdate)
4. Linux中的bootloader
编写最简单的BootLoader
MDK生成反汇编文件和bin文件
生成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文件中所有的符号