Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как компилировать приложение для его запуска в ucLinux на платформе ARM
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
yurmala
Написал приложение для запуска в ucLinux на демо плате EA LPC2478.

В документе Getting_started_with_uClinux_A.pdf идущем вместе с платой есть примеры сборки приложений...

там ссылаются на следующие параметры компиляции/сборки

Код
CFLAGS  = -Wall -W
LDFLAGS = -Wl, -elf2flt -lpthread

CC = /usr/local/bin/arm-elf-gcc

Так и сделал - исполняемый файл в FLT формате собрал.

Стал смотреть в интернете на форумах - везде ссылаются на:
Код
CFLAGS  = -Wall -Os -DEMBED -Dlinux -D__linux__ -Dunix -D__uClinux__ -fomit-frame-pointer -fno-common -fno-builtin
LDFLAGS = -Wl, -elf2flt="-r" -lpthread

CC = /home/user/uClinux-dist/tools/ucfront-gcc /usr/local/bin/arm-elf-gcc


Попробовал. Тоже получилось собрать исполняемый FLT файл.

Так как все-таки правильно? Или оба варианта рабочие?

Просто пока под рукой нет TARGET чтобы проверить...
yurmala
И еще кстати один вопрос связанный с компилированием простейшего example кода для демонстрации одного pthread потока (из учебника Getting_started_with_uClinux_A.pdf).
Сам пример:
Код
#include <stdio.h>
#include <pthread.h>

static void* mythread(void* arg)
{
   printf("mythread called arg = %s\n", (char *)arg);
   return NULL;
}

int main(int argc, char* argv[])
{
   int ret;
   pthread_t thread1;
   pthread_t thread2;

   if (argc < 3) {.
      printf("Usage: pthreads arg1 arg2\n");
      exit(1);
   }

   ret = pthread_create(&thread1, NULL, mythread, argv[1]);
   if (ret != 0) {
      printf("Failed to create thread 1 ret=%d\n", ret);
      exit(1);
   }

   ret = pthread_create(&thread2, NULL, mythread, argv[2]);
   if (ret != 0)  {
      printf("Failed to create thread 2 ret=%d\n", ret);
      exit(1);
   }
   pthread_join( thread1, NULL);
   pthread_join( thread2, NULL);
   return 0;
}


Вот makefile для него
Код
CFLAGS= -Wall -W
LDFLAGS= -Wl -elf2flt -lpthread
CC= /usr/local/bin/arm-elf-gcc
RM=rm -f

PROG=thread
SRC= thread.c

OBJ=$(SRC:%.c=%.o)
$(PROG): $(OBJ)
        $(CC) $(CFLAGS) -o $(PROG) $(OBJ) $(LDFLAGS)
.PHONY: clean all dep
clean:
        $(RM) $(PROG) $(OBJ) *~ *.gdb .depend *.elf2flt *.elf


Скомпилированное приложение получается размером 116 кб.

Ну это же неимоверно много? Почему так?

p.s. Для сборки использую тулчейн установленный из arm-elf-tools-20040427.sh (опять же по рекомендации из этого учебника...)
alx2
Цитата(yurmala @ May 5 2013, 11:57) *
Ну это же неимоверно много?
Это Вы у нас спрашиваете? sm.gif
ИМХО "много" - понятие относительное. До тех пор, пока файл влезает в память (и остается некоторый разумный запас), это не много.
Цитата(yurmala @ May 5 2013, 11:57) *
Почему так?
Вот это уже более конкретный вопрос. Ответ на него Вам даст map-файл. Для того чтобы линкер его создал, дайте линкеру ключ -Map=file.map
Idle
Цитата(yurmala @ May 5 2013, 10:57) *
Ну это же неимоверно много? Почему так?

Не скажу почему, но можно пострипать при помощи strip.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.