?

Log in

No account? Create an account
И вот, после почти четырёхлетнего перерыва, внезапно запись почти по теме журнала. Речь идёт о рутовании SGS4 Active (GT-I9295).
После приобретения этого замечательного аппарата захотелось получить на нём рут-доступ — от рекламы избавиться, хотя бы. Оказалось, что все руководства предлагают пользоваться программой Odin3 для Windows™©®. По результатом гугления нашлось альтернативное решение — Heimdall. Радуюсь, ставлю, запускаю. Устройство подхватилось с лёту, таблицу разделов (heimdall print-pit) считало без проблем. Ну, думаю, дело в шляпе. Не тут-то было.
Смотрю описание режима flash. Вроде всё понятно - синтаксис запуска такой: heimdall flash -- filename .... Распаковываю взятый с любимого форума архив, в нём два файла - recovery.img и cache.img.ext4. Вроде всё логично, сверяемся с таблицей разделов, запускаем:
heimdall flash --RECOVERY recovery.img --CACHE cache.img.ext4
Процесс пошёл. И тут...

[ 0.000000] [000010b1] libusb: error [submit_bulk_transfer] submiturb failed error -1 errno=12
[ 0.253652] [000010b1] libusb: error [submit_bulk_transfer] submiturb failed error -1 errno=12
[ 0.754176] [000010b1] libusb: error [submit_bulk_transfer] submiturb failed error -1 errno=12
[ 1.504443] [000010b1] libusb: error [submit_bulk_transfer] submiturb failed error -1 errno=12
[ 2.504742] [000010b1] libusb: error [submit_bulk_transfer] submiturb failed error -1 errno=12
[ 3.754997] [000010b1] libusb: error [submit_bulk_transfer] submiturb failed error -1 errno=12

ERROR: Failed to send file part packet!
ERROR: KERNEL upload failed!

И процесс завершается. Телефон остался «ни жив, ни мёртв» — показывает начало прошивки, пишет «ни в коем случае не отключайте!!». С компа уже не отвечает ни на что.
Перезагрузка телефона показала, что отключать-таки всё же можно, загрузился после этого нормально. А я пошёл вбивать ошибку в гугл, однако безуспешно. Единственное, что нашлось более-менее толковое — совет обновить ядро. Ну что ж, обновляю, перезагружаюсь, запускаю — та же история. В режиме отладки (--usb-log-level debug) выдаёт немного больше, но в чём дело — всё равно непонятно. Видно только, что проблема возникает в функции submit_bulk_transfer. Сначала (при инициализации протокола) передаются небольшие блоки данных — в логах:
[ 0.351497] [00005dfb] libusb: debug [submit_bulk_transfer] need 1 urbs for new transfer with length 8
...
[ 0.487164] [00005dfb] libusb: debug [submit_bulk_transfer] need 1 urbs for new transfer with length 1024
А потом, после начала прошивки, через неё же пытаются прокачать здоровенный блок:
[ 1.822318] [00005dfb] libusb: debug [submit_bulk_transfer] need 1 urbs for new transfer with length 1048576
[ 1.822318] [00005dfb] libusb: error [submit_bulk_transfer] submiturb failed error -1 errno=12

Качаю исходники библиотеки (кто-то упоминал, что её надо было вручную собрать), ищу функцию — нашлась. Что такое urb - неясно, но видимо какой-то пакет, на которые блок данных режется. В коде видим конструкцию из if-ов, которая в зависимости от каких-то своих соображений либо режет блок на urb'ы (bulk_buffer_len = MAX_BULK_BUFFER_LENGTH), либо, как в моём случае, решает всё пропихнуть одним большим пакетом (bulk_buffer_len = transfer->length).
От балды ставлю после этой конструкции bulk_buffer_len = MAX_BULK_BUFFER_LENGTH, собираю, кидаю в систему, запускаю...
Работает! Всё прошилось без вопросов. Телефон пару раз выключился (включать пришлось вручную, он опять вырубается..), потом загрузился — уже с рутом.

