Aarch64 u-boot编译问题

时间:2014-10-02 11:50:17

标签: u-boot arm64

我正在编译u-boot时遇到一个非常奇怪的错误:

载体

init_fnc_t *init_sequence[] ={...}

填充0' s / NULL而不是函数指针。我以为我通过手动调用所有这些函数来超越编译器#39;但是,由于驱动程序结构也获得了0 / NULL指针,因此这个bug有更多的后果:

static struct serial_device my_serial_drv = {
    .name = "my_serial",
    .start = my_serial_init,
    .stop = NULL,
    .setbrg = my_serial_setbrg,
    .putc = my_serial_putc,
    .puts = my_serial_puts,
    .getc = my_serial_getc,
    .tstc = my_serial_tstc,
};

当然,当我打电话时

 'my_serial_drv'->start(); 

将pc设置为0,然后崩溃所有内容。

有趣的事实:.name到达二进制文件,因此.data部分一旦设置就可能很好了。

我用aarch64-linux-gnu - * - 4.7和aarch64-linux-gnu - * - 4.9二进制文件对此进行了测试。 你可以从以下地址找到4.9: http://releases.linaro.org/latest/components/toolchain/binaries

非常感谢任何帮助:)

1 个答案:

答案 0 :(得分:0)

u-boot.bin文件似乎没问题。在调查了为什么之后,我看到u-boot的make正在运行一个单独的命令来修复bin:

start=$(aarch64-linux-gnu-nm u-boot | grep __rel_dyn_start | cut -f 1 -d ' ');
end=$(aarch64-linux-gnu-nm u-boot | grep __rel_dyn_end | cut -f 1 -d ' '); 
tools/relocate-rela u-boot.bin 0x3e900000 $start $end

(这些是单行,但为了便于阅读,我将其分开)