?

Log in

No account? Create an account
поучительная история про то, как производители экономят на… - zg [entries|archive|friends|userinfo]
zg

[ website | Мой сайт ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

[мар. 23, 2005|04:49 pm]
zg
[Tags|, ]

поучительная история про то, как производители экономят на квалифицированной рабочей силе, а страдает от этого конечный потребитель.
diclaimer: некоторые технические моменты в истории сознательно упрощены.

1. проблема.

в симбиан апи есть такой вызов:
static void User::Panic(const TDesC& aCategory,TInt aReason);
он завершает вызвавшее его приложение и показывает табличку, которая состоит из трёх строк.
первая строка всегда: app. closed.
вторая содержит имя нити, вызвавшей ошибку. у главной нити любого приложения имя: main.
третья строка обычно пустая. но можно включить показ параметров aCategory и aReason, создав файл c:\system\bootdata\ErrRd. подробнее - тут.

оригинальная n-gage с версией прошивки 4.03, если на неё поставить очень много пиратских игр, любит показывать такую табличку почти при каждой загрузке. в сети существует куча шаманских рецептов, которые не работают. основная посылка — криво сломанные игры.
табличка с включенным показом параметров выглядит так:
app. closed
main
ss audio server 4


2. поиск решения.

найти место в прошивке, где выполняется код:
User::Panic(_L("SS Audio Server"),4);
достаточно легко. такое место в прошивке всего одно и выполняется оно при ошибке инициализации аудио сервера.
а вот дальше — всё сложнее. сама процедура инициализации — очень большая, её отладка — недоступна, остаётся лишь анализ кода, которого очень много.
первым результатом такого анализа была идея написать автостартующую программу, которая бы при старте телефона делала dismount карте памяти. какая связь между картой памяти и падением аудио сервера? а очень простая: аудио сервер никогда не падает при отсутствии карты памяти.
такая программа была написана и она даже работала по следующим причинам:
автостартующие программы запускаются гораздо раньше аудио сервера.
в самом конце загрузки, последней запускается программа UnlockMMC.app, которая делает mount карте памяти.

но программа хоть решала одну большую проблему, создавала куда более меньшую, но всё же — проблему. все остальные автостартующие программы, находящиеся на карте не стартовали.

3. немного про client-server.

технология известная и широко применяется в symbian достаточно широко. в реализации большинства клиентов при неудачном соединении с сервером с ошибками KErrNotFound и KErrServerTerminated происходит попытка запуска сервера с ожиданием.

4. про adsp сервер и про аудио сервер.

в n-gage в отличии от других смартфонов 60 серии, существуют два дополнительных сервиса: adsp и аудио. первый служит для непосредственного управления дополнительным dsp, встроенным в n-gage. второй — высокоуровневая надстройка над первым. в реализации клиентов к обоим сервисам присутствует код запуска «своих» серверов, но он нигде не используется.
оба этих сервиса запускаются специальной программой starter, которая в том числе при старте запускает различные приложения исходя из своего списка.
итак, как это происходит:
▪ запускается adsp сервер.
▪ запускается приложение «телефон». оно к нашей истории никакого отношения не имеет.
▪ запускается аудио сервер. аудио сервер пытается совершить соединение к adsp серверу и если оно происходит неудачно — падает.

внимательный читатель, дочитав до этого места, скажет:
— #$%#$#%^@$%^@@%$#$! — и будет совершенно прав, ибо в наш век вытесняющей многозадачности только полные кретины могут надеятся на гарантированную очерёдность выполнения несинхронизированных действий в различых потоках.

5. решение.

к большому счастью функция синхронного запуска adsp сервера экспортируется клиентской билиотекой, поэтому может быть легко вызвана автостартующей програмой. так как starter сначала дожидается инициализации всех автостартующих программ, а уже потом переходит к своему списку, то вышеописанной проблемы 100% не возникает.
реализацию можно взять тут. реализация не имеет никаких побочных эффектов.

6. причем же тут пиратские игры.

а при том. существует специальный сервер, который мониторит содержимое папок \system\apps на всех дисках. и по всей видимости этот самый мониторинг при большом объеме приложений приводит к тому, что к моменту запуска аудио сервера adsp сервер не успевает проинициализироваться.

7. прошивка 3.30

вышеописанная ошибка есть и в данной версии прошивки, однако падение аудио сервера не мешает дальнейшей работе телефона.
СсылкаОтветить

Comments:
[User Picture]From: absfree
2005-03-23 08:02 pm
Конечный потребитель - понятие абстрактное.. Чтобы его обобщить, используют некий денежный эквивалент. В принципе, если бы этого глюка не было, то прибыль поднялась бы ненамного (если поднялась бы вообще)... А если нету разницы, зачем платить больше? :)
(Ответить) (Thread)
[User Picture]From: zg
2005-03-23 08:57 pm
с таким подходом остается только пожелать успехов.
(Ответить) (Parent) (Thread)
[User Picture]From: absfree
2005-03-24 05:50 am
Я даже в чем-то их понимаю. Ведь, основная задача их бизнеса - заработать деньги, а не выпустить идеальный продукт. Который, кстати, существует года 3-4, а потом заменяется на новый...

Не будем мы жить в идеальном мире...
(Ответить) (Parent) (Thread)
[User Picture]From: zg
2005-03-24 07:57 am
сейчас задача любого бизнеса — зарабатывание денег в краткосрочной перспективе. исключений я не видел.
но речь-то не об этом. взять к примеру рекламу. вряд ли более-менее солидная фирма доверит делать рекламу студенту первого курса. или никто не будет строить дом без фундамента.
а тут— тут даже на первый курс не тянет. особенно пример с деструкторами. а до идеальности тут далеко. тут бы было б, что бы работало.
(Ответить) (Parent) (Thread)
(Удалённый комментарий)
[User Picture]From: zg
2005-03-26 12:13 pm
реклама — нормальный пример.
эта проблема всплыла почти сразу в 3.30. и как раз в 4.03 её пытались решить, но только хуже сделали.
а про ссылку— напоминаю, речь про телефон, который даже прошить в домашних условиях нельзя.
(Ответить) (Parent) (Thread)