我目前在为 u-boot 编译时遇到了一个非常奇怪的错误:
向量
init_fnc_t *init_sequence[] ={...}
用 0/NULL 代替函数指针填充。我认为我通过“手动”调用所有这些函数来胜过编译器。然而,由于驱动结构也获得了 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 。
任何帮助将不胜感激 :)