Добрый день
Начинаю осваивать ОС Linux для встраиваемых систем. Делается это на отладочной плате LogicPD AM3517EVM. Т.е. имеем в наличии техасовский ARM Cortex A8. Я решил пойти от простого к сложному: U-Boot-SPL --> U-Boot --> Linux, чтобы не просто поднять ОС на данной платформе (что уже сделано до меня), а попутно разобраться с принципами на конкретном примере. Начал с U-Boot-SPL: взял исходники U-Boot и тулчейн от Linaro, в учебных целях решил слегка модифицировать U-Boot-SPL, чтобы иметь возможность грузить бинарник U-Boot'а через UART. Естественно, с первого раза ничего не получается, следовательно, возникла необходимость отладки.
Итак, для отладки используется Code Composer Studio v6.0.0 совместно с JTAG-эмулятором SAU100-USB, все это работает в окружении ОС Linux на хосте. На сайте техаса была найдена инструкция о том, как правильно подготовить среду для отладки "Sitara Linux Training: uboot linux debug with ccsv5"
http://processors.wiki.ti.com/index.php/Si...ebug_with_ccsv5. Делаю все как в данной инструкции, за исключением некоторых моментов, связанных с различиями между AM3517 и AM335x, о котором говорится в инструкции, а также различиями между CCSv5 и CCSv6
Далее начинается интересное. Загружаю бинарник u-boot-spl.bin, отладочные символы, меняю систему инструкций на ARM (сбрасывая бит T в CPSR) и жму старт - F8. U-Boot-SPL выполняется, но не так как хотелось бы (это и послужило причиной разбирательств), и остается висеть в вечном цикле, жму останов: Run->Suspend. Далее, поменяв что-то в исходниках, пересобираю проект. Опять гружу бинарник, символы, бит T = 0 как и нужно, нажимаю F8 - после этого "программа улетает" непонятно куда. Попытки сбросить процессор, нажимая Run->Reset->SW reset, Run->Reset->HW reset перед тем как загрузить бинарник ни к чему не приводят, программа продолжает "улетать". При нажатии Run->Reset->System Reset, который по идее должен сбросить ядро и периферию, начинает что-то исполняться, после останова счетчик команд опять где попало.
После этого пробовал нажимать кнопку сброса на плате, передергивать питание - не помогает. Помогает (не всегда) выключить плату, закрыть студию, запустить студию, подать питание на плату. Обратил внимание, что в тех случаях когда помогает, бит T в CPSR выставлен в "1", но иногда даже после этих шаманских танцев он все равно сброшен в "0".
Другая проблема с прерваниями - не работают софтверные прерывания, аппаратные прерывания пока не проверял: это трудно сделать из-за того, что описанного выше.
Честно говоря, не знал куда писать, было начал грешить на эмулятор, но не знаю насколько это "справедливо".