Создайте и свяжите библиотеку µIP без ОС

Я относительно новичок в разработке встраиваемых систем, и у меня есть вопрос или скорее отзыв о создании и связывании библиотеки µIP на встроенном устройстве. Что бы это ни стоило, ниже используется плата FOX G20 V с процессором ATMEL AT91SAM9G20 с ОС без. Я провел некоторое исследование, и я вижу, как я создаю и связываю библиотеку на доске, это один из следующих двух вариантов.

Вариант 1. Первый вариант заключается в компиляции всей библиотеки (файлов .c) для создания встроенной статической библиотеки в виде файла .a. Затем я могу связать созданную статическую библиотеку с кодом моего приложения, прежде чем загружать ее на устройство. Конечно, драйвер устройства должен быть запрограммирован, чтобы библиотека работала на платформе (помощь была найдена здесь). Этот первый вариант использует машину Linux. Для этого первого варианта также, чтобы загрузить статическую библиотеку, связанную с моим кодом приложения, я делаю это с помощью «scp»?

Вариант 2. Второй вариант заключается в том, чтобы скомпилировать и связать библиотеку с кодом моего приложения напрямую, минуя промежуточную статическую библиотеку. Однако, поскольку моя платформа не содержит ОС, мне нужно будет установить соответствующий компилятор GCC для компиляции и компоновки (если у кого-то есть какие-либо рекомендации для такой установки, это также было бы очень полезно). Однако я совершенно не знаком со вторым вариантом, но мне сказали, что его проще реализовать, поэтому, если у кого-то есть идея о том, как его реализовать, это было бы очень полезно.

Я был бы признателен за некоторые отзывы вместе с ответами о том, кажутся ли вам эти варианты правильными, и чтобы быть уверенным, что я не упомянул что-то ложное.


person Adam    schedule 14.04.2014    source источник


Ответы (1)


Между этими вариантами нет реальной разницы. В любом случае цепочка инструментов хоста отвечает за создание двоичного файла, который содержит полностью связанный исполняемый файл без внешних зависимостей, поэтому вам в любом случае нужен кросс-компилятор, и действительно проще всего просто скомпилировать uIP вместе с остальной частью приложения. .

Набор инструментов обычно включает кросс-компилятор (если вы используете gcc, он должен называться arm-eabi-gcc или arm-none-eabi-gcc), кросс-линкер (arm-eabi-ld), кросс-архиватор (arm-eabi-ar) и т. д. Вы можете использовать их вместо собственных инструментов. Для Debian вы можете найти кросс-компилятор для целей ARM без ОС в процессе тестирования /нестабильный.

Создаете ли вы статическую библиотеку

arm-eabi-gcc -c uip.c
arm-eabi-ar cru uip.a uip.o
arm-eabi-ranlib uip.a
arm-eabi-gcc -o executable application.c uip.a

или прямую ссылку

arm-eabi-gcc -c application.c
arm-eabi-gcc -c uip.c
arm-eabi-gcc -o executable application.o uip.o

или напрямую скомпилировать и связать

arm-eabi-gcc -o executable application.c uip.c

не имеет никакого значения.

Если вы используете интегрированную среду разработки, обычно проще всего просто добавить uip.c в качестве исходного файла.

person Simon Richter    schedule 14.04.2014
comment
Как мне напрямую скомпилировать и связать uIP с моим приложением прямо на платформе? На машине я бы создал скомпилированную библиотеку, выполнив gcc -Wall -c uip.c (uip.c — один из файлов .c). Как только у меня будут созданы все объектные файлы, я создам библиотеку, используя ar cr libname.a, за которой следуют все созданные объектные файлы. Тогда ссылка будет gcc -Wall application.c libname.a -o executable. Итак, не могли бы вы рассказать мне, как сделать второй вариант непосредственно на платформе, пожалуйста? - person Adam; 14.04.2014
comment
Наоборот, просто добавьте источники uIP в свой проект приложения. Используя gcc, вы бы скомпилировали, используя arm-eabi-gcc -o executable -static application.c uip.c - person Simon Richter; 14.04.2014
comment
Так что мне придется сделать тот же шаг для всех файлов uIP, просто изменив uip.c на соответствующий файл? Могу ли я сделать это прямо на своей платформе? Кроме того, что такое команда arm-eabi-gcc? - person Adam; 14.04.2014
comment
Большое спасибо за подробный ответ Семён! Однако при прямом связывании нужно ли компилировать и связывать другие файлы вместе с uip.c с моим приложением? Или файла uip.c будет достаточно, чтобы получить все функции uip? - person Adam; 14.04.2014
comment
Кроме того, поскольку на моей встроенной плате не установлена ​​ОС (следовательно, нет компилятора), вы уверены, что я могу скомпилировать с помощью arm-eabi-gcc? Потому что я считаю, что мне нужно будет что-то установить на плату, чтобы иметь возможность компилировать, не так ли? - person Adam; 14.04.2014
comment
Нет, на плате слишком мало ресурсов для запуска компилятора; вот почему вы компилируете на своем основном ПК, а затем переносите код на плату, используя либо встроенный загрузчик AT91, либо адаптер JTAG. Как это лучше сделать описано в документации платы. - person Simon Richter; 14.04.2014
comment
Когда я попытался скомпилировать файл uip.c, выполнив, например, arm-eabi-gcc -c uip.c на своей машине, я получил ошибку arm-eabi-gcc command not found. Кроме того, когда вы говорите передать код, это делается с помощью scp? - person Adam; 14.04.2014
comment
Сначала вам нужно установить компилятор; для метода передачи это отличается от платы к плате. - person Simon Richter; 14.04.2014
comment
Если машина, на которой я работаю, к которой подключена плата, не имеет подключения к Интернету, можно ли установить компилятор на машину с Windows, а затем перенести его на машину с Linux (без интернета)? - person Adam; 14.04.2014
comment
Мы несколько выходим за рамки первоначального вопроса. Вы должны использовать тот же комплект для разработки программного обеспечения, что и для остальной части вашего проекта. Если вы разрабатываете для Windows, лучшим выбором, вероятно, будет среда Keil, и в этом случае лучшим выбором будет добавление исходных файлов uip в проект и игнорирование gcc. - person Simon Richter; 14.04.2014
comment
Да я вижу. Большое спасибо за Вашу помощь! Я ценю ваше время! - person Adam; 14.04.2014