当前位置: 技术问答>linux和unix
关键词:.out .bin objcopy ld.script(100分。。高手来)
来源: 互联网 发布时间:2016-06-24
本文导语: 我用arm-linux-gcc编译了一个.bin文件直接下载到arm(at91rm9200)中运行,但是由于对GCC的一知半解,导致很多地方不明白,希望有高手来解释一下。 以下是我用的ld.script文件 MEMORY { ram : ORIGIN = 0x200000, LEN...
我用arm-linux-gcc编译了一个.bin文件直接下载到arm(at91rm9200)中运行,但是由于对GCC的一知半解,导致很多地方不明白,希望有高手来解释一下。
以下是我用的ld.script文件
MEMORY {
ram : ORIGIN = 0x200000, LENGTH = 0x10000
}
SECTIONS {
.text : {
_stext = . ;
*(.text)
*(.rodata)
. = ALIGN(4);
_etext = . ;
} > ram
.data : {
_sdata = . ;
*(.data)
*(.glue_7*)
. = ALIGN(4);
_edata = . ;
} > ram
.bss : {
_sbss = . ;
*(.bss)
. = ALIGN(4);
_ebss = . ;
} > ram
}
注:at91rm9200的内部ram是0x00200000-0x002fffff。
gcc编译生成.out文件后,我用objcopy命令将.out文件里的text和data组成了.bin文件。 此时.bin文件的大小为9KB。
照理说,.bin文件下到ARM里执行后,这些数据段程序段以及其其他的东西都应该在0x00200000-0x00210000之间吧?
但是我特意在代码里加入
addr=(unsigned char *)0x002e0000;
for(i=0;i
以下是我用的ld.script文件
MEMORY {
ram : ORIGIN = 0x200000, LENGTH = 0x10000
}
SECTIONS {
.text : {
_stext = . ;
*(.text)
*(.rodata)
. = ALIGN(4);
_etext = . ;
} > ram
.data : {
_sdata = . ;
*(.data)
*(.glue_7*)
. = ALIGN(4);
_edata = . ;
} > ram
.bss : {
_sbss = . ;
*(.bss)
. = ALIGN(4);
_ebss = . ;
} > ram
}
注:at91rm9200的内部ram是0x00200000-0x002fffff。
gcc编译生成.out文件后,我用objcopy命令将.out文件里的text和data组成了.bin文件。 此时.bin文件的大小为9KB。
照理说,.bin文件下到ARM里执行后,这些数据段程序段以及其其他的东西都应该在0x00200000-0x00210000之间吧?
但是我特意在代码里加入
addr=(unsigned char *)0x002e0000;
for(i=0;i