реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Segmentation fault, Ошибка при запуске программы
Игорь_Ван
сообщение Oct 25 2013, 12:08
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 25-11-12
Пользователь №: 74 552



Здравствуйте!!!
Пишу программу для at91sam9260. Подключил библиотеки и откомпилировал - ошибок нет. Пытаюсь залить elf файл через tftp в Linux установленный на контроллере. При выполнение выдаёт - Segmentation fault. Среда - Eclipse, тулчейн - Sourcery_CodeBench_Lite_for_ARM_EABI. Программа с атмеловского сайта (getting started), но в файле main.c вместо того, что было, просто пустая функция main. Прикрепляю скрин дерева проекта.
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
Ixt
сообщение Oct 25 2013, 12:52
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 76
Регистрация: 27-10-06
Из: Брянск
Пользователь №: 21 724



Цитата(Игорь_Ван @ Oct 25 2013, 16:08) *
Здравствуйте!!!
Пишу программу для at91sam9260. Подключил библиотеки и откомпилировал - ошибок нет. Пытаюсь залить elf файл через tftp в Linux установленный на контроллере. При выполнение выдаёт - Segmentation fault. Среда - Eclipse, тулчейн - Sourcery_CodeBench_Lite_for_ARM_EABI. Программа с атмеловского сайта (getting started), но в файле main.c вместо того, что было, просто пустая функция main. Прикрепляю скрин дерева проекта.
Прикрепленное изображение


Для Линукса не нужна at91lib. Может стартап от атмела случайно подцепился?
Go to the top of the page
 
+Quote Post
Игорь_Ван
сообщение Oct 25 2013, 14:44
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 25-11-12
Пользователь №: 74 552



Если не подключить at91lib, то выскакивает ошибка - cannot find entry symbol _start; defaulting to 00008000 .
Go to the top of the page
 
+Quote Post
Ixt
сообщение Oct 25 2013, 15:31
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 76
Регистрация: 27-10-06
Из: Брянск
Пользователь №: 21 724



Цитата(Игорь_Ван @ Oct 25 2013, 18:44) *
Если не подключить at91lib, то выскакивает ошибка - cannot find entry symbol _start; defaulting to 00008000 .


У вас обычный Линукс или какой-нибудь вроде uLinux? Для embedded линукса минимальная программа пишется достаточно просто (так же как и для компьютера) и ничем не отличается от общепринятых hello world'ов. А у вас похоже тулчейн требует linker script. Я думаю что с тулчейном или опциями сборки что-то не то.
at91lib здесь точно не нужна. Она содержит код инициализации периферии. А это не нужно, потому что низкоуровневая работа с оборудованием - это не задача прикладной программы. Всю низкоуровневую работу должно делать само ядро и его драйверы.
Go to the top of the page
 
+Quote Post
Игорь_Ван
сообщение Oct 25 2013, 15:52
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 25-11-12
Пользователь №: 74 552



Спасибо большое за ответ.
Linux, ядро 2.6.24(плата SK-AT91SAM9XE512-S3E). А не подскажите где достать linker script и что с ним делать? С eclipse только-только начал знакомиться...
Заранее спасибо!
Go to the top of the page
 
+Quote Post
Ixt
сообщение Oct 25 2013, 16:22
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 76
Регистрация: 27-10-06
Из: Брянск
Пользователь №: 21 724



Цитата(Игорь_Ван @ Oct 25 2013, 19:52) *
Спасибо большое за ответ.
Linux, ядро 2.6.24(плата SK-AT91SAM9XE512-S3E). А не подскажите где достать linker script и что с ним делать? С eclipse только-только начал знакомиться...
Заранее спасибо!


Никакой linker script здесь не нужен. В этом-то и проблема.
Попробуйте вот эту программу из консоли скомпилировать и запустить на целевой системе. Без eclips'а для начала (чтобы попроще было).
Код
$ cat main.c

#include <stdio.h>

int main()
{
    printf("Hello world\n");
    return 0;
}
$ arm-none-linux-gnueabi-gcc -static main.c
$ ls -l a.out
$ file a.out


Тулчейн может называться по другому, но примерно так и должно быть. А вообще у стартеркита всё из каробки (точнее из ftp) должно быть.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Oct 25 2013, 16:33
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(Игорь_Ван @ Oct 25 2013, 16:08) *
Здравствуйте!!!
Пишу программу для at91sam9260. Подключил библиотеки и откомпилировал - ошибок нет. Пытаюсь залить elf файл через tftp в Linux установленный на контроллере. При выполнение выдаёт - Segmentation fault. Среда - Eclipse, тулчейн - Sourcery_CodeBench_Lite_for_ARM_EABI. Программа с атмеловского сайта (getting started), но в файле main.c вместо того, что было, просто пустая функция main. Прикрепляю скрин дерева проекта.


Эта ошибка указывает на то, что вы вызываете free() с неправильным поинтером. Чините вашу программу.

Сообщение отредактировал Tarbal - Oct 25 2013, 16:37
Go to the top of the page
 
+Quote Post
Игорь_Ван
сообщение Oct 25 2013, 17:18
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 25-11-12
Пользователь №: 74 552



Про неправильный поинтер, что-то где-то видел на каком-то форуме...
программа выглядит так:
int main(void)
{
return 0;
}
каким образом её починить?)
Go to the top of the page
 
+Quote Post
Ixt
сообщение Oct 25 2013, 17:47
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 76
Регистрация: 27-10-06
Из: Брянск
Пользователь №: 21 724



Цитата(Игорь_Ван @ Oct 25 2013, 21:18) *
Про неправильный поинтер, что-то где-то видел на каком-то форуме...
программа выглядит так:
int main(void)
{
return 0;
}
каким образом её починить?)

Напишите как вы её собираете, приведите информацию о бинарнике (вывод утилит ls, file, ldd). Информацию о компиляторе (arm-none-linux-gnueabi-gcc -v), "uname -a" на целевой платформе.
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Oct 25 2013, 20:14
Сообщение #10


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(Игорь_Ван @ Oct 25 2013, 16:08) *
...
тулчейн - Sourcery_CodeBench_Lite_for_ARM_EABI.

Этот тулчейн для приложения без ОС. Название скорее такого плана arm-none-eabi
Для создания приложений под linux нужен тулчейн вида arm-none-linux-gnueabi


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Oct 25 2013, 21:39
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Всегда путаю две эти ошибки. Это использование поинтера, указывающего на неправильный адрес.

Самый близкий, но не самый простой способ -- выполнить программу myprogram под управлением strace.
strace ./myprogram > logfile.txt

Просматривая конец длинного файла logfile.txt можно найти что произошло. Но там надо опыт иметь, чтобы разобраться.

Если у вас есть gdb, то можно прошагать до места ошибки.
Скомпилируйте с ключем -g иначе не будет дебагирования.
Он позволяет ставить брекпоинты, что поможет обойти длинные циклы.

Еще способ:

Понаставить
printf("1\n");
printf("2\n");

В разные места программы каждый раз меняя цифру. Это позволит найти докуда программа доходит прежде чем упасть. Правда надо будет неоднократно добавлять printf и перекомпилировать.

Цитата(Игорь_Ван @ Oct 25 2013, 21:18) *
Про неправильный поинтер, что-то где-то видел на каком-то форуме...
программа выглядит так:
int main(void)
{
return 0;
}
каким образом её починить?)


Если эта программа дает такой результат -- значит она неправильно построена.
Как верно заметили кросс компиляторы бывают для Линукса и для bare metal
У вас на самом компьютере есть gcc? если да, то можно скомпиллировать ту же программу на таргет компьютере.

Вот объяснение разницы компиляторов:
https://sourcery.mentor.com/sgpp/lite/arm/portal/kbentry34

Остальные вопросы:
https://sourcery.mentor.com/sgpp/lite/arm/p...target_arch=arm

Откуда скачивать:
http://www.mentor.com/embedded-software/so...s/lite-edition/

У меня установлены такие tools:
ls arm-none-linux-gnueabi/arm-2011.03/bin/
arm-none-linux-gnueabi-addr2line arm-none-linux-gnueabi-gdbtui
arm-none-linux-gnueabi-ar arm-none-linux-gnueabi-gprof
arm-none-linux-gnueabi-as arm-none-linux-gnueabi-ld
arm-none-linux-gnueabi-c++ arm-none-linux-gnueabi-nm
arm-none-linux-gnueabi-c++filt arm-none-linux-gnueabi-objcopy
arm-none-linux-gnueabi-cpp arm-none-linux-gnueabi-objdump
arm-none-linux-gnueabi-elfedit arm-none-linux-gnueabi-ranlib
arm-none-linux-gnueabi-g++ arm-none-linux-gnueabi-readelf
arm-none-linux-gnueabi-gcc arm-none-linux-gnueabi-size
arm-none-linux-gnueabi-gcc-4.5.2 arm-none-linux-gnueabi-sprite
arm-none-linux-gnueabi-gcov arm-none-linux-gnueabi-strings
arm-none-linux-gnueabi-gdb arm-none-linux-gnueabi-strip

вы можете обратить внмание, что у них есть префикс arm-none-linux-gnueabi-
Полагаю, что слово linux внутри, говорит, что это для линукса.

Вполне вероятно, что у вас есть и линукс и bare metal версии тулчейна. Попробуйте найти где переключить компилятор в вашем Эклипсе. Скорее всего это путь. Найдите где у вас стоят похожие файлы и если есть для линукса. Если нет, то можете скачать с сайта, что я дал ранее.

Сообщение отредактировал Tarbal - Oct 26 2013, 01:13
Go to the top of the page
 
+Quote Post
Игорь_Ван
сообщение Oct 31 2013, 12:03
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 25-11-12
Пользователь №: 74 552



Cпасибо большое!!! Стояла bare metal версия тулчейна, а нужна была для линукса.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Oct 31 2013, 15:33
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(Игорь_Ван @ Oct 31 2013, 16:03) *
Cпасибо большое!!! Стояла bare metal версия тулчейна, а нужна была для линукса.


Успехов sm.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 17:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01449 секунд с 7
ELECTRONIX ©2004-2016