Встановлюємо пакет інструментів gnu arm під linux

Сімейство процесорів ARM

Найважливішим завданням, розв'язуваної розробниками вбудованих систем, є отримання максимального обчислювальної потужності при мінімальних витратах електричної енергії. Сімейство процесорів ARM має одну з найкращих в цьому аспекті архітектур, що забезпечує баланс між потужністю процесора і витрачанням ресурсу батареї.

Ядро ARM розвивається протягом 20 років, протягом яких було випущено кілька поколінь процесорів. Останні з них - процесори виду «системи на кристалі» (system on a chip або SoC), - працюють на таких мобільних пристроях, як G1 Android від T-Mobile, і мають по два ядра (ARM9 і ARM11), що дозволяє поліпшити продуктивність мультимедійних додатків на платформах з малими ресурсами електроживлення.

Останні версії процесорів ARM підтримують два режими роботи: режим ARM, в якому ядро ​​виконує 32-розрядні інструкції і режим THUMB, в якому виконуються 16-розрядні інструкції. Режим ARM дозволяє задіяти всю міць процесора, тоді як режим THUMB дає можливість писати певні частини програми, дотримуючись жорстких обмежень, що дозволяють економити пам'ять. Перемикання між режимами виконується дуже просто, що дозволяє істотно зменшити розмір необхідного коду для безлічі алгоритмів.

Хороша продуктивність процесорів ARM досягається завдяки використанню модифікованої гарвардської архітектури. У цій архітектурі процесор використовує окремі кеші даних і інструкцій, які, однак, знаходяться на одній шині і одночасно очищаються при доступі до зовнішньої пам'яті. Крім того, інструкції розміщуються в п'ятиступінчастою «конвеєрі». Таким чином, процесор здійснює паралельну обробку останніх п'яти інструкцій, поміщених в конвеєр: кожне з п'яти окремих дій (читання, декодування, арифметико-логічні операції, читання пам'яті і запис), що складають інструкцію, виконується паралельно з іншими. Таким чином, в разі безперервного потоку виконання код виконується швидко завдяки паралелізму, проте якщо після інструкції розгалуження програмі буде потрібно виконати код, що знаходиться поза конвеєра, відбувається очищення вмісту всього конвеєра, яка погіршує продуктивність. Звідси мораль: слід акуратно проектувати код, використовуючи інструкції розгалуження в мінімальній кількості.

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

Пакет інструментів GNU ARM

Велика частина програмування для ARM-систем ведеться на робочих станціях з процесорами, відмінними від ARM, за допомогою інструментів, що виконують крос-компіляцію для платформи ARM. Однією з таких середовищ розробки є пакет інструментів GNU ARM, що дозволяє використовувати звичні середу і інструменти вашої робочої станції для проектування, розробки і навіть тестування додатків на ARM-симуляторах.

Описуваний в цій статті пакет інструментів GNU, також відомий як Sourcery G ++ Lite. розміщений на сайті групи CodeSourcery (див. посилання в розділі Ресурси) і доступний для безкоштовного завантаження і використання. Всі інструменти, за винятком бібліотеки GNU C, поширюються під стандартної публічної ліцензією GNU версії 3 (GPL3). Бібліотека GNU C поширюється згідно ліцензії GPL версії 2.1. У набір бінарних утиліт цього пакета (binutils) входить набір компіляторів GNU (GCC), відладчик віддаленого коду GNU (GDB), GNU make і базові утиліти GNU.

Також в пакет Sourcery G ++ Lite включена детальна документація набору інструментів GNU, в тому числі Стандарти Кодування GNU - документ, гідний ретельного вивчення! У документації по асемблеру GNU, as ,. ви знайдете безліч інформації, специфічної для платформи ARM: коди операцій, синтаксис, директиви і так далі.

Завантаження і установка пакета інструментів GNU

Щоб завантажити набір інструментів GNU, відвідайте сторінку завантаження сайту CodeSourcery (див. Посилання в розділі Ресурси) і виберіть там TAR-файл для IA32 GNU / Linux:

Різні версії пакету інструментів GNU доступні для всіх поширених клієнтських операційних систем, однак ми в цій статті розглянемо установку і використання версії Lite в системі Linux®.

За час розвитку проекту ARM було розроблено кілька поколінь процесорів. Тому пакет Lite включає в себе різні C-бібліотеки для трьох найбільш поширених версій архітектури процесора - ARM v4T, ARM v5T і ARM 7.

Тепер за допомогою команди bunzip2 розпакуйте архів в свою домашню директорію.

Лістинг 1. Витяг пакету інструментів GNU з завантаженого архіву.

Тепер залишається тільки додати в змінну середовища PATH шлях до директорії bin пакета, після чого інструменти можна використовувати.

Налаштування Linux для використання пакета інструментів GNU

На web-сторінці завантаження пакета ви виявите декілька корисних файлів документації в форматі PDF, в тому числі детальне посібник для початківців з пакетом. Інструкції в цій статті є його короткою версією, покликаною допомогти вам швидко налаштувати і запустити пакет.

Якщо ви займаєтеся програмуванням для архітектури ARM набагато більше, ніж для архітектури Intel®, в якості альтернативи можна додати в директорію / usr / local / bin символічні посилання, що вказують на директорію з бінарними файлами пакета. Тоді ви зможете використовувати скорочену форму запуску команд, наприклад as замість arm-none-linux-gnueabi-as. У лістингу 2 показано, як створювати подібні символічні посилання.

Лістинг 2. Створення символічних посилань для інструментів ARM

Пишемо програму для архітектури ARM

Є безліч посібників по створенню ARM програм на вічно популярній мові програмування C, проте з програмування на чистому асемблері посібників набагато менше. Я збираюся зламати цю традицію і приведу тут приклад написання програми на чистому асемблері, - того, що зазвичай вважається чорною магією програмування. Це проста програма з розряду "Hello World", але спеціально написана для конкретної версії ARM Linux.

Зауваження: У розділі Ресурси можна знайти посилання на статтю з сайту Embedded.com, в якій розповідається про ARM-програмуванні не для системи Linux, а безпосередньо для «заліза».

Лістинг 3. Складання програми Hello World для ARM Linux

Після цього створіть модуль вихідного коду hw.S і помістіть в нього код, наведений у лістингу 4.

Лістинг 4. Додаток Hello World для ARM Linux

Інструкція svc 0x00000000 командує процесору ARM викликати «супервізор», яким в даному випадку є ядро ​​Linux.

Тестування програми для ARM

У пакеті Sourcery G ++ Lite для налагодження низькорівневих програм надається не втрачає популярності відладчик GDB. Цей відладчик дозволяє (крім іншого) віддалено налагоджувати ARM-код, що виконується на Одноплатний комп'ютері з приєднаним до нього модулем JTAG або ICE.

висновок

Ресурси для скачування

Схожі теми