В этом посте я расскажу о том, как я в 2022 году смог написать и скомпилировать эльф на macOS на М1, и покажу, что из этого получилось.
Прямо сразу: видео с тем, что получилось
Коротко о телефонах Siemens x65 и x75
- SoC Infineon PMB8870, также известная как SGold
- Процессор ARM926EJ-S
-
2 Мб оперативкиВ комментах пишут, что 8 - 32 Мб флэш-памяти, из них ~10 отведено под доступную пользователю файловую систему, в остальном объёме находится прошивка
- Экран 132*176, большую часть времени работает в режиме RGB565 (16 бит на пиксель)
- В S65 и всей 75 серии есть слот для карты памяти RS-MMC (это как SD, только тоньше и в половину длины)
- В 75 серии присутствует аппаратный декодер mp3
- Связь с внешним миром: GSM/GPRS (без EDGE), последовательный порт в проприетарном разъёме, ИК-порт, в некоторых моделях bluetooth.
Структурная схема SoC из рекламных материалов производителя
Ядро процессора только одно, и оно занимается и GSM (как я понимаю, на достаточно высоком уровне), и рисованием интерфейса на экране.
Коротко об эльфах и их загрузчике
Строго говоря, полноценной операционной системы с настоящим API, динамическим линкером, виртуальной памятью и прочими современными радостями у этих телефонов нет. В процессоре есть MMU, но он не используется. Прошивка достаточно монолитна, и, по слухам, сделана на основе ОС реального времени Nucleus RTOS. Это всё оказывается проблемой, когда хочется динамически подгружать какой-то левый код — адреса нужных этому коду функций разные на разных моделях телефонов и на разных версиях прошивки для одной и той же модели. Разработчики загрузчика эльфов решили эту проблему оригинально: сделали интерфейс системных вызовов а-ля DOS. Раскладываешь аргументы функции по регистрам, вызываешь инструкцию
swi XX
, где XX — номер нужной функции, а добавленный патчем обработчик прерывания уже по таблице для конкретной прошивки прыгает в нужное место.В оригинальном репозитории на тему эльфов, который каким-то чудом всё ещё онлайн, да и по моей собственной памяти, эльфы компилировались какой-то очень странной проприетарной микроконтроллерной штукой под названием IAR. У неё вот этот способ вызова функций через swi — как будто бы встроенная в компилятор фича. Я уже был готов сам начать разбираться с правильным ABI для этих «системных вызовов», писать куски ассемблера, отлаживать всё это дело без отладчика и даже логирования, но наткнулся на вот этот репозиторий, в котором те же самые эльфы сопровождаются файлами проектов для CodeBlocks и собираются нормальным человеческим gcc. Выглядит так, что самая сложная работа всё-таки уже была сделана за меня. Так что берём это всё и…
Пытаемся собрать эльф
И сразу вопрос — а чем собирать-то будем? Я уже когда-то пробовал извратиться с Android NDK, но ничего адекватно работающего из этого не получилось. К счастью, в Homebrew есть пакет gcc-arm-embedded с описанием «Pre-built GNU bare-metal toolchain for 32-bit Arm processors» — выглядит как именно то, что нам нужно!
Ставим, собираем минимальный пример эльфа из репозитория выше, elfloader3/examples/C/main.c:
arm-none-eabi-gcc main.c -o hello.elf -I../../dev/include -DSGOLD -O2 -std=gnu99 -D__NO_LIBC -lcrt -lcrt_helper -lgcc -L../../dev/lib/libs -Wl,--defsym,__ex=0 -Wl,--gc-section -nostartfiles
(не показано: с десяток неудачных попыток)Заливаем на телефон, запускаем. Ничего не происходит. Осознаём, что эльфы, которые генерирует gcc, всё-таки не настолько же простые, как из IAR. Ставим имеющийся в репозитории более новый эльфлоадер. Поверх старого, надеясь, что ничего не сломается.
Возвращение 2007 выглядит примерно вот так
Хорошая новость: телефон после установки патча включается и работает. Плохая: эльф всё равно не запускается, но теперь хотя бы показывает ошибку.
Динамические библиотеки, щито?! В 2007 такого не было.
После чтения исходников стало понятно, что библиотека должна быть в папке /ZBin/lib либо в памяти телефона, либо на карте. Кладём её туда и запускаем ещё раз. Получаем ошибку «Incorrect elf». Находим в исходниках рядом с ней строку (орфография сохранена):
If you wont to use the shared libraries, you must add to linker option '--defsym __ex=0' add use elfclose function!
Не буду писать много букв о том, как я это долго и мучительно отлаживал, но в итоге у меня получилось скомпилировать работающий эльф. Благодаря этому экспириенсу я узнал много нового о том, как операционные системы загружают исполняемые файлы. В итоге:
- Пришлось отказаться от предоставленной эльфлоадером «рантайм-библиотеки», потому что у меня так и не получилось заставить это работать. Видимо, GCC слишком новый.
- Не обязательно вызывать все функции прошивки через программные прерывания. Этот новый эльфлоадер так и не делает — он получает указатель на таблицу указателей на функции через
swi 0x80FF
, а дальше уже вызывает из неё. Я у себя сделал так же, в swilib.h уже все нужные макросы прописаны, удобно. - Ни в коем случае нельзя инициализировать поля с указателями в структурах статически (на этапе компиляции). Эльф загружается в по сути случайный адрес в оперативке, а компилятор прописывает в эти поля адреса как будто эльф загружен по адресу 0x00000000. Результат предсказуем. Если инициализировать во время выполнения, такой проблемы нет, адрес высчитывается относительно
pc
и получается правильный. - Выгрузку эльфа из памяти я так и не смог сделать. Идея там такая, что нужно, чтобы эльф экспортировал (или импортировал?) символ
__ex
, в который эльфлоадер положит указатель на свою структуру с информацией про сам этот эльф. При выходе нужно передать этот указатель в функциюelfclose()
. У меня так и не получилось заставить линкер экспортировать этот символ так, как оно ожидает, так что эта память просто течёт. Но для того, что мы тут пытаемся сделать, это вроде и не так уж страшно ¯\_(ツ)_/¯
CC=arm-none-eabi-gcc
CFLAGS=-I../sie-dev/elfloader3/dev/include -DSGOLD -DX75 -D__NO_LIBC -O2 -std=gnu99 -Wl,-s -nostartfiles -nostdlib -fPIE -fshort-wchar
LIBS=-lgcc
DEPS=
%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
BadApple: BadApple.o
$(CC) -o BadApple.elf BadApple.o $(CFLAGS) $(LIBS)
.PHONY: clean
clean:
rm -f *.o *.elf
Собственно сжатие и вывод видео
Изначально я хотел выводить картинку прямо в буфер экрана, но из этого ничего не получилось. Функция
RamScreenBuffer()
действительно возвращает указатель на буфер экрана. Можно прочитать 132*176*2 байт и получится скриншот. Но писать туда бесполезно — ничего из записанного почему-то нигде не отображается. Скорее всего, потому что сама прошивка его перезаписывает раньше, чем свежезаписанные данные попадут в местный аналог видеокарты.В итоге остановился на менее оптимальном способе: сделать растр (т.н. IMGHDR), обновлять в нём пиксели каждый кадр и рисовать его на экран. Он бывает с 1, 8 или 16 битами на пиксель, я выбрал 8, чтобы были градации серого, но чтобы и не приходилось слишком много данных гонять туда-сюда (это ооооочень медленно). Получилось не очень оптимально, но 15 кадров в секунду вроде бы тянет.
Алгоритм сжатия максимально тупой, вариация на тему RLE. Есть команды «пропустить пиксели» (которые не поменялись с прошлого кадра), «перезаписать пиксели», «заполнить указанным значением» и «заполнить нулями». Всё видео, 3287 кадров, заняло около 13 Мб. Для облегчения чтения файл поделен на страницы по 40 Кб. Предполагается читать страницу целиком и держать её в памяти — каждый кадр гарантированно находится в пределах одной страницы.
Исходники самого эльфа и кодировщика
FAQ
Q: Зачем ты это сделал?
A: Потому что могу, потому что хотел выпендриться,
Q: А на других телефонах заработает?
A: На 75 серии — скорее да, чем нет. На 65 серии — скорее нет, чем да, потому что во встроенную память файл с видео не влезет, нужна карта. На S65 может заработать, если сконвертировать музыку в amr или wav. А может и не заработать. Есть только один способ узнать!
Q: Но ведь на этих сименсах и так можно смотреть видео? Я помню, я смотрел!
A: В окошке на полэкрана, с битрейтом «шакалы 20й степени» и однозначным FPS.
Комментарии (69)
13_beta2
26.01.2022 21:16+10Ох, аж олдскулы свело.
Помню прекрасно и софт того времени и многометровые листинги в Ида (поди найди, где вообще в 16 мб бинарнике код а где картинки с нескучным обоями), первые опыты с не-х86 ассемблером и первые патчи, бесконечные поиски в оперативке нужных данных и попытки придумать и организовать интерфейс обмена данными между такой заплаткой и j2me приложением. Как-то заодно был приобретён первый опыт с java, злое*учим эклипсом и масса других побочных навыков. Скучно точно не было.
dydyman
26.01.2022 22:03поди найди, где вообще в 16 мб бинарнике код а где картинки с нескучным обоями
Я так иконки меню переделывал, прозрачность они не поддерживали, а очень хотелось. Как-то психанул и нарисовал комплект анимированных иконок с кусочками обоев на заднем плане (получилась иллюзия прозрачности) и запаковал в прошивку. Ну а смещение в фулфлеше для перезаписи imei, помнил тогда наизусть.
Сейчас для любителей ковыряться в железе есть ардуины/малины на любой вкус, а тогда вместо них были Сименсы )13_beta2
27.01.2022 20:42В отличие от ... Сименсы были "всем понятной "потребительской электроникой и показать свои эксперименты можно было условно любому знакомому. Кого-то и этот аспект мотивировал.
grishkaa Автор
27.01.2022 02:34поди найди, где вообще в 16 мб бинарнике код а где картинки с нескучным обоями
К моменту, когда я начал этим всем увлекаться, уже были инструменты вроде smelter, которые умели показывать где что по блокам. Дизассемблировать прошивку я, правда, тогда не пробовал, зато пробовал вот вчера, гидрой. Декомпилирует во что-то осмысленное, но, блин, всё равно сложно понять как именно и почему оно всё работает. Возможно я просто не умею реверсить bare metal код.
Ommonick
27.01.2022 11:24+1До сих пор лежит дома Samsung x600, который при включении говорит металлизированным голосом "система включена". Было время, да.
drWhy
26.01.2022 22:04+1Когда-то купил AX72, но так и не дождался, пока патчи под него подвезут. Может время настало?
Nick0las
27.01.2022 18:31+1Патчи портировались под каждую верстю прошивки отдельно, в каждой версии надо было найти соответствующие API и места врезки своих функций. Поэтому на неходовых телефонах было мало патчей.
Добавлено: некоторые телефоны можно было прошить прошивкой от другой модели. Например на CX65 ставилась прошивка от CX70. А на ME45 прошивка от S45i (хотя это совсем другая история)
grishkaa Автор
27.01.2022 23:21Так вообще, насколько я понимаю, «SWI-библиотека» появилась ещё до эльфлоадера, именно чтобы можно было писать портабельные патчи. И в Smelter есть кнопка, чтобы искать функции по паттернам.
Wolf4D
27.01.2022 00:52+2А вот S75 отлично проигрывал видео фуллскрин, там ЕМНИП и аппаратный декодер был. Помню, с завода на нём лежало видео "Million Bycicles", игравшее плавно и красиво - а я затарился огромной (не меньше гигабайта!) картой памяти, и смотрел оттуда полнометражки. Где-то на половине иногда начинался рассинхрон звука, но я мужественно терпел. Помню и всю эту работу с эльфами, и то, что изложено в статье - очень круто :)
А CX75 отличная машинка - мой папа использовал его ещё года три назад, и только ради новомодных банковских приложений отказался от него. Весь корпус потёрт, аккумулятор менялся, но аппарат активно эксплуатировался больше десяти лет! Теперь лежит в холодном резерве, чтобы в случае необходимости снова встать "на боевое дежурство".
space2pacman
27.01.2022 02:58+4Видео Million Bycicles ещё осталось? Скиньте через ИК-порт.
grishkaa Автор
27.01.2022 03:00+2Такие видео через ик-порт кидать долго, не факт что за урок получится успеть
Solid_Nitrogen
27.01.2022 19:19Помню как с какого то сони эрриксона на свой м65 три или четыре урока передавал одну из серий тома и джери, закончилось все успешно и даже не плохо проигрывалось) весило видео примерно 4мб, потом засмотрел его до дыр)
Daddy_Cool
27.01.2022 02:54Посмотерл видео - прикольно!
Вот есть стим-панк, есть дизель-панк... А может есть такой...кнопочно-телефонный панк? Где мир пошел не по пути больших тыкательных экранов, а по пути здорового человека? Экраны чтоб смотреть, кнопки, чтоб в них тыкать...grishkaa Автор
27.01.2022 03:05Так до появления айфона вполне себе были кнопочные смартфоны с более настоящими ОС, с тем же симбианом например. Стоили, как правило, как несколько обычных телефонов.
Мне, правда, кажется прикольным компромиссный вариант — слайдер и с большим сенсорным экраном, и с физическими кнопками. У меня как-то в итоге ни слайдера, ни раскладушки не было, может поэтому так и кажется)
K0styan
27.01.2022 11:35Мир "Матрицы" - с одной стороны нейроинтерфейсы и летающие корабли, с другой - мониторы с консольками, телефоны не то, что кнопочные, а местами аж дисковые, дискеты опять же.
*окей, до 4 части, там уже смартфоны(
chelovek-jpeg
28.01.2022 10:46вот был же расцвет 8-битной культуры, может и ренессанс старых мобильников будет?)
grishkaa Автор
28.01.2022 10:50Так вроде уже понемногу начинается. У меня один друг недавно купил себе какую-то нокию (с симбианом, правда, насколько я помню), игры запускать. И ведь в других странах 2G-сети уже начали отключать, а в России таких планов вроде пока нет :)
Если честно, я даже от реакции общественности на эту статью несколько офигел. Ожидал, что да, ностальгия у народа есть, но чтоб вот прям настолько!
space2pacman
27.01.2022 02:57Был C65 и был удивлён, что через галерею видео формата 3gp не воспроизводилось а через файловый менеджер - да.
c45
27.01.2022 21:52Да, в C65 можно было смотреть короткие видео через файлменеджер, но не во всех прошивках.
dlinyj
27.01.2022 03:07+3Потрясающая статья!
Громадное спасибо, аш олдскулы свело. Интересно, где вы нашли описание всех функций?grishkaa Автор
27.01.2022 03:13+4Сами определения — вот тут,
в том же репозиториивот тут есть куча примеров эльфов, где они используются. Ну а так, как ни странно, можно гуглить их названия (они достаточно уникальны!) и забредать на какие-нибудь древние форумы, или на буквально сайты на народе. В исходниках эльфов частенько есть комментарии. На русском. В windows-1251, ъаъ. И всякий там код для инициализации CSM/GUI все явно копипастили друг у друга, я тоже скопипастил, но переписал, чтобы он был более читаемый.
И, конечно же, можно экспериментировать. Но аккуратно. Любое неверное движение — и телефон говорит «пик» и вырубается. Причину можно посмотреть в инженерном меню в разделе "(S)Exit", но она в большинстве случаев вообще не помогает понять что именно пошло не так.
strangest
27.01.2022 04:49+3как не-программист я решал проблему запуска "видео" на аппаратах, не умевших в 3gp совсем, с помощью хака - можно было выдрать аудио в отдельный файл, перегнать видео в гифку, а потом запихнуть всё вместе в MMS, и воспроизведение начиналось одновременно.
аудитория была в шоке, ведь телефон видео не поддерживает - но играет!
0xdead926e
27.01.2022 05:13+1тщмта, железа этих телефонов вполне хватало на xvid 132*176 в 15 fps. больше смысла не имело, ибо дефолтный "драйвер" дисплея (который на самом деле не драйвер, а просто процесс nucleus'а, а драйвера siemens не использовали вообще) просто не умел рефрешить чаще.
упор там был даже не в производительность проца, которой вполне хватало (но дико нехватало наличия хоть какого-нибудь FPU и бесило то, что проц даже банально делить не умеет), а в скорость доступа до флешки. той, которая (RS-)MMC. наивный fopen/fread выдавал единицы килобайт в секунду. ровно по той причине, что siemens не использовали драйвера.
при этом чисто технически sdio-контроллер там мог читать флешки быстро и делал это- но только в родном плеере. спокойно выдавал все 1411 кбит/с.
крч, не просто так в этих телефонах в векторах прерываний есть замечательная константа 0xFACE926E, а память при старте ос они проверяют не менее замечательной константой 0xDEAD926E.
2 Мб оперативки
а на cx75 (и возможно m75)- 16, верхние 8 из которых не использовались. но можно включить обратно.
grishkaa Автор
27.01.2022 05:30+1наивный fopen/fread выдавал единицы килобайт в секунду
О. А вот это интересно. Я реально столкнулся с тем, что при чтении страницы (40 кб) из файла наивно в GUI_OnRedraw() всё ощутимо пролагивает на полсекунды. Решил это тем, что выделил два буфера: один для страницы, с которой мы рисуем кадры, и второй — чтобы асинхронно (если честно, всё ещё не до конца понимаю что делает SUBPROC(), но вроде бы запускает переданную функцию как отдельный поток) читать в него файл. Когда закончили с текущим буфером, меняем их местами и снова запускаем чтение асинхронно.крч, не просто так в этих телефонах в векторах прерываний есть замечательная константа 0xFACE926E, а память при старте ос они проверяют не менее замечательной константой 0xDEAD926E.
Это я не находил :)
Но у меня как-то вообще всё туго с реверсингом bare metal кода, даже с современными инструментами вроде ghidra. Наверное, не стоит пытаться тренироваться в этом на ~22 мегабайтах прошивки с RTOS для устройства с каким-то умопомрачительным количеством периферии.8. а на cx75 (и возможно m75)- 16, верхние 8 из которых не использовались. но можно включить обратно.
Поправил. Чот да, я всё-таки туплю — мне попадались адреса типа 0хa82f0714, при том, что я помню, что внешняя по отношению к процессору оперативка начинается с 0xa8000000, а это уже смещение почти 3 мб.
А зачем они ставили 16, чтобы не использовать половину? Это ж дорого?0xdead926e
27.01.2022 05:41+3Это я не находил :)
я просто лениво-лениво пишу эмулятор pmb8875/6, насмотрелась на оные. ну, а на dead926e еще тогда, чуть меньше 15 лет назад.
0xface926e лежит по адресу 0x14. но не уверена, что его можно прочитать просто так- туда подмаплена TCM.
Я реально столкнулся с тем, что при чтении страницы (40 кб) из файла наивно в GUI_OnRedraw() всё ощутимо пролагивает на полсекунды.
там просто фс тоже в отдельном процессе и общение с ним mailbox'ами и очередями. с очевидными тормозами на каждом шагу.
А зачем они ставили 16, чтобы не использовать половину? Это ж дорого?
кто же их знает, это же siemens xD
возможно, хотели что-то еще добавить, но не успели. там очень-очень много недопиленных вещей. *показывает на 3d-ускоритель в s75*
даже с современными инструментами вроде ghidra.
гидрой, да 32-меговый бинарь... она ж подавится xD
вроде бы запускает переданную функцию как отдельный поток
чисто технически все эльфы работают в одном потоке. cepid 0x4209, насколько помню. а subproc запускает функцию в контексте другого (но тоже одного и фиксированного) потока с другим приоритетом (pid == приоритет). вот его уже не помню, слишком давно было.
grishkaa Автор
27.01.2022 05:58+1я просто лениво-лениво пишу эмулятор pmb8875/6, насмотрелась на оные.
Ещё интереснее! Такая мысль у меня тоже была, чтобы наконец-то какими-то практическими вещами укрепить своё понимание как работают процессоры в частности и железо в целом на низком уровне. Но лучше, видимо, всё-таки начать с чего-нибудь более документированного и менее сложного. Игровой приставки там какой-нибудь. Там из обязательной к поддержке периферии обычно только видеочип и кнопки/джойстики.
И как успехи?ну, а на dead926e еще тогда, чуть меньше 15 лет назад.
В фулфлэше с того сх75, что в видео, оно есть на смещении 0x92AC4 (в обратном порядке байт).там просто фс тоже в отдельном процессе и общение с ним mailbox'ами и очередями.
Ага, до чего-то такого я докапывался, по крайней мере видел процессы (CepID, кстати что такое CepID?) с FFS в названии — это либо For Fuck's Sake, либо Flash File System, каждый выбирает расшифровку по вкусу. И ещё все функции для работы с файлами вызываются через какую-то таблицу с указателями (которая я не смог найти где заполняется). Подозреваю, что они разные для флэша и карты.*показывает на 3d-ускоритель в s75*
Так он вроде работал? В соседнем комменте про это писали.гидрой, да 32-меговый бинарь… она ж подавится xD
Как ни странно, не давилась даже на макбуке 2012 года, а на этом с м1 макс уж и подавно.
0xdead926e
27.01.2022 06:10+3И как успехи?
nucleus запускается, совсем лоулевел "драйвера" запускаются, шедулер работает. до старта "основной ос" не доходит (да, там "ос поверх ос"). за что-то надо дернуть, еще не нашла, за что xD
или возможно просто что-то прошивке не нравится и она втихую перестает дальше запускаться (но не выключается и не перестает перезапускать watchdog)
тот лог с фуллфлеша s65, если что.
Так он вроде работал? В соседнем комменте про это писали.
в соседнем комменте про видео, а не про 3d. ЕМНИП там стоял ati imageon из первых, у которых был opengles 1.1. и вот оно работало настолько плохо... что я не уверена, что он вообще использовался. xD
какую-то таблицу с указателями
посмотри на сеть. где-то там был пятерной указатель. xD
кажется, около dns.
DaemonGloom
27.01.2022 08:52+1Эх, ностальгия. Бессонные ночи, поиск функций в прошивке по паттернам (и методом тыка) для добавления в таблицу функций, портирование патчей от других моделей и написание эльфов. Поиск адресов падения в s-exit, первые попытки перестать экономить память и взять аж 256 байт сразу под конфиг, а не увеличивать это значение понемногу с каждой версией. Где-то до сих пор валяется архив с патчами, которые я так и не выложил, и прочим барахлом. Жаль, сам телефон после долгого лежания в столе перестал включаться.
FSA
27.01.2022 09:43+3Киллер-фичей Siemens были виртуальные SIM-карты. При чём их можно было сделать даже на M55, но было немного неудобно, что нужно было перезагружать телефон. На M65 и S75 можно уже выбрать карту из менюшки, подождать и пользоваться.
Frankenstine
27.01.2022 11:45+1У меня были на SL45, жаль только таким образом пролюбил физическую симку, кек
13_beta2
27.01.2022 20:38+1Именно. Жаль современные симки уже не брутфорсятся.
А ещё люди знавшие про патч мультисим явно не разделяли мнение о "инновационности" eSIM многие годы спустя.
Blackmeser
27.01.2022 10:11+1Буквально на днях купил Б/У Siemens 65 серии, ибо ностальгия. К сожалению узнал что Теле2 отказался от предоставления доступа в интернет GPRS. Кто-нибудь знает, можно ли собрать кабель-аналог DCA510 самому? Где взять распиновку?
Nick0las
27.01.2022 18:42+2Распиновка гуглится по x65 pionout. Она такая:
1 - зарядка (можно подать +5в от USB)
2 - GND
3 - TX
4 - RX
5 - CTS. Привязываем к земле (pin 2)
7 - DCD. Привязываем к земле (pin 2)
Большинство инструкций упускают что 5 и 7 ноги надо подтянуть к земле. А так - подойдет практически любой USB-UART с уровнями 3.3В. Для прошивки зарядка (pin 1) не нужна насколько я помню.
13_beta2
27.01.2022 20:35Так а зачем? DCA540 и собирать не нужно, только штекер да провод от старой мыши подпаять.
SlimShaggy
27.01.2022 23:06Так через него же шить нельзя. Помню, когда покупал кабель, специально брал 510-й по этой причине.
13_beta2
28.01.2022 00:00Шить — нельзя, да. Были (даже есть, если поискать) оба варианта. Помню в родном dca510 отвратное качество пластика, растрескался моментально.
Про шить в начальном комментарии не было. Вдруг человеку нужно картинки перекидывать, модемом воспользоваться, или смски бекапить)
SlimShaggy
28.01.2022 00:03Мой китайский 510 (с коробочкой посередине) до сих пор цел - видимо, тот редкий случай, когда китай качественнее бренда.
Blackmeser
28.01.2022 06:45Кабель откопал, кажется DCA510, проблема что в диспетчере устройств когда его подключишь - он не определяется, а когда телефон подключаешь - тогда начинает определяться, но как Unknown Device, VID_0000&PID_0000, дрова не ставятся, пытался вручную вдолбить дрова FTDI (COM<->USB), они отказались запускаться. С VID_0000&PID_0000 что-то можно сделать? Или это проблема кабеля?
Nick0las
28.01.2022 12:38Похоже что кабель не DCA510 или USB-UART чип сильно не в порядке. Я бы посоветовал найти исправный USB-UART и соеденить с имеющимся разъемом.
SlimShaggy
28.01.2022 15:50Скорее всего проблема кабеля. Мой даже без телефона определялся как USB-Serial Converter и в системе появлялся виртуальный COM-порт.
0xdead926e
28.01.2022 18:28+2скорее всего это защита от контрафактных чипов, FTDI этим страдали. будет работать только со старыми драйверами (2.8.14 кажется), если прописать vid/pid в него обратно (гуглится по ftdi mprog). но проще взять любой другой usb-uart конвертер, лучше всего на ch340 - они точно могут в два мегабода и их дрова не страдают защитой от подделок.
DrMefistO
27.01.2022 10:41+2Не буду писать много букв о том, как я это долго и мучительно отлаживал,
но в итоге у меня получилось скомпилировать работающий эльф.Самые интересные моменты как раз и упущены. Важен же сам процесс, а не готовые мейкфайлы. И таких моментов в статье больше одного.
grishkaa Автор
27.01.2022 19:32Сомневаюсь, что кому бы то ни было было бы интересно смотреть на под сотню таких команд, мелких изменений исходника из папки examples и крашей прошивки. Но так, когда я ещё не разобрался с инициализацией структур, но уже смог собрать что-то пытающееся запуститься, я отлаживал эти проблемы с указателями с помощью таки работающих sprintf и ShowMSG (показывает алерт).
DrMefistO
27.01.2022 20:26Ну сейчас вы судя по статье герой, а вот ошибки, на которые вы натыкались, чтобы на них не наткнулся кто-то другой в аналогичной ситуации, вы не указали, что делает ценность статьи минимальной. Только если вдруг кому-то не захотелось на точно таком же девайсе яблочко запустить.
nullch
27.01.2022 10:55+1Какая милота. Напомнил мне мое детство, правда я писал эльфы патчи для SE. Скучаю по тем временам.
dreikk91
27.01.2022 11:41+2Мне больше всего нравились эмуляторы и порт дума. Тогда это было очень круто.
С телефонов есть мс60 рабочий, сх75 в разобраном виде, но вроде тоже рабочий, el71 с дохлым шлейфом, без батареи но включается (дажу фул слил), е71 работает, но плохо сеть ловит. Последним купил sxg75 за 30 грн без батареи, но это уже не совсем то.
Кабель для прошивки сделал на ch340g, был старый на pl2102, но с ним часто бсоды прилетали
Кстати елка нормально тянула видео xvid 320x240 с хорошим битрейтом и фпс
SlimShaggy
27.01.2022 23:29+3Я в те времена благодаря Сименсу увлекся нетмониторингом. Был такой патч "miniGPS" - заменял название оператора на текст из файлика с именем, соответствующим CID-LAC текущей соты. И Java-редактор этих самых файликов к нему прилагался. Эх, сколько километров было пройдено в поисках немногочисленных базовых станций орловского Мегафона. Плюс каждую обойти кругом, чтоб поймать все сектора. И название для каждого понятное придумать, и на карту нанести... А еще во многих местах рядом стояли БСки разных операторов, и нужно было по уровню сигнала и задержке (или надписи на контейнере ????) определить, какая из них "моя". Через некоторое время принадлежность отдельно стоящих вышек мог определять на взгляд. В общем, веселые были времена, не то что сейчас, когда на каждом втором столбе микросота висит)
grishkaa Автор
27.01.2022 23:35+1Если что, на андроиде это всё тоже можно прямо сейчас. Во-первых в большинстве прошивок есть секретное меню, которое открывается, если набрать *#*#INFO#*#*, там можно посмотреть информацию об используемой БС, и ещё можно вручную выбрать стандарт связи (пользуюсь иногда, когда оно включает EDGE при доступном, но, видимо, не 100% идеальном LTE). Во-вторых, для получения той же самой инфы есть апи, доступное приложениям. Где-то в недрах TelephonyManager, по-моему. Можно поставить какое-нибудь готовое приложение (их много), можно написать своё.
SlimShaggy
27.01.2022 23:41Да, иногда меня тянет тряхнуть стариной и я расставляю вышки в CellMapper ????
А еще сейчас есть "реестр санитаров", в котором можно искать БСки вообще не выходя из дома)
13_beta2
28.01.2022 06:18+2благодаря Сименсу увлекся нетмониторингом
Как раз похожий случай. Штатное меню, конечно, было непригодно, но раз измерения есть в памяти -- грех не воспользоваться. Дальше уже появилась подстветка по встроенной "БД", запись логов, привязка на конкретный канал. Сейчас на случайно сохранившиеся скриншоты без слёз не взглянешь, а как для 2006 очень помогало с хобби.
Virusmater
29.01.2022 03:55Вот бы кто сделал интервью с участниками сименс сцены. Valera V, smelter, cbn с его эмулями, kibab и его база патчей, avkiev, chaos, papuas, perk11, BoBa, SiNgle... Список может продолжаться бесконечно.
Про ресурсы Сименс клаб, конфликт орг с ру, вап клаб, аллсименс, кибаб, siepatchdb конфа в жаббере.
vs74
Любимый телефон в 2007 был)
FrozenTwilight
У меня была его младшая версия -- С75. Но мне ооочень нравился CX75 из-за всех его фич с мп3 и картой памяти.
Если я ничего не путаю, в Сименсах была zlib встроена в прошивку и из J2ME был доступ к работе с zip-файлами буквально в несколько строк кода.
slaFFik
У меня CX65 был, я прошивку ставил с программным mp3 декодером, и мог с компа заливать в телефон аж 3-4 mp3 файла и воспроизводить их. Памяти было 10,6 мегабайт.
И поводу zip - все верно. Паковал шпоры на первых курсах универа (куча .txt файлов внутри зипа). И с телефона заходил в архив и открывал что нужно.
grishkaa Автор
Поддержка zip в любом случае необходима любому телефону с J2ME, потому что .jar — это на самом деле zip с классами, ресурсами и манифестом.
chelovek-jpeg
помню, я так даже модификации джава-игр делал) распаковывал винраром на пк, менял файлы, паковал обратно. На сименсах запускались, на других телефонах после перепаковки часто нет
vd0
Как я его любил... До сих пор вспоминается с большей теплотой чем любой другой телефон
chelovek-jpeg
юзал его с 2007 по 2009) эльфы, патчи наше всё) по-сути первый мой смартфон. Забавное совпадение на днях загорелся идеей его купить, скоро приобрету бу и потом корпус заменю на новый