Перейти к содержанию
    

Научите пользоваться Low level Debug

Проблема заключается в следующем.

Приказали портировать ядро со старой версии на последнюю.

До этого с ARM архитектурой не работал вообще, только DSP.

Процессор S5PC110 от Самсунга.

 

Сконфигурировал новое ядро со старым конфиг-файлом.

Прописал в Makefile.boot адреса: zreladdr-y params_phys-y

Проверил номер машины, и бутаргументы, всё совпадает.

Ядро скомпилировалось без ошибок и варнингов.

Запускаю. Пишет:

 

HKDKC110 # bootm 0x30008000

Boot with zImage

Starting kernel ...

Uncompressing Linux... done, booting the kernel.

Всё ... дальше зависон мертвый.

 

На плате разьём под JTAG вообще не предусмотрен, регистры посмотреть невозможно.

Виснет где то в asm функции startup32(); после декомпрессора (kernel/head.S).

Подскажите, как отдебажить, что ядру не хватает для старта.

Асма arm овского не знаю, поэтому и спрашиваю как заюзать senduart.

Если можно, маленький примерчик поделитесь. Спасибо. :)

 

 

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Погуглите про параметр ядра earlyprintk. В ядре это находится тут

Kernel hacking ---> [*] Kernel debugging

[*] Kernel low-level debugging functions

[ ] Early printk

[ ] Kernel low-level debugging via EmbeddedICE DCC channel

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это я уже всё нагуглил по попробовал потестить.

Натыкал senduart по телу функции startup32().

Скомпилировалось без ошибок, но вывода вообще никакого нет в uart.

 

 

Вероятно надо как то ещё указать в какой порт и задать параметры вывода.

Не нашел куда втыкать конфигурационные параметры в файле arch/arm/kernel/debug.S

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это я уже всё нагуглил по попробовал потестить.

Натыкал senduart по телу функции startup32().

Скомпилировалось без ошибок, но вывода вообще никакого нет в uart.

 

 

Вероятно надо как то ещё указать в какой порт и задать параметры вывода.

Не нашел куда втыкать конфигурационные параметры в файле arch/arm/kernel/debug.S

 

Не знаю чего вы делаете, у меня достаточно включить

[*] Kernel low-level debugging functions

 

даже без earlyprintk

 

Start SD card AT91Bootstrap...
Image size: 0x215d48, load_addr: 0x70008000, ep: 0x70008000
relocating linux kernel to proper address, dst: 0x70008000, src: 0x72000040, len: 0x215d48, machid: 0x726
Uncompressing Linux... done, booting the kernel.

Error: unrecognized/unsupported machine ID (r1 = 0x00000726).

Available machine support:

ID (hex)        NAME
000008a4        SK-MAT91SAM9G45

Please check your kernel config and/or bootloader.

 

Очевидно что отадочные сообщения есть уже на самой ранней стадии. На всякий случай параметры загрузки ядра

 

CONFIG_CMDLINE="mem=64M console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait"

CONFIG_CMDLINE_FORCE=y

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как вы получили образ ядра, какими командами? Может быть что у вас не zImage, а какой-то другой Image. Если загрузчик умеет работать только с zImage, и у вас uImage, то могут возникнуть определенные проблемы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

[*] Kernel low-level debugging functions

Опция было выбрана изначально, но вывода сообщений нет.

Но не включен CONFIG_CMDLINE_FORCE=y

Завтра на работе проверю.

 

Как получили образ ядра

make zImage

Аналогичная команда создает работоспособное ядро для старой версии.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Включил CONFIG_CMDLINE_FORCE=y

К сожалению, ядро так и не стартует.

Низкоуровнего вывода тоже нет. Зависает как и прежде.

Старое работает без проблем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Start SD card AT91Bootstrap...
Image size: 0x215d48, load_addr: 0x70008000, ep: 0x70008000
relocating linux kernel to proper address, dst: 0x70008000, src: 0x72000040, len: 0x215d48, machid: 0x726
Uncompressing Linux... done, booting the kernel.

Error: unrecognized/unsupported machine ID (r1 = 0x00000726).

Available machine support:

ID (hex)        NAME
000008a4        SK-MAT91SAM9G45

Please check your kernel config and/or bootloader.

 

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

в данном случае ядро собрано с поддердкой только 0x8a4, SK-MAT91SAM9G45

а загрузчик передает 0x726, AT91SAM9M10G45 Evaluation Kit

 

что бы все это исправить нужно в конфиге ядра выбрать поддержку SK-MAT91SAM9G45 или в загрузчике передавать id=0x8a4

 

make menuconfig ARCH=arm

System Type -> Atmel AT91 System-on-Chip

 

з.ы недокурил тред, но стирать небуду, может кому и пригодится :)

 

то sevstels , посмотрите есть ли в старом ядре что стартует /proc/config.gz

если да, то тяните его и разворачивайте, - это конфиг, с которым собиралось ядро, его можно сравнить с тем что у вас не работает.

еще посмотрите тот ли уарт проца у вас забит как ttyS0, возможно сообщения валят на другой порт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще, всё оказалось гораздо интереснее чем казалось сначала.

Удалось запустить загрузку kernel. Но для этого нужно было долго ходить по граблям.

 

Сформулирую правила успешного старта:

1. u-boot должен быть собран той-же версией компилятора что и kernel.

2. Используйте уже проверенный кем-то toolchain.

 

Я пытался запустить ядро с оригинальным убутом, прошитым в плате.

Так и не удалось понять, (нечем посмотреть) где загрузка зависала, видимо неправильно передавались указатели на атрибуты или что то было с адресацией или упаковкой ядра. Поэтому я попытался собрать u-boot последней версией компилятора. Пришлось помучится, но в итоге он так и не собрался. Почитать можно > тут. Проблема решилась только откатившись на предидущую версию тулчейна.

 

Соответсвенно, ядро собирал аналогичной версией компилятора.

И оно сразу стартануло. Как оригинальное ядро от производителя борды, так и самсунговское ядро, так и с kernel.org

HKDKC110 # bootm 0x30008000

Boot with zImage

 

Starting kernel ...

 

Uncompressing Linux... done, booting the kernel.

<6>Initializing cgroup subsys cpu

<5>Linux version 2.6.35.7 (nord@pineone) (gcc version 4.4.1 (Sourcery

G++ Lite 2010q1-202) ) #16 PREEMPT Thu Feb 17 01:13:38 KST 2011

CPU: ARMv7 Processor [412fc082] revision 2 (ARMv7), cr=10c53c7f

CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache

Machine: SMDKC110

итд ... далее уже можно работать не в слепую

Спасибо всем за сопереживание.

 

-

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...