LINUX.ORG.RU

Сообщения mittorn

 

Отключение устройства без отмонтирования ФС

 , ,

В связи с нехваткой места купил 16гб SDHC карту SP 10 класса (ранее использовалась такая же на 8). На карте находится корень.
Иногда при интенсивном чтении/записи карточка зависает. В dmesg ничего подозрительного не сыпет, просто застрявает. Помогает отключение и подключение карты снова (если это не корень). Однако в корне отключение приводит к понятным последствиям: корень пустеет и всё сыпется.
Можно как-нибуль устроить блокировку и ожидание повторного подключения при отключении корня?

mittorn
()

Half-life 2 arm

 , , ,

Пока что приходится довольствоваться окошком и ошибкой сегментирования.
Примечательно, что окошко создано библиотеками от Valve через нативный SDL и значёк выставлен ими же.
Инициализаия графики проходит.
После загрузки библиотеки client весь процесс начинает сыпаться, некоторые потоки при инициализации.
Впрочем, можно попытаться собрать server/client из SDK, вдруг поможет.

mittorn
()

Как происходит передача аргументов в функцию (arm)?

Как устроен этот процесс?
Пытаюсь узнать, какие аргументы передаются функции SDL_main из соседней функции в бинарнике.
Должны передаваться фальшивые argc и argv. Первый аргумент всегда равен единице (видно в дизассемблере), на второй должен подаваться массив из аргументов.
По всей видимости аргументы перед переходом скидываются в несколько первых регистров.
Чтобы перехватить аргументы, я изменил адрес в инструкции перехода, указывающий на внешнюю функцию.
В gdb получаю, что первый аргумент всегда 1, как и должно быть, а второй равен реальному argv.
Если пробросить аргументы в ту функцию, куда они назначались, программа ведёт себя, будто их и не было (крашится через некоторое время), хотя изначально выполнение проходило дальше.

mittorn
()

ltrace on arm: УМННР

 , ltrace, умннр

У кого-нибудь работает сабж?

Уходит в цикл на первой встреченной функции, повторяя такую строку (если податтачитсся к процессу, то функция будет другой):