Решение, конечно, не шибко красивое, скорее костыль/хак, однако сработало. Исходная причина, вероятно, в ядре, но туда копать уже не с руки..

И вот патч, если кому понадобится:
[патч]
--- orig	2014-02-17 21:38:01.041305420 +0400
+++ libusb/os/linux_usbfs.c	2014-02-17 21:38:50.392238141 +0400
@@ -1753,6 +1753,7 @@
 		bulk_buffer_len = MAX_BULK_BUFFER_LENGTH;
 		use_bulk_continuation = 0;
 	}
+	bulk_buffer_len = MAX_BULK_BUFFER_LENGTH;
 
 	int num_urbs = transfer->length / bulk_buffer_len;
 	int last_urb_partial = 0;

Исходники библиотеки можно взять на SourceForge. Я брал последнюю версию, на момент написания — 1.0.18. Heimdall v1.4.0.
Сообщение несколько не в тему, но пусть будет :)

DISCLAIMER:
Информация предоставлена исключительно для ознакомления. Ответственность за использование приведённых ниже сведений лежит целиком и полностью на том, кто их использует. Автор не несёт никакой ответственности за возможные последствия использования или неиспользования нижеуказанной информации.

Read more...Collapse )

Tags:

ngrep и utf-8

Столкнулся с проблемой: tcpflow и ngrep при выводе на консоль принудительно вырезают из дампа пакета непечатные символы, но считают таковыми весь юникод. При просмотре текстовых протоколов, вроде несжатого Jabber, это весьма раздражает - все юникодные надписи превращаются в многоточия.
Проблему решил небольшим патчем к ngrep. Он достаточно некрасивый, но работает.
Добавляет к ngrep новую опцию -u; если она указана - переключает вывод (-W) в режим none (одна строка - чтобы не рвался юникод при переносе) и принудительно выводит ВСЕ управляющие символы в сыром виде - "как есть". При работе с бинарными данными это может привести к плачевным результатам, зато с текстовыми в юникоде - всё более-менее нормально.
Конечно, по-хорошему стоило бы как-то определять, является ли очередной символ валидным юникодом, но для этого надо видимо устраивать очередь, буферизацию, потом исправлять переносы... В общем, мне и этого патча хватает.

Патч под катом...Collapse )
Возникла как-то проблема: sun-jdk/jre при запуске любой графической java-программы вылетает с SIGSEGV. IcedTea JDK - программы вылетают с Exception:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Can't load library: /usr/lib64/icedtea6/jre/lib/amd64/motif21/libmawt.so

В итоге оказалось, что когда-то я прописал в автозапуск
export AWT_TOOLKIT=MToolkit
Добавил я это из-за проблем с Java-программами в Awesome WM. Добавил и забыл. А теперь вот аукнулось.
После удаления этой переменной (можно поменять значение на XToolkit) проблема исчезает.
См.также: http://codeforfun.wordpress.com/2009/11/13/linux-cant-load-librarylibmawt-so/
Если в системе установлен и запущен jackd, а в .asoundrc прописана "заглушка" для вывода звука через Jack:

pcm.!default {
    type plug
    slave { pcm "jack" }
}

то при первом запуске Audacity стартовать откажется. При этом выдаст сообщение:
audacity: pcm_plug.c:388: snd_pcm_plug_change_channels: Проверочное утверждение «snd_pcm_format_linear(slv->format)» не выполнено.
Аварийный останов

