Хороші інструменти чи методи для розуміння структури завантажувача?


9

Нещодавно я з'ясував причину неприємної помилки, над якою працював з Atmel AT91SAM9G20 SBC під керуванням U-boot , завантажувачем з відкритим кодом. Основною проблемою було те, що U-boot очікував, що обладнання буде налаштоване інакше, ніж я його побудував, тому деякі регістри пристроїв були неправильно налаштовані.

Тепер, коли я з’ясував проблему, мені потрібно налаштувати U-boot, щоб правильно налаштувати регістри. Я можу це зробити наосліп, додавши кілька рядків коду в кінці програми, але це безладно.

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


Ви спробували задати список розсилки розробників uboot?
sybreon

Відповіді:


6

Є кілька інструментів / стратегій, які можуть допомогти:

  • Кращі інструменти для осмислення вихідного коду:

    • cscope - це інструмент для вивчення коду С, він як grep, але розуміє синтаксис
    • Генератори графіків викликів, щоб скласти зображення структури виклику функції
    • Fenris виглядає цікаво, хоча я цього не пробував
  • Аналіз виконання

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

    • Я часто знаходжу, що найкращий спосіб зрозуміти щось - відтворити це сам

На жаль, не існує жодного чарівного рецепту, який би працював на все.


@Runtime Analysis - Не настільки життєздатний в окремій вбудованій системі, особливо коли немає одночасно запущеної ОС, наприклад, завантажувача, яким це є.
Вонор Коннор

Ви все ще можете переступити через нього налагоджувачем, як пропонує Джобі. Залежно від складності це може бути, а може і не бути корисним.
Нік Т

Cscope - це те, що я собі уявляв. Я сподівався на щось трохи блискуче, але це вдалий початок. Дякую.
pingswept

2

Як ви налаштували його для складання для AT91?

Здається, дерево коду створене таким чином, що будь-які конкретні архітектурні речі знаходяться у дереві 'arch / (cpu class) / (cpu type) / ...'. Я знайшов код AT91 під arch / arm / cpu / arm926ejs / at91 ... чи не змінюється розміщений там варіант? У цьому каталозі не так вже й багато чого для перегляду, тим більше, що майже половина файлів мають індивідуальний варіант AT91.

Вибачте, якщо це очевидно ... але ви не згадали про перевірку цього.

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


Так, я провів якісний час з arch / arm / cpu / arm926ejs / at91 / *, але дякую за пропозицію. Виявляється, що код, який я шукав, був насправді в завантажувальному ПЗУ процесора, до якого може отримати доступ лише Atmel. Подробиці про Gory
pingswept

1
До речі, в цілому я був дуже вражений U-boot. Для величезної кількості плат та процесорів, які він підтримує, він досить добре організований. Документація є рідкою, але це, здається, є рівним для курсу завантажувачів.
pingswept

@pingswept: ей, Linux на 4 шари. Приємно. Можливо, я повинен заглянути в цей чіп замість iMX233. Я пекло час намагався отримати мій ARM + два мікросхеми SDRAM на 4 шари і відклав його для роботи над іншими проектами. Я також користувач Altium.
darron

9G20 та iMX233 досить близькі. Я вибрав 9G20, оскільки Ethernet MAC вбудований, а мікросхеми трохи дешевші в низькій кількості, але iMX233 був дуже близьким.
pingswept

Крім того, погляньте на Chumby Hacker Board-- це може бути гарним місцем для початку, якщо ви вирішите створити систему навколо iMX233. Файли Altium знаходяться на цій сторінці wiki: wiki.chumby.com/mediawiki/index.php/Chumby_hacker_board_beta
pingswept
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.