合并BIN文件的两种方法(转)
源:http://blog.chinaunix.net/uid-20745340-id-1878803.html
合并BIN文件的两种方法
在单片机的开发过程中,经常需要将两个单独的BIN文件合并成一个文件,方便烧写和生产。下面结合STM32的IAP Bootloader Code和Application Code的合并,介绍两种合并BIN文件的方法。
首先简单介绍一下STM32的IAP。IAP(In-application-programming),即在应用中编程。有了它,产品发布之后,仍然可以方便的升级固件,而不需要拆机并用JTAG等方式更新程序。IAP系统的固件一般有两部分组成,IAP BootLoader Code和Application Code,如下图所示。
系统启动时,首先运行IAP BootLoader Code,并检测相应状态,判断是执行升级的流程还是直接运行本地的Application Code。 一般来说,BootLoader和Application是分别编译的,会生成两个二进制文件。在工厂生产时,如果分别烧写这两个文件,显然有些麻烦。这时,我们就可以将两个BIN文件合并成一个,直接烧写。假设Application Code的偏移地址为0x1000,IAP固件在Flash中的分布如下图所示。
下面介绍第一种方法,使用二进制文件合并工具(UBIN.exe),这个小工具是以前在S3C2410上开发uCOS时做的,功能比较简单,满足一般的需求。
首先,添加第一个文件1.bin,其地址为0x0000,所以,偏移量设置为0x00000000,设置完偏移量后点击“添加”按钮。
然后添加第二个文件,偏移量根据需要设置为0x00001000,如下图所示。
设置目标文件为C:\dst.bin,然后点击“合并”按钮。
正常情况下,会成功生成目标文件,并有如下图所示的提示信息。
这种方法相对比较灵活,对合并文件的个数和偏移地址没有限制。缺点是不支持配置文件,不能保存所设的配置,所以,每次合并都得手动做很多重复工作。在调试阶段会比较浪费时间。
下面介绍一种通过命令行工具合并两个文件的方法。该方法需要用到fsutil.exe、cat.exe和hbin.exe。写一个批处理文件,分别调用这三个工具,最终将1.bin和2.bin合并成dest.bin。批处理文件的内容如下:
del dest.bin fsutil file createnew dest.bin 4096 cat 2.bin >>dest.bin hbin 1.bin dest.bin
批处理文件各行的简单说明,
- del dest.bin,删除原来的目标文件
- fsutil file createnew dest.bin 4096,创建一个大小为4096字节的空白文件dest.bin,该值的大小由偏移地址0x1000决定
- cat 2.bin >>dest.bin,将2.bin追加到空白文件dest.bin之后
- hbin 1.bin dest.bin,将1.bin放到dest.bin的头上,填充dest.bin头上4KB的空白
dest.bin就是我们最终需要的合并完成的文件。将它与第一种方法合并的文件dst.bin对比一下,如下。
可以看到两种方法合并出的文件,完全一样。
第二种方法的好处在于,可以在集成开发环境中设置编译选项,在编译完成之后自动执行该批处理,这样,编译完成后即得到能够直接固化到Flash中的二进制文件,节省了一些时间。
文中介绍的相关工具的下载地址:http://files.cnblogs.com/we-hjb/HEBING.rar
合并BIN文件的两种方法(转)的更多相关文章
- .net中创建xml文件的两种方法
.net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...
- MySQL命令执行sql文件的两种方法
MySQL命令执行sql文件的两种方法 摘要:和其他数据库一样,MySQL也提供了命令执行sql脚本文件,方便地进行数据库.表以及数据等各种操作.下面笔者讲解MySQL执行sql文件命令的两种方法,希 ...
- elf格式转换为hex格式文件的两种方法
这周工作终于不太忙了,可以写点笔记总结一下了. 之前的文章如何在Keil-MDK开发环境生成Bin格式文件,介绍了如何在Keil开发环境使用fromelf软件,将生成的axf文件转换为bin文件,这次 ...
- [转载]C#读写txt文件的两种方法介绍
C#读写txt文件的两种方法介绍 by 大龙哥 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char ...
- C#读写txt文件的两种方法介绍
C#读写txt文件的两种方法介绍 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char数组,然后输出 ...
- spring 配置文件 引入外部的property文件的两种方法
spring 的配置文件 引入外部的property文件的两种方法 <!-- 引入jdbc配置文件 方法一 --> <bean id="propertyConfig ...
- Linux下查看alert日志文件的两种方法
--linux下查看alert日志文件的两种方法: --方法1: SQL> show parameter background_dump_dest; NAME TYPE VALUE ------ ...
- oracle rename数据文件的两种方法
oracle rename数据文件的两种方法 2012-12-11 20:44 10925人阅读 评论(0) 收藏 举报 分类: oracle(98) 版权声明:本文为博主原创文章,未经博主允许不 ...
- C#读写txt文件的两种方法介绍[转]
C#读写txt文件的两种方法介绍 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char数组,然后输出 ...
随机推荐
- org.hibernate.exception.JDBCConnectionException: could not execute query
最近在做一个项目,测试的时候是没有问题的,但是放到服务器上以后,第二天就会出现下面的异常.重启Tomcat服务器后就正常了,但是下一天还是会出现同样的异常..... 我就查了一些资料最终把问题给解决了 ...
- HAProxy与varnish
Even if HAProxy can do TCP proxying, it is often used in front of web application, exactly where we ...
- 安卓四大组件的作用、安卓Service的作用
Activity好像是应用程式的眼睛,提供与user互动之窗. BroadcastReceiver好像是耳朵,接收来自各方的Intent. Service是在后台运行的. 一个Service 是一段长 ...
- input text中不能显示空格后的内容
<input type="text" value='' /> 即value=后面一定要用引号引起来,不然就会出现空格及其后内容不显示的问题
- QProcess 进程类—调用外部程序
http://blog.csdn.net/newbee520/article/details/8279101 启动一个新的进程的操作非常简单,只需要将待启动的程序名称和启动参数传递给start() ...
- iOS中的代理和Block
一.代理(Delegate) 1)含义 iOS中的代理,比如父母要去上班,到中午12点了,需要给宝宝喂饭吃,但是父母正在上班,这时需要有一个人来帮忙完成一些事情(需要有个保姆来帮忙给宝宝喂饭),此时, ...
- .net获取根目录的方法集合
编写程序的时候,经常需要用的项目根目录.自己总结如下 .取得控制台应用程序的根目录方法 方法1.Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径 方法2. ...
- linux 查看磁盘、文件夹、文件大小(df du)
du 查看文件夹大小 1.查看当前文件夹中所有文件夹及其子文件夹的大小,注意是文件夹大小,不是文件 # du -h -rw-r--r-- 1 root root 82785865 6月 9 15:53 ...
- Python定制类
https://docs.python.org/3/reference/datamodel.html#special-method-names
- 128M小内存VPS优化与typecho环境搭建
在使用Haphost提供的128M内存的VPS建站时,debian7+wordpress+nginx+mysql跑起来相当吃力.然后使用Debian7+typecho+lighttpd+sqlite的 ...