В настоящее время я испытываю действительно странную ошибку при компиляции для u-boot:
Вектор
init_fnc_t *init_sequence[] ={...}
заполняется 0/NULL вместо указателей на функции. Я думал, что перехитрил компилятор, вызвав все эти функции «вручную». Однако эта ошибка имеет еще больше последствий, поскольку структура драйвера также получает указатели 0 / NULL:
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();
устанавливает компьютер в 0 и впоследствии все вылетает.
Забавный факт: .name попадает в двоичный файл, поэтому с разделами .data, вероятно, все в порядке, как только они будут установлены.
Я тестировал это с помощью двоичных файлов aarch64-linux-gnu-*-4.7 и aarch64-linux-gnu-*-4.9. Вы можете найти 4.9 по адресу: http://releases.linaro.org/latest/components/toolchain/binaries.
Любая помощь будет принята с благодарностью :)