OpenOCD
- сервер отладки
$ sudo wget -qO /etc/apt/trusted.gpg.d/kitware-key.asc https://apt.kitware.com/keys/kitware-archive-latest.asc
$ echo "deb https://apt.kitware.com/ubuntu/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/kitware.list
$ sudo add-apt-repository -y ppa:git-core/ppasudo apt update
$ sudo apt upgradesudo apt install -y build-essential make libtool pkg-config cmake curl automake autoconf gcc git texinfo python3-dev libpython3-dev liblzma5 libncurses5 libncurses5-dev libusb-1.0-0-dev libgtk-3-dev libstlink-dev libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev xz-utils tk-dev
-nostdlib
- не использовать стандартные библиотеки, взять заглушки.
Библиотеки GNU ARM используют newlib
для обеспечения стандартной реализации библиотек C. Конкретнее newlib-namo
$ arm-none-eabi-gcc main.c delay.c -o main.elf -nostdlib
mcpu=cortex-m0
или march=
- архитектура
-mthumb
- набор команд
-mfloat-abi=soft
- если нет модуля fpu
-std=gnu11
- стандарт GNU
--specs=nano.specs
- для использования библиотеки newlib-nano
--specs=nosys.specs
- для использования библиотеки nosys
-Wall
- включить все warnings
-g
- включить отладку
Получить файл после препроцессора:
$ arm-none-eabi-gcc main.c delay.c -nostdlib -E > main.i
Получить объектный файл:
$ arm-none-eabi-gcc main.i -o main.o -nostdlib -fpreprocessed-mcpu=cortex-m0 -mthumb -mfloat-abi=soft -std=gnu11 -Wall --specs=nano.specs --specs=nosys.specs -g
Получить файл ассемблера:
$ arm-none-eabi-gcc -s main.c -o main.s -S -nostdlib -mcpu=cortex-m0 -mthumb -mfloat-abi=soft -std=gnu11 -Wall --specs=nano.specs --specs=nosys.specs
Вывести заголовок elf-файла:
$ arm-none-eabi-readelf -h main.o
Получить объектный файл (остановиться перед компоновкой):
$ arm-none-eabi-gcc -c main.c -o main.o -nostdlib -mcpu=cortex-m0 -mthumb -mfloat-abi=soft -std=gnu11 -Wall --specs=nano.specs --specs=nosys.specs
$ arm-none-eabi-gcc -c delay.c -o delay.o -nostdlib -mcpu=cortex-m0 -mthumb -mfloat-abi=soft -std=gnu11 -Wall --specs=nano.specs --specs=nosys.specs
Вывести dump объектного файла:
$ arm-none-eabi-objdump -h main.o
Посмотреть содержимое секции в объектном файле:
$ arm-none-eabi-objdump -s -j .text main.o
Вывести таблицу символов из объектного файла:
$ arm-none-eabi-objdump --syms main.o
Секции в файле линкера:
Секции из объектных файлов:
Служебные символы:
_etext
— конец секции .text_sdata
— старт секции .data_edata
— конец секции .data;_sbss
— старт секции .bss;_ebss
— конец секции .bss.