引导加载程序分为2个阶段。第一阶段用汇编语言编写,只加载第二阶段,第二阶段用C语言编写。Stage1加载C语言中的代码到地址0x0500:0,然后跳转到那里。 Stage2必须编写“hello消息”并停止。设置开始地址以执行原始二进制文件
我尝试不同的方式来起始地址设置为原始二进制所作:(但没有奏效)
cc -nostartfiles -nostdlib -c stage2.c
ld -s -T scrptfile.ld stage2.o /* I'm using ld just to set starting address of executable */
objcopy -O binary stage2 stage2.bin /* delete all unuseful data */
链接脚本
SECTIONS
{
. = 0x0500;
.text : { *(.text)}
.data : { *(.data)}
.bss : { *(.bss)}
}
也许我objcopy把somethnig是shouldt删除删除。
那么我该如何执行这个stage2.bin呢?
据我所知,使用32位长指令编写C代码时,原始二进制只允许16位?
P.S.参数-set-start(objcopy)返回错误:无效的bfd目标。这是因为输出文件是二进制的?
谢谢你的答案。
你能告诉我们你的链接脚本吗?如果你拆解它,你的代码看起来合理吗? – 2012-07-16 23:52:51