Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:0
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:4
Форум » starterkit.ru » Embedded Linux
repairman (Guest)
Добавлено 19.02.2009 11:52 Редактировалось 19.02.2009 11:52 Сообщение: 71
repairman (Guest)

Такой Makefile:
Код

all: hello

CROSS=armv5l-linux-uclibc
CXX= $(CROSS)-g++

clean:
rm -f hello

hello: hello.cpp
$(CXX) hello.cpp -o hello


hello.cpp - без изменений, работает...

Код

# ./hello
ARM


p.s. непонятно, почему Вы решили программу собрать как C++... Ничего от C++ в тексте нет, а размер бинарника ОЧЕНЬ большой по сравнению с обычным C...
Один и тот же исходник, бинарники - 152кб (c++), 4кб (c) - ощутите разницу... и это с uclibc...

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно repairman 19.02.2009 г. в 13:36:01
Спуститься к концу Подняться к началу
ton (Guest)
Добавлено 20.02.2009 06:23 Редактировалось 20.02.2009 06:23 Сообщение: 72
ton (Guest)

С gnueabi такой код не работает, видимо дело в библиотеках. А заморачиваться с установкой uclibc чтот не охота...
Спуститься к концу Подняться к началу
repairman (Guest)
Добавлено 20.02.2009 09:54 Редактировалось 20.02.2009 09:54 Сообщение: 73
repairman (Guest)

Какой код не работает ? И при чем тут gnueabi ?

Префикс, надеюсь, поменять на свой догадались ?
Мне тоже не хочется ставить еще один тулчейн, только чтобы проверить Ваш пример, но я на 100% уверен, что все будет работать с CodeSourcery тулчейном.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно repairman 20.02.2009 г. в 09:57:37
Спуститься к концу Подняться к началу
ton (Guest)
Добавлено 21.02.2009 07:36 Редактировалось 21.02.2009 07:36 Сообщение: 74
ton (Guest)

hello.c - без изменений
makefile берем предложенный Вами:
Код

all: hello

CROSS=arm-none-linux-gnueabi
CC= $(CROSS)-gcc

clean:
rm -f hello

hello: hello.c
$(CC) hello.c -o hello


Код

[@SK-MAT91SAM9 q]$ls
hello
[@SK-MAT91SAM9 q]$./hello
-ash: ./hello: not found
Спуститься к концу Подняться к началу
ton (Guest)
Добавлено 21.02.2009 07:36 Редактировалось 21.02.2009 07:36 Сообщение: 75
ton (Guest)

а когда добавляем LIBS с сылкой на библиотеку видим опять Illegal Instruction.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно ton 21.02.2009 г. в 07:38:45
Спуститься к концу Подняться к началу
repairman (Guest)
Добавлено 21.02.2009 09:57 Редактировалось 21.02.2009 09:57 Сообщение: 76
repairman (Guest)

Не надо ничего в LIBS добавлять... не вводите компилятор в заблуждение....

У Вас на плате в /lib бибилиотеки лежат ? Нет ? Потому и not found, а должен лежать glibc в полном составе, если уж, Вы используете arm-none-linux-gnueabi... или собирайте статически:

Код

$(CC) hello.c -static -o hello


тогда все библиотеки внутрь бинарника будут собраны...

Можете вообще без Makefile, если у Вас к ним недоверие:

Статически:
Код

arm-none-linux-gnueabi-gcc -static hello.c -o hello


Динамически:
Код

arm-none-linux-gnueabi-gcc hello.c -o hello


IMHO, Ваш случай:
http://www.starterkit.ru/new/index.php?name=Forums&op=showtopic&id=258#8

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно repairman 21.02.2009 г. в 10:13:34
Спуститься к концу Подняться к началу
ton (Guest)
Добавлено 21.02.2009 10:21 Редактировалось 21.02.2009 10:21 Сообщение: 77
ton (Guest)

теперь бинарник занимает 560кб(!) и все равно не хочет запускаться(

о несразу заметил Вашу ссылку, спасибо

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно ton 21.02.2009 г. в 10:22:48
Спуститься к концу Подняться к началу
sasamy (Guest)
Добавлено 19.03.2009 14:02 Редактировалось 19.03.2009 14:02 Сообщение: 78
sasamy (Guest)

Вопрос про встроенный АЦП. Кто-буть использует его ? Есть ли положительные результаты ? Если да то можно ли взять исходники или хотя бы бинарник для проверки работоспособности на своей плате. Написал драйвер - валятся одни нули, вначале думал я что-то не так делаю, взял драйвер о котором писал repairman для проверки - тоже самое.
2repairman вопрос про драйвер adc - он точно рабочий ? раньше было написано что при прикосновении рукой сыплется мусор а внятные результаты удалось получить ? для примера подать заранее известное напряжение. хотя у меня там вообще всегда только нули...
Спуститься к концу Подняться к началу
MiniMax (Guest)
Добавлено 20.03.2009 10:55 Редактировалось 20.03.2009 10:55 Сообщение: 79
MiniMax (Guest)

2 sasamy
> Вопрос про встроенный АЦП
Драйвер брал здесь
http://www.at91.com/samphpbb/viewtopic.php?f=12&t=4992
Скомпилировал. Все работает. У меня ядро 2.6.24

install -c -m 0644 ${DRIVER_SOURCE_PATH}/at91adc.ko ${DRIVER_INSTALL_PATH}/at91adc.ko
depmod -r
/sbin/modprobe at91adc
mknod /dev/adc0 c 253 0
mknod /dev/adc1 c 253 1

/dev/adc0 это ch0
/dev/adc1 это ch1

Код
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>
#include <unistd.h>
//-------------------------------------------------------------
int main(void)
{
int fd_adc0;
unsigned char adcBuffer[2];
unsigned int adcValue;
int nData;
float mV;
//
printf( "adc rev 1.01 03/14/2009
");
//
if ((fd_adc0 = open("/dev/adc0", O_RDONLY)) == -1)
{
fprintf(stderr, "
Can't open /dev/adc0");
return -1;
}
for ( ;;)
{
nData = 2;
nData = read(fd_adc0,&adcBuffer,nData);
adcValue = adcBuffer[1];
adcValue <<=8;
adcValue |= adcBuffer[0];
//
mV = (adcValue * 3.0) / 1023.0;
printf( "nData=%02X adcValue=%04d mV=%5.2fmV
",nData,adcValue,mV);
usleep(1000000);
}
printf( "
" );
close(fd_adc0);
return 0;
}


Это тестовый пример. У меня REF 3В на плате

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно MiniMax 20.03.2009 г. в 10:57:18
Спуститься к концу Подняться к началу
repairman (Guest)
Добавлено 20.03.2009 10:59 Редактировалось 20.03.2009 10:59 Сообщение: 80
repairman (Guest)

Цитата

2repairman вопрос про драйвер adc - он точно рабочий ? раньше было написано что при прикосновении рукой сыплется мусор а внятные результаты удалось получить ? для примера подать заранее известное напряжение. хотя у меня там вообще всегда только нули...


Мусор идет правдоподобный...
Код

...
0002
0082
0002
007f
0002
007d
0002
007e
0002
0082
0002
007f
0002
007e
0002
0080
0002
0081
...


Читаю так:
Код

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE* f;
int chr;
f=fopen("/dev/adc0","r");
while (1)
{
chr=fgetc(f);
printf("%04x
", chr);
}

}


Нужно какую-то навеску придумать, чтобы проверить "конкретно", у меня там должен был температурный датчик висеть, до него дело еще не дошло...
Щас потенциометр напаяю, посмотрю...

Тот драйвер без изменений сильно грузит систему вплоть до остановки сети - логическая ошибка в процедуре чтения... но мусор выводит...

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно repairman 20.03.2009 г. в 11:08:01
Спуститься к концу Подняться к началу
Форум » starterkit.ru » Embedded Linux