我们正在尝试将Linux镜像加载到特定位置的DRAM中,DRAM结束地址为0x80000000,我们从引导日志中得知。我们正在地址0x5000000处加载我们的镜像,在此之前,图像中的各个部分在某些地址上进行加载,这些地址大于0x80000000,例如再次来自引导日志。
在上述行中,“从文件位置0x1000”是什么意思?
首先加载的是.text部分,以下是我们的vmlinux映像转储的节头部分。
我的问题是如何将这些不同部分的地址与我们的DRAM地址对齐,是否可以使用objcopy工具来更改这些不同部分的地址。
在编译前是否有任何设置这些部分地址的方法?另外一个问题是,程序加载完成后出现挂起的原因是什么?
loading section to address 0xc5000000 from file position 0x1000, size is 0x5ac13e
在上述行中,“从文件位置0x1000”是什么意思?
首先加载的是.text部分,以下是我们的vmlinux映像转储的节头部分。
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .text PROGBITS c5000000 001000 5ac13e 00 AX 0 0 4096
[ 2] .notes NOTE c55ac140 5ad140 000168 00 AX 0 0 4
[ 3] __ex_table PROGBITS c55ac2b0 5ad2b0 000fe0 00 A 0 0 4
[ 4] .rodata PROGBITS c55ae000 5af000 20a930 00 A 0 0 64
[ 5] __bug_table PROGBITS c57b8930 7b9930 0075fc 00 A 0 0 1
[ 6] .pci_fixup PROGBITS c57bff2c 7c0f2c 001a90 00 A 0 0 4
[ 7] .builtin_fw PROGBITS c57c19bc 7c29bc 0000cc 00 A 0 0 4
这是一个相当长的列表,因此没有完整发布。但我们可以看到一件事情。文本部分大于DRAM结束地址,因此尽管在加载第一节后没有出现任何错误,但图像应该无法正确加载,而在加载其他部分后,在此消息之后它会停滞。
program load complete, entry point: 0x5000000, size: 0x92e7fc
我的问题是如何将这些不同部分的地址与我们的DRAM地址对齐,是否可以使用objcopy工具来更改这些不同部分的地址。
在编译前是否有任何设置这些部分地址的方法?另外一个问题是,程序加载完成后出现挂起的原因是什么?