__libc_start_main(0x1d114, 1, 0xbeadb834, 0x87f00 <unfinished ...>
Через некоторое время выдаёт:
callstack_push_symfunc: Error: call nesting too deep!
и вместе с трассируем процессом падает по SIGABRT. cortex-a8, ltrace-0.7.3, linux-sunxi-3.0.76

mittorn
()

Как написать AIGLX драйевер?

 , regal, ,

Где-нибудь есть литература о том, как сделать сабж?
Есть библиотека Regal, которая может транслировать opengl в gles и обратно, но она не умеет эмулировать glx (что можно реализовать отдельно). Хорошо бы её прикрутить к иксам, чтобы использовать стандартную реализацию libGL.
Гугл пока не помог, видны только вопли по поводу настройки дров.

mittorn
()

Проблемы со сборкой glibc: multiple definition of `__libc_multiple_libcs'

 , ,

armv7, cortex-a8, hardfloat
Лог ошибки есть в гугле по первой строчки заголовка, решения в осовном - смена тулчейна, мультилиба или сфлагов. Как причину пишут баг оптимизации в gcc 4.7, однако похожие логи и на более старых версиях, и даже в 2003 году в начальных сборках ntpl упоминаются.
Собираю glibc-2.15-r3 из флагов включен только debug
CFLAGS="-g -march=armv7-a -mfloat-abi=hard -mfpu=neon -ftree-vectorize -mvectorize-with-neon-quad -mcpu=cortex-a8 -mtune=cortex-a8 -mthumb -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -ffast-math"
gcc 4.7.3-r1
Та что нужно исправить, чтобы она собралась?
Рыться в коде сильно долго/не охота, перебирать разные флаги на cortex-a8 - долго/не экологично.
Нужно собрать с поддержкой отладки т.к весь стек вызовов постоянно теряется а каком-нибудь printf, в результате gdb не возможно пользоваться.

mittorn
()

Как найти инструкцию, бросающую SIGILL?

 , vfp3, vfp4

Пробовал через gdb disassemble, но он падает с сегфолтом на первой же vfp инструкции (и чем же отлаживать отладчик?)
Обычным objdump'ом инструкции видно, но как узнать, где именно проблема?
предположительно причина в том, что код собран под vfp4, а у меня vfp3. Возможно, превышен номер регистра или ещё что-нибудь подобное.

mittorn
()

arm - эмуляция sdiv/udiv

 , , sdiv

Сделали arm несколько удобных опциональных инструкций.
Есть несколько бинарников, в которых используются эти инструкции. Хочу их изменить, чтобы они запускались так же и на cortex-a8.
Казалось бы, всё просто: заменить sdiv op0 op1 op2 на:
mov r0 op1
mov r1 op2
bl addr<div_func>
mov r0 op0
и определить div_func из какой-нибудь библиотеки. Но что делать с регистрами? Ведь они могут после понадобиться? Да и такие действия тоже не всегда сработают (напр. для r2 r1 r0) Может, со стеком можно что-то сделать?
И я пока не совсем понял, как влинковать эмулирующую функцию.

mittorn
()

Source linux-arm

 , ,

Вышедшая Half-life 2 на android (для Tegra 4) довольно хорошо враппится: внутри врапперы, эмулирующие более glibc-подобное окружение поверх ведра. Для графики и управления используется SDL2. Т.к valve часто делают проверку на нулевой указатель, думаю, для андройдоспецифичных функций можно делать реализации в виде return 0. Если заставить графику работать на mali, думаю, даже на кубиках можно будет играть (потребуется упрощение детализации текстур).

mittorn
()

Дамп оригинальной прошивки Jolla Sailfish

 , ,

Что-то я нигде не могу найти прошивку Jolla phone, чтобы разобрать. Нашёл только репы, выдающие 401 по https, судя по всему ключ выдаётся при регистрации устройства. В интернете нашёл несколько обещаний выложить, но так никто и не выложил. Или это нарушает какую-то лицензию? В таком случае этой лицензии я не видел.

mittorn
()

Эмуляция NetworkManager API

 

Пытаюсь избавиться от steam runtime. Обнаружил, что он слинкован с libnm. Есть какие-то способы исправить это без установки сего поделия?

P.S сделал «враппер»:

http://pastebin.com/4WFMbXEc

Смешно, но со steam'ом прокатило.

Теперь интересно, как заставить его ещё выдавать, что подключение восстановлено.

P.P.S Это исправило баг https://github.com/ValveSoftware/steam-for-linux/issues/971 Steam с неработающим автопереподключением без NM.

mittorn
()

Единый реестр

 ,

Понимаю, что танцпол, но вынужденный.
В единый реестр занесены адреса, принадлежащие многим хостингам, в результате при попытке зайти, например, на bouncyball.eu или http://www.issteamdown.com получаю след. страницу: http://pastebin.com/CPiUX9mv (пример исходника). Проверка по хостнейму на предложенном сайте выдаёт : Искомый url не значится в реестре по основаниям, предусмотренным статьей 15.3 Федерального закона от 27 июля 2006 года No 149-ФЗ
Где-нибудь есть динамически пополняющийся список адресов, которые нужно проксифицировать?

mittorn
()

diff не работает

 , , sun7i

Пытаюсь сравнить 2 участка кодя ядер разных версий. Исходники хранятся на ntfs (сейчас по другому не получается к сожалению, надо чистить разделы).
diff выдаёт такое сравнение файлов:
diff -d -U 3 -H -B -E -p -t -r -N -x '*.o' -x '*.bin' -x '*.elf' -x '*.lst' -x '*.code' -x '*.map' linux-3.3/arch/arm/mach-sun7i/pm/standby/suspend.xn linux-3.4/arch/arm/mach-sun7i/pm/standby/suspend.xn
--- linux-3.3/arch/arm/mach-sun7i/pm/standby/suspend.xn 2013-03-20 00:28:38.000000000 +0600
+++ linux-3.4/arch/arm/mach-sun7i/pm/standby/suspend.xn 2013-07-17 17:44:29.000000000 +0700
@@ -1,22 +1,22 @@
-
-OUTPUT_ARCH(arm)
-ENTRY(main)
-
-SECTIONS
-{
- __suspend_start = . ;
- .text 0x000000000 :
- {
- ./super/suspend/suspend.o(.text.startup)
- *(.text)
- *(.rodata)
- }
-
- .data : { *(.data) }
-
- __bss_start = . ;
- .bss : { *(.sbss) *(.scommon) *(.bss) *(COMMON) }
- __bss_end = .;
- __suspend_end = . ;
-}
-
+
+OUTPUT_ARCH(arm)
+ENTRY(main)
+
+SECTIONS
+{
+ __suspend_start = . ;
+ .text 0x000000000 :
+ {
+ ./super/suspend/suspend.o(.text.startup)
+ *(.text)
+ *(.rodata)
+ }
+
+ .data : { *(.data) }
+
+ __bss_start = . ;
+ .bss : { *(.sbss) *(.scommon) *(.bss) *(COMMON) }
+ __bss_end = .;
+ __suspend_end = . ;
+}
Что за?
Что-то я особо не понял, в чём различие. Действительно проблема в переносах. Помогла опция -w

mittorn
()

Не могу достать vmlinux из zImage

 ,

Нужно достать из ядра бинарник, отвечающий за спящий режим, вмещённый в ядро через .incbin. Ядро arm, производитель исходники зажал, в собранном из похожих спящий режим не работает. В собранном vmlinux бинарник присутствует. Хочу найти нечто похожее и в стоковом. Остановился на полученном zImage. file определяет ядро как data, gzip его не берёт. Скрипт extract-vmlinux: Cannot find vmlinux.
Что ещё можно сделать? P.S сам разобрался, кривой abootimg достал несжатый Image и назвал его zImage

mittorn
()

2gis для linux

 , ,

2gis для android написан на их собственном форке qt
Тут http://www.slideshare.net/codefest/codefest-2011-galin-qt-for-crossplatform-m... хвалится, какой он кроссплатформенный.
Да и сам 2gis похоже тоже на нём https://qt.gitorious.org/qt/grym-qt
Где же тогда 2гис для linux? Для скчивания доступны только msi и apk.
Им что, так сложно выполнить

export PREFIX=./linux-build
./configure --prefix ./linux-build
make PREFIX=./linux-build
make PREFIX=./linux-build install

под linux в папке с исходниками 2gis и выложить содержимое linux-build в свободный доступ?

mittorn
()

JAD java decompiler

Потребовалось декомпилировать некоторый обфусцированный кусок кода. fernflower не справляется (т.к он аналитический, просто пропускает методы, которые не может разобрать). Вручную - слишком много работы. Когда-то использовал для этого jad, но теперь столкнулся с проблемой:
5/jad
jad: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.0.0, stripped
Linux mittorn-sun4i 3.0.76-t1 #58 PREEMPT Wed Mar 12 01:00:47 NOVT 2014 armv7l ARMv7 Processor rev 2 (v7l) sun4i GNU/Linux
К несчастью, ни исходников ни совместимого бинарника не обнаружилось. Автор по всей видимости ушёл в кому.
Пробую так:
qemu-i386 ./jad Class_1da.class
Вижу:
Parsing Class_1da.class... Generating Class_1da.jad
И сильный жёр процессора, больше ничего не происходит. Возможно, через неделю оно отработает, но нужно поскорее.
Есть какой-нибудь способ эмулировать x86 быстрее?
Или может, есть бесплатные вычислительные x86-сервера?

mittorn
()

Xlib: Нарисовать utf-8 текст в окне

 , ,

Как сделать сабж?
Пробовал Xutf8DrawString, но там, видимо, говнокод, несовместимый с моим многопоточным говнокодом. Русский всё равно не печатает (видимо, в fixed его нет), и при вызове из соседнего потока получаю разнообразные ошибки:
[xcb] Unknown request in queue while dequeuing
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
[xcb] Aborting, sorry about that.
cedarx-gui: /var/tmp/portage/x11-libs/libX11-1.6.2/work/libX11-1.6.2/src/xcb_io.c:179: dequeue_pending_request: Assertion `!xcb_xlib_unknown_req_in_deq' failed.
Аварийный останов

XInitThreads разумеется был.

[xcb] Extra reply data still left in queue
[xcb] This is most likely caused by a broken X extension library
[xcb] Aborting, sorry about that.
cedarx-gui: /var/tmp/portage/x11-libs/libX11-1.6.2/work/libX11-1.6.2/src/xcb_io.c:576: _XReply: Assertion `!xcb_xlib_extra_reply_data_left' failed.
Аварийный останов

Через XDrawString работает.
Как загрузить шрифты, отличные от fixed так и не нашёл.
Многопоточость можно убрать (после некоторых изменений всё можно сделать через select), но пока что лень.

mittorn
()

Переносимость адресов строковых констант

 , , ,

Есть проприетарный бинарник (позиционно-зависимый код), пишу для него графическую оболочку. Для взаимодействия используется загружаемая через LD_PRELOAD библиотека со врапперами для ioctl и printf.
На выводе много информации, которая забирается через враппер, строки форматов различаю по адресам строковых констант.
Могу ли я быть уверен, что при запуске на другой системе адреса останутся прежними (бинарник остаётся тот же, меняются только библиотеки)?
Производительность критична, так что посимвольное сравнение не годится.

mittorn
()

Как отладить suspend?

 ,

Есть планшет на Allwinner A20. На стоковом ядре (ни исходников, ни конфигурации разумеется нет) ждущий режим работает.
На ядре linux-sunxi в спящий режим планшет вроде бы уходит, но выходить из него не хочет. При этом все pm-тесты (/sys/power/pm_test) проходит успешно, отключая и восстанавливая при этом подсветку и usb. Сначала думал, что дело в кнопке включения, однако после засыпания по rtcwake тоже восстанавливаться ничего не хочет, помогает только шестисекундное нажатие на кнопку питания (принудительное отключение) и включение снова.
Возможности подключить serial пока нет (корпус не вскрыт).
На аналогичном (вплоть до корпуса) устройстве на A10 проблем нет.

mittorn
()

Выбор между /dev/dri/cardN

 , ,

Подключил к планшету (Allwinner A10) dvi-монитор, указал использование второго фреймбуфера. Обнаружил, что на втором x-сервере не работает GLES (Mali400). Протрассировал, понял, что дело в DRI, заменил ноду /dev/dri/card0 на /dev/dri/card1, перезапустил вторые иксы. Графика заработала.
Теперь вопрос: как указать путь к dri-устройству принудительно?

mittorn
()

RSS подписка на новые темы