LINUX.ORG.RU

wine fakedll и линуксовые потоки

 , ,


0

2

захотелось тут один китайский программатор прикрутить через libusb к линуксу, благо что общение с железкой там осуществляется через dll, вызовы в которой прям один в один походят на libusb API.

Соответственно, написал spec-файл для winebuild с описанием соответствия функций в линуксовом исходнике виндовой dll, наваял простенькую затычку, которая дергает функции libusb и ... офигел.

Извините за экспрессию, но иначе это не назвать. dll.so, один и тот же, на одной машине работает корректно, на другой — падает от каждого чиха. Та же последовательность usb-функций, выполнененная из консольного «макета» приложения, отрабатывает удачно на всех доступных мне линуксовых компах.

Подозрения падают на pthreads, которые используются внутри libusb-1.0. Переписал dll.so со старой версией libusb-0.1 — все работает стабильно (она потоки внутри себя не юзает).

Вопрос к знатокам разработки fakedll под вайн — как вы обходитесь с потоками? Где какие грабли в нем расставлены и как их обходить?

--

P.S. Код в силу его дубовости и тупости не выкладываю. Ну, если разве кому понадобится...

★★★★★

Ответ на: комментарий от sehellion

да SinoWealth JET51. Там долгая история, хотел распотрошить прошивку умного чайника, а вон чем кончилось...

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

да это-то как раз несложно и неинтересно. Читать-писать флешку микросхемы я более-менее умею напрямую. Прикол в том, что у них база данных по девайсам в каком-то бинарном формате в отдельных файлах хранится, и с ней (разумеется) умеет работать только их софтина. Плюс у них плагин для Keil IDE для интерактивной отладки.

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

--

Кстати, в рамках оффтопа — как там ваш hp 2110 поживает? :-)

demidrol ★★★★★
() автор топика
Последнее исправление: demidrol (всего исправлений: 1)

Переписал dll.so со старой версией libusb-0.1 — все работает стабильно (она потоки внутри себя не юзает).

Я как-то начал писать fakedll для 0.1. Застопорилось на не 100% совместимости в хедерах, чего я не ожидал. А теперь вообще не могу найти тот код, где я пытался копировать в usb_find_busses(), usb_get_busses(), usb_find_devices() из линуксовой структуры в виндовую. А как у тебя вышло?

Не понимаю, почему эти fakedll до сих пор не в составе вайна. Без нормальной поддержки usb (Александр Морозов начал, а потом вдруг ушёл, кажись, в DrWeb) был бы usb хоть для тех программ, которые используют libusb.

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

ну, там вендор написал свой велосипед вместо libusb — программатор-то древний, на PDIUSB12 и каком-то Winbond-контроллере. Вот типа пример из его API

BOOL VendorControlIn(HANDLE *hFile,
             uint8_t bmRequest,
             uint16_t wValue,
             uint16_t wIndex,
             uint16_t wLength,
             uint8_t *lpOutBuffer,
             uint32_t *lpNumberOfBytesTransferred);

Ложится идеально на usb_control_msg с requestType = 0xc0.

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