(в английском варианте:
audacity: pcm_plug.c:388: snd_pcm_plug_change_channels: Assertion `snd_pcm_format_linear(slv->format)' failed.
).
Как с этим справиться: надо изменить имя заглушки - например так:
pcm.plugjack {
    type plug
    slave { pcm "jack" }
}

, после этого запустить Audacity и выбрать в настройках аудиовход и аудиовыход - JACK. Теперь можно вернуть .asoundrc к исходному состоянию.

Psi: неочевидные моменты

Многое из нижеизложенного можно найти в интернете, однако всё же опишу...
  • Выбор языка интерфейса находится не в настройках, а осуществляется через команду "Menu -> Change Profile" (предварительно надо выйти из сети).
  • В диалоге настройки смайлов можно их упорядочивать, но надо выбрать (выделить) хотя бы один набор - иначе даже при включённых смайлах будут "Смайлы недоступны". Кроме того, порядок невыбранных наборов смайлов не сохраняется.
  • Значки ростера для специальных транспортов (например mail.ru или vkontakte.ru) настраиваются не на закладке "Службы", а на закладке "Пользовательские" (в разделе "Внешний вид -> Иконки ростера"). Кстати, там же можно при желании задать особый значок для отдельного контакта/сервиса.

Tags:

Xkb, xxkb, xneur

Когда я ушёл с KDE, встал вопрос выбора индикатора раскладки клавиатуры. Сначала остановился на xxkb. В awesome у него не действовала функция поддержки разных раскладок для разных окон. Потом, в более новой версии awesome (3.2 кажется), она заработала, но как-то нестабильно. (Сразу отмечу, что я настроил xxkb на отображение только значка в трее, может быть дело в этом.)
Недавно перешёл с awesome на XMonad, для трея поставил Trayer. Проблема осталась: иногда раскладка не переключалась при переходе на другое окно, и эта неправильная раскладка запоминалась.
Сегодня установил xneur/gxneur из оверлея sunrise. Раньше не хотел его устанавливать, ибо его основная функциональность - автоматическое переключение раскладки в зависимости от набираемого текста - мне не нужно. Однако сеячас настроил его так чтобы ничего лишнего он не делал, и в отличие от xxkb, раскладку он переключает стабильно, без глюков.
Единственная проблема - иногда отваливается, попробую установить закономерность.

UPD: обнаружилась ещё одна серьёзная проблема: при запущенном xneur во время ввода с клавиатуры иксы съедают 100% процессорного времени... Может быть, виноваты настройки, может быть нет. Пока буду использовать gxneur в качестве "тупого" индикатора раскладки.
*восстановлено из черновика, не помню когда писал этот текст...

Наконец наладил работу dvgrab. Оказалось, что если его запустить с параметром -format mpeg2, то он начинает запись, но файл не создаёт и ругается:

Found AV/C device with GUID 0x0080880305280b04
Warning: Cannot set RR-scheduler
"" 551785660416.00 MiB 0 frames
Capture Stopped
Error: no HDV. Try again before giving up.

Лечится это выбором формата qt, dv2 или любого другого.
В итоге, запускаю так:
dvgrab -autosplit -format raw -showstatus -timestamp -duration 22min -interactive
формат ключевой роли не играет, ибо места все форматы занимают примерно одинаково (в моем случае (SP) - 106 мегабайт на 30 секунд). Поскольку мне на винчестере такие объёмы хранить нереально, скармливаю их на лету mencoder-у:

$ mkfifo video.dv
$ dvgrab -format raw -showstatus -duration 22min video.dv & mencoder video.dv -o video.mpg -oac mp3lame -ovc lavc -of mpeg
$ rm video.dv

результаты такого сжатия: десятисекундный фрагмент в dv - 35 мегабайт, в mpg - 1,4 мб.

Кроме того, выяснилось что при неисправном кабеле FireWire иногда компьютер видит, что к нему подключили какое-то устройство, но не понимает какое именно :) Кабель покупал чёрного цвета, визуально нормальный (тестером не проверял). Не работает. Купил другой, серебристый (прозрачная изоляция, под ней экранировка) - с ним всё работает.
Сегодня я наконец наладил автомонтирование флешек.
Флешки монтируются в /media/МеткаДиска-устройство или, если диск без метки, то /media/устройство. Например: /media/denwer-sdd1, /media/backup-sdc.
Скрипт добавляет строчку в конец файла /etc/fstab, благодаря чему потом можно отмонтировать флешку без sudo.
Чтобы извлечь флешку, надо сделать umount устройство, umount /media/путь или sync;sync;sync. После извлечения флешки все созданные для неё папки и записи в fstab автоматически удаляются.
Read more...Collapse ) Последнее обновление: 09.08.2010