Обновление Binutils вызывает ошибку ld: no machine record defined error - PullRequest
0 голосов
/ 06 августа 2020

СТАРАЯ установка (на основе сборки root 2015.08.1)

  • G CC 4.9.3 (кросс-компилятор ARM для цели на базе ARM11, сборка root построена)
  • GLIB C 2.20
  • BINUTILS: 2.24 (цель) 2.22 (хост)
  • Linux Ядро: сторонняя версия v3.14.17 (с их патчами + дополнительными проприетарными патчами)
  • Хост для сборки: система на основе RHEL6

Новая настройка (на основе сборки root 2020.02)

  • G CC 9.2.0 ( Кросс-компилятор ARM для цели на базе ARMv7 (cortexA9), сборка root построена)
  • GLIB C 2,30
  • BINUTILS: 2,30 (цель) 2,30 (хост)
  • Linux Ядро: третья сторона предоставила v3.14.17 (с их патчами + дополнительные проприетарные патчи)
  • Хост для сборки: Ubuntu 18.04.4

Причина обновления - обновление до более нового компилятора и glib c, которые исправляют определенные проблемы ARM CVE, которые были сочтены достаточно важными для решения.

В старой настройке все сборка выполняется нормально, ядро ​​загружается и т. д. c. Эта установка поддерживает 3 поставляемых продукта.

В новой настройке (для нового продукта) при сборке того же ядра я получаю:

output/host/bin/arm-buildroot-linux-gnueabi-ld: no machine record defined

теперь ничего не изменилось в том, как это определяется сторонним поставщиком. Единственное, что изменилось - это компилятор, glib c, binutils.

в arch / arm / kernel / vm linux .lds.S (из vm linux .lds)

/*
 * These must never be empty
 * If you have to comment these two assert statements out, your
 * binutils is too old (for other reasons as well)
 */
ASSERT((__proc_info_end - __proc_info_begin), "missing CPU support")
ASSERT((__arch_info_end - __arch_info_begin), "no machine record defined"

комментирование ASSERT() разрешает сборку ядра, и мы получаем наш выходной пакет (ядро с сетевой загрузкой)

Однако это ядро ​​не загружается: сразу умирает:

   ## Booting kernel from Legacy Image at 83000000 ...
   Image Name:   Linux-3.14.17-ami
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    25338920 Bytes = 24.2 MiB
   Load Address: 81008000
   Entry Point:  81008000
   Loading Kernel Image ... OK
SCU_RST_CTRL_STAT = 0x2
Coming up from Internal Reset

Starting kernel ...

, учитывая, что ошибка относится к структуре arch_info_begin / arch_info_end, я думаю, что ядро ​​Linux не видит эту информацию и поэтому не загружается. Итак, следующий вопрос: что / как binutils (согласно приведенному выше комментарию) влияет на это ???

И как это можно исправить / пропатчить, чтобы двигаться дальше? Мы очень ценим ваш опыт и помощь.

...