2010年(49)
分类: 嵌入式
2010-09-07 11:43:07
在工程的编译规则中可选的有
Vxworks
Vxworks_rom
Vxworks_rom_compress
Vxworks_rom_res
1 调试用
Vxworks:这个规则编译出来的image本来是用来开发的时候用于方便下载并调试的elf格式文件。它的编译就是把所有的源文件编译成一个大的elf格式目标文件。用户只需要把其中的二进制指令及数据拷贝到正确的ram位置中并执行就行了(加载)。
我认为加载器在加载vxworks时肯定会对其做一定的解释动作。现在我在bootconfig中查到无论是使用什么加载方式,都会使用bootLoadModule这个函数来加载elf格式的vxworks image。Elf文件是可链接可执行文件,关于可执行这个概念我一直无法理解,现在想来,要想执行必须加载,而加载过程就会分析它。所以可执行还不如说是可加载呢!
2 成熟产品
Vxworks_rom:这个image就不是elf文件格式,它是bin文件格式。可以放在rom中直接执行。编译成此格式后,可以把该文件放在flash(rom)中,让其直接启动。启动后将会把里面包含的真正的vxworks bin复制到内存中执行。
Vxworks_rom_compress: 和上个的区别是vxworks bin是压缩的,拷贝到内存中需要解压缩的过程。
Vxworks_rom_res:它和vxworks_rom的区别就是text段会驻留rom不拷贝,但是data和bss段拷贝到ram。
注:更进一步的查询,bootLoadModule函数是根据系统使用的编译器来指向不同的加载函数的。因为不同的编译器编译出来的目标文件格式是不一样的,例如.out .elf等等。仔细的看了一下bootElfModule函数,确实和我理解的一样,对elf格式的文件进行分析来下载到ram中执行。