Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Проблема компиляции Aarch64 u-boot

Автор вопроса: Adrian NițuОтветов: 1

В настоящее время я испытываю действительно странную ошибку при компиляции для 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.

Любая помощь будет принята с благодарностью :)

  • Какой выпуск u-boot? А вы пробовали использовать компилятор ELDK от denx? denx.de/wiki/view/DULG/ELDKAvailability, если есть проблема с компиляцией с другими компиляторами я всегда возвращаюсь к ELDK. sessyargc.jp 03.10.2014
  • ELDK не поддерживает arm64 (или aarch64). Я начал работать с клона u-boot git, последняя публичная фиксация: c9aab0f9dd23fddcebf5984dc19e62b514e759a7 в понедельник, 21 апреля, 21:01:35 2014 +0200 Adrian Nițu 03.10.2014
  • c9aab0f9dd23fddcebf5984dc19e62b514e759a7 было много лет назад! Хотя ваша проблема, похоже, связана с набором инструментов, а не с u-boot. Если вы просматриваете список рассылки u-boot, никто не сообщает о той же проблеме, что и вы. news.gmane.org/gmane.comp.boot-loaders.u- загрузка sessyargc.jp 06.10.2014

arm64u-boot

Ответы

Ответ 1 · Adrian Nițu

С файлом u-boot.bin все в порядке. Выяснив, почему это работает, я увидел, что make u-boot запускает отдельную команду для исправления корзины:

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

(это была одна строка, но я разделил ее для удобства чтения)

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы