LINUX.ORG.RU

wiringPi работает при сборке на борде, но не работает при кросскомпиляции

 ,


0

2

Смеркалось.

Потребовалось мне подергать пинами из сишного кода на orangepi-one. Ну я склонил прямо на борду wiringOP собрал прям там, получилась .so-шка, которая поставилась в систему и хидеры мне дали, заинклудил, добавил – -lwiringPi линковщику все заработало.

Зачесалось у меня в одном месте, надоело каждый раз на борде собирать, дай, думаю, кросскомпилятор натравлю. Поставил из пакетов gcc-arm-linux-gnueabihf, подправил мейкфайл – он ожидаемо не нашал на хосте библиотеку.

Тогда я, зачем-то, взял нужные мне объектники от wiringPi и прямо прилинковал к своему бинярю. Стало собираться, однако на устройстве команды типа сет_пин не работают, ошибок нет, просто физический уровень не меняется на пинах. Подумал, может я накосячил с опциями сборки и моя библиотека собрана немного не для той борды – забрал объектники прямо с собраной на плате версии библиотеки – обратно же, собирается но не работает.

Тогда стянул собранную прямо на борде .so-шку, положил ее в каталог сборки, сказал линковщику -L. и опять собралось и не работает.

В общем, ЯННП.

★★★★★
$ ldd fege
	linux-vdso.so.1 (0xbefd4000)
	libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0xb6f3d000)
	libwiringPi.so => /usr/local/lib/libwiringPi.so (0xb6f1e000)
	libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6e20000)
	/lib/ld-linux-armhf.so.3 (0xb6f76000)

$ ldd fege_arm 
	linux-vdso.so.1 (0xbef12000)
	libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6e61000)
	/lib/ld-linux-armhf.so.3 (0xb6f72000)

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

pihter ★★★★★
() автор топика

и еще вопрос, раз уж такая пьянка: как скадать линковщику при кросс-компиляции что нужная .so-шка на целевом девайсе будет лежать в /my/own/path ?

pihter ★★★★★
() автор топика
Ответ на: комментарий от u-235

попробую, спасибо, но это сопутствующий вопрос. А что за дичь в первом случае, я не вкуриваю )

pihter ★★★★★
() автор топика

Подумал, может я накосячил с опциями сборки и моя библиотека собрана немного не для той борды

А ведь это можно в райнтайме выдернуть эту инфу (есть там какая то утилита таблицу выводит, может это можно и в своей программе как то вывести), вдруг берется не то? В плане, оно может реконфигурироваться при старте, и делает это неверно, поэтому то и наблюдается чудо - библиотека вроде на борде собрана, но при старте не так настраивается

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Я в итоге победил тем, что выдрал интересующий меня код, скомпилил и приликовал прям объектник. Оно пару дней поработало и внезапно перестало.

Хотя на самой борде, если из консоли управлять упомянутой тобой утилитой gpio - светодиод загорается и тухнет, а вот через либу перестало.

И, ЧСХ, перестало работать общение через UART, которое было реализовано через линуксовые системные вызовы и работало, даже когда дрыганье пинами с моей новой кросскомпиенной либой не работало. При том, уарт из консоли работает.

Вообще никаких идей, скоро сутки как )

pihter ★★★★★
() автор топика
Ответ на: комментарий от izzholtik

Можно вообще это Г не использовать, а работать напрямую либо через DMA (требует прав рута), либо через sysfs (тормозит).

А собирать лучше в qemu chroot. Можно сразу генту собрать, а в ней - свои поделки. А то реально на одноплатнике отлаживать - дольше ждёшь, пока соберётся!

anonymous
()
Ответ на: комментарий от izzholtik

мя слышал про gpiod

да, я тоже прочухал, скачал-собрал, выглядит годно (особенно на фоне говна внутрях wiringpi), но пока не осилил помигать светодиодом даже из консольных утилит, там сотни этих линий на двух чипах, какая куда, понять невозможно. Не перебором же их вычислять. Подписаны парочка, которая за светодиоды, эти, наверное, из коробки заработают, а вот остальные – ХЗ. Кроме того, если поменять режимы пинов через sysfs, то на выхлопе gpioinfo (тулза из libgpiod) оно никак не отражается. Собсна, че я голословлю:

$ sudo ./gpiodetect 
gpiochip0 [1c20800.pinctrl] (224 lines)
gpiochip1 [1f02c00.pinctrl] (32 lines)

$ sudo ./gpioinfo 1c20800.pinctrl
gpiochip0 - 224 lines:
	line   0:      unnamed       unused   input  active-high 
	
...

	line  14:      unnamed       unused   input  active-high 
	line  15:      unnamed "orangepi:red:status" output active-high [used]
	line  16:      unnamed       unused   input  active-high 
	
...
	line 109:      unnamed       unused   input  active-high 
	line 110:      unnamed  "onewire@0"  output  active-high [used open-drain]
	line 111:      unnamed       unused   input  active-high 
	
...
	line 164:      unnamed       unused   input  active-high 
	line 165:      unnamed       unused   input  active-high 
	line 166:      unnamed         "cd"   input   active-low [used]
	line 167:      unnamed       unused   input  active-high 
	line 168:      unnamed       unused   input  active-high 
	line 169:      unnamed       unused   input  active-high 
	
...
	line 202:      unnamed       unused   input  active-high 
	line 203:      unnamed       unused   input  active-high 
	line 204:      unnamed "usb0_id_det" input active-high [used]
	line 205:      unnamed       unused   input  active-high 
	line 206:      unnamed       unused   input  active-high 
	line 207:      unnamed       unused   input  active-high 
	line 208:      unnamed       unused   input  active-high 
	line 209:      unnamed       unused   input  active-high 
	line 210:      unnamed       unused   input  active-high 
	line 211:      unnamed       unused   input  active-high 
	line 212:      unnamed       unused   input  active-high 
	line 213:      unnamed       unused   input  active-high 
	line 214:      unnamed       unused   input  active-high 
	line 215:      unnamed       unused   input  active-high 
	line 216:      unnamed       unused   input  active-high 
	line 217:      unnamed       unused   input  active-high 
	line 218:      unnamed       unused   input  active-high 
	line 219:      unnamed       unused   input  active-high 
	line 220:      unnamed       unused   input  active-high 
	line 221:      unnamed       unused   input  active-high 
	line 222:      unnamed       unused   input  active-high 
	line 223:      unnamed       unused   input  active-high

pihter ★★★★★
() автор топика
Ответ на: комментарий от anonymous

а работать напрямую либо через DMA (требует прав рута)

экзампель в студию! ну и оно ж попросит там всяких смещений, где это выковыривать?

А собирать лучше в qemu chroot. Можно сразу генту собрать, а в ней - свои поделки. А то реально на одноплатнике отлаживать - дольше ждёшь, пока соберётся!

Так, собсна, все и началось с того что я перешел на кросскомпиляцию. Как ты в qemu бедешь работу с внешней электроникой отлаживать? А собирается оно элементарно без всяяких qemu arm-linux-gnueabihf-gcc prog.c -o prog

pihter ★★★★★
() автор топика
Ответ на: комментарий от anonymous

ерез DMA

и вообще, кто-нибудь делал такое именно для OrangePiOne или как обычно все только для малины?

pihter ★★★★★
() автор топика
Ответ на: комментарий от pihter

экзампель в студию!

Вот тебе пример. Полно на гитхабе.

где это выковыривать?

Выдерни из заголовочников wiringpi.

Как ты в qemu бедешь работу с внешней электроникой отлаживать?

Никак. qemu - для сборки всякой жироты. Потом бинарь копируешь к себе на одноплатник и тестируешь.

А собирается оно элементарно

Если там нет 100500 зависимостей!

anonymous
()
Ответ на: комментарий от I-Love-Microsoft

интересно gpiod быстрее?

DMA быстрее

Я раскочегарился до 2 МГц на Orange Pi

Куда тебе быстрее? )

pihter ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Полно на гитхабе.

Да, спасибо, я уже нашел: это тот неловкий случай, когда затупил и сначала спросил, потом подумал

Выдерни из заголовочников wiringpi.

Звучит красноглазненько. Для этого надо несколько глубже понимать как устроена память на борде, чем я понимаю на данный момент, имхо, с наскоку не осилю. Хотя все может быть

pihter ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.