Момент истины GNU GCC

All you need is ... GNU GCC!

Для программирования почти любого контроллера / процессора можно использовать бесплатный комплект GNU GCC.

Для этого надо просто в интернете скачать файл установщик . У нас для windows называется gcc-arm-none-eabi-10-2020-q4-major-win32.exe. Как это приятно узнать , когда у тебя нет лишних 10000 евро....

Не удержался и привожу весь процесс установки .
Запускаем установщик:

фотка 1

GNU Arm Embedded tollchain

фотка 2

GNU GENERAL PUBLIC LICENSE - бери , пользуйся бесплатно...

фотка 3

Далее обратите внимание на один файл gccvar.bat . Он просто добавляет нужные пути к окружению вашей программы в Windows.

фотка 4

Вот содержание gccvar.bat :


@echo off
rem This file is the script to set path for ARM eabi tool chain.

set TL_PATH=%~dp0
set PATH=%TL_PATH%;%PATH%
cmd /K cd %CD%

Тут смысл просто в добавлении пути C:\Program Files (x86)\GNU Arm Embedded Toolchain\10 2020-q4-major\bin\; к переменной PATH файлам типа arm-none-eabi-gcc.exe и другим , необходимым для сборки вашей программы под любой процессор.

Далее берем какой-нибудь bare metal проект из интернета для ARM Cortex A7 или A53 и пробуем его собрать.
Обычно в таких проектах есть makefile , в котором прописано что делать компилятору, линковщику с конкретными файлами проекта.

Но в Toolchain нет самой программы , которая запускает сборку по инструкциям в makefile. Эта программа называется make и качается отдельно в составе установочного пакета make3.81.exe (для Windows).

Устанавливаем make3.81.exe , далее , чтобы им пользоваться , вызывая из каталогов ваших проектов - что надо сделать? Правильно - добавить к PATH путь к каталогу с файлом make.exe , у нас это каталог : C:\Program Files (x86)\GnuWin32\bin .

Cortex A53

Настраиваем все тоже самое , но для 64 разрядных процессоров Cortex A53. Тут по-видимому надо скачать уже другой toolchain для 64-разрядных процессоров (aarch64).

Компилятор aarch64-elf-gcc
линковщик aarch64-elf-ld
окончательная обработка в bin aarch64-elf-objcopy

Это из набора gcc-linaro-7.5.0-2019.12-i686-mingw32_aarch64-elf.tar.xz. make.exe файл подходит прежний.

Все теперь makefile будет собираться нормально . Содержание примерно его такое :


CFLAGS = -Wall -O2 -ffreestanding
LDFLAGS =-nostdlib -T link.ld

APP = uart

all: $(APP).elf

$(APP).elf: uart.o
	aarch64-elf-ld $(LDFLAGS) $(APP).o -o $(APP).elf
	aarch64-elf-objcopy -O binary $(APP).elf $(APP).bin

%.o: %.c
	aarch64-elf-gcc $(CFLAGS) -c $< -o $@

dump: $(APP).elf
	aarch64-elf-objdump -D $(APP).elf 

clean:
	rm -rf *.o *.elf *.bin