Хорошие инструменты или методы для понимания структуры загрузчика?

9

Недавно я выяснил причину неприятного бага, над которым я работал, с Atmel AT91SAM9G20 SBC, работающей с U-boot , загрузчиком с открытым исходным кодом. Суть проблемы заключалась в том, что U-boot ожидал, что аппаратное обеспечение будет настроено не так, как я его построил, поэтому некоторые регистры устройств были неправильно настроены.

Теперь, когда я разобрался с проблемой, мне нужно настроить U-boot для правильной настройки регистров. Я могу сделать это вслепую, добавив несколько строк кода в конце программы, но это грязно.

Это подводит меня к моему вопросу: как я могу понять, как U-boot работает более эффективно, чем запуск в main () и чтение всех возможных путей кода во всех файлах? Я попытался просмотреть файлы и просмотреть код рядом с соответствующими идентификаторами. Это оказалось неэффективным; кажется, что большая часть кода - это драйверы для подсистем, которые меня не интересуют. Я действительно понимаю, как загрузчик работает довольно хорошо, но я надеюсь, что существует лучший метод, чем мой наивный подход.

pingswept
источник
Вы пытались спросить в списке рассылки разработчиков Uboot?
Sybreon

Ответы:

6

Есть несколько инструментов / стратегий, которые могут помочь:

  • Лучшие инструменты для понимания исходного кода:

    • cscope - это инструмент для изучения кода на C, он похож на grep, но понимает синтаксис
    • Вызовите генераторы графа, чтобы нарисовать картину структуры вызова функции
    • Фенрис выглядит интересно, хотя я не пробовал
  • Анализ времени выполнения

    • Проходите интересные разделы с помощью отладчика и анализируйте, что происходит
    • Используйте инструментарий gcc, чтобы вызывать кусок хорошего при входе / выходе каждой функции. например. http://ndevilla.free.fr/etrace/
  • Написание собственного мини-загрузчика

    • Я часто нахожу, что лучший способ понять что-то - это воссоздать это сам

К сожалению, нет волшебного рецепта, который работает для всего.

Тоби джеффи
источник
@ Runtime Analysis - не столь жизнеспособен в отдельной встроенной системе, особенно когда нет одновременно работающей базовой ОС, например, загрузчика, которым он является.
Коннор Вольф
Вы можете пройти через это с помощью отладчика, как предлагает Джоби. В зависимости от сложности это может или не может быть полезным.
Ник Т
Cscope - это то, что я представлял. Я надеялся на что-то более блестящее, но это хорошее начало. Спасибо.
pingswept
2

Как вы настроили его для сборки для AT91?

Кажется, что дерево кода спроектировано таким образом, что любой специфический для архитектуры материал находится в дереве 'arch / (класс процессора) / (тип процессора) / ...'. Я нашел код AT91 в разделе arch / arm / cpu / arm926ejs / at91 ... разве там не находится материал, который вы хотите изменить? В этом каталоге просматривать не так уж и много, тем более что почти половина файлов зависит от конкретного варианта AT91.

Извините, если это очевидно ... но вы не упомянули, что проверяли это.

Я еще не просматривал дерево кодов uBoot, но ваш пост напугал меня этим. Мой задний план включает в себя в конечном итоге использование uBoot и Linux на специальной плате iMX233. Я очень заинтересован в том, чтобы получить такую ​​обратную связь о том, насколько хорошо изолирована архитектура uBoot и материал, зависящий от варианта, и насколько это будет тяжело.

Darron
источник
Да, я провел некоторое время с arch / arm / cpu / arm926ejs / at91 / *, но спасибо за предложение. Оказывается, что код, который я искал, находился на самом деле в загрузочном ПЗУ процессора, к которому имеет доступ только Atmel. Подробная информация здесь: at91.com/forum/viewtopic.php/f,9/t,19732/start,0/st,0/sk,t/sd,a
pingswept
1
Кстати, в целом я был впечатлен U-boot. Для огромного количества плат и процессоров, которые он поддерживает, он довольно хорошо организован. Документация скудна, но это похоже на курс для загрузчиков.
pingswept
@pingswept: эй, Linux на 4 слоя. Ницца. Может быть, я должен смотреть на этот чип вместо iMX233. Я чертовски долго пытался собрать свои ARM + два SDRAM-чипа на 4 слоя и отложить их для работы над другими проектами. Я тоже пользователь Altium.
Даррон
9G20 и iMX233 довольно близки. Я выбрал 9G20, потому что Ethernet MAC встроен, и чипы немного дешевле в небольшом количестве, но iMX233 оказался на втором месте.
pingswept
Кроме того, взгляните на Chumby Hacker Board - это может быть хорошим началом, если вы решите построить систему вокруг iMX233. Файлы Altium находятся на этой вики-странице: wiki.chumby.com/mediawiki/index.php/Chumby_hacker_board_beta
pingswept