Загрузка ядра linux на цель через jtag

Я пытаюсь загрузить и загрузить ядро ​​Linux через JTAG на оценочной плате AM3517. Мой отладчик - BDI3000. Я не использую openocd, так как согласно документации отладчика это не требуется. До сих пор я думаю, что могу загрузить образ vmlinux в память, но как только это будет выполнено, команда "cont" gdb не загружает linux. Я не получаю никаких сообщений на последовательной консоли.

Я следую инструкциям, приведенным в этой ссылке http://elinux.org/Debugging_The_Linux_Kernel_Using_Gdb

попытка получить адрес log_buffer, как упомянуто в ссылке, дает мне следующий вывод

(gdb) p (char*) &__log_buf[log_start]
$1 = 0xc04cd460 <Address 0xc04cd460 out of bounds>

Я много искал в интернете, но не смог найти правильный ответ. Не уверен, что я делаю не так.

1 ответ

Ядро Linux не может быть просто загружено и затем выполнено.
Прежде чем ядро ​​Linux может быть выполнено, архитектура ARM требует, чтобы загрузчик:

  • Настройте систему памяти.
  • Загрузите образ ядра по правильному адресу памяти.
  • При желании загрузите исходный RAM-диск по правильному адресу памяти.
  • Инициализируйте параметры загрузки для передачи ядру (также называемую командной строкой ядра).
  • Получить тип компьютера ARM Linux (и другую информацию для ATAG)
  • Введите ядро ​​с соответствующими значениями регистра.

Большинство из этих шагов являются общими для всех архитектур, но список системной информации ATAG уникален для ARM.
Все эти требования к загрузке упомянуты в "Загрузка ARM Linux".
Обычно загрузчик (например, U-Boot) выполняет эти задачи.
И учебник, который вы упомянули, говорит вам использовать загрузчик для инициализации вашей платы:

Наиболее практичный способ сделать это - установить аппаратную точку останова в начале ядра.
и перезагрузите вашу плату, используя сигнал сброса JTAG.
Ваш загрузчик инициализирует вашу доску и выполнение остановится при запуске ядра.
После этого вы можете загрузить ядро ​​в память и запустить его.

Другие вопросы по тегам