Автор текста: MaFrance351
Приветствую всех!
Последние годы довольно часто обсуждаются проекты open-source телефонов. В основном это всякие смартфоны на Linux, иногда припоминают и всякую экзотику типа OpenMoko. Но есть одна проблема — baseband, процессор модема, который непосредственно отвечает за всё его взаимодействие с сетями. Эти чипы исполняют проприетарный код, исходники которого распространяются под строгими NDA и недоступны практически никому.
Как насчёт того, чтобы создать открытый GSM-телефон? Именно об этом мы сегодня и поговорим, а заодно и попробуем запустить такой экземпляр.
Итак, в сегодняшней статье поговорим о том, насколько реально простому пользователю получить GSM-телефон, прошивка модема в котором работает без блобов. Попутно выясним, как это сделать и что из этого получится. Традиционно будет много интересного.
❯ Суть такова
У всех на слуху такие девайсы как PinePhone или Fairphone. Это довольно интересные устройства, но сегодня речь пойдёт не о них. Если у упомянутых телефонов основной упор сделан на операционную систему, ремонтопригодность и тому подобные параметры, то проект, который мы рассмотрим сейчас, касается радиочастотной части: модема, DSP и взаимодействия с сотовой сетью на низком уровне. Во всех ранее представленных экземплярах используется уже готовый модуль модема, тогда как тут всё практически полностью открыто, а прошивка собирается из исходников и лишена блобов.
Сразу предупреждаю: то, что есть сейчас — всего лишь концепт, до полноценного использования девайса как телефона ещё далеко. Тем не менее, это хороший пример того, как при помощи доступного даже простому школьнику железа получить открытый (ну почти) GSM-телефон.
❯ TI Calypso
Давным-давно, где-то в самом начале двухтысячных, в Texas Instruments придумали чипсет Calypso.
Он предназначался для построения на нём бюджетных кнопочных телефонов и использовался целым рядом компаний, в частности, Motorola, Sony Ericsson и Siemens.
На самом деле практически никто не занимался разработкой и производством телефонов, все эти задачи были отданы на откуп тайваньской Compal, у которой просто закупали огромными партиями дешёвые ODM-трубки. Таких телефонов, использующих данный чипсет, по факту было ещё больше, чем может показаться. И, казалось бы, девайсы не были примечательны что для пользователей, что для энтузиастов, если бы не один примечательный факт. В 2008 году на сайте cryptome.org была выложена слитая документация на данный чипсет. Это вызвало поистине небывалый интерес в узких кругах, позже с использованием этих наработок было создано немало интересных проектов, в том числе во всех смыслах легендарный OsmocomBB. Но сегодня речь пойдёт не о нём, а о прямо противоположном устройстве. Раз есть базовая станция с открытым ПО, то почему бы и не быть такому телефону? Именно о нём мы сейчас и поговорим.
❯ FreeCalypso
Именно благодаря упомянутой утечке был создан проект FreeCalypso — открытая альтернативная прошивка для телефонов на таком чипсете. Для её использования понадобится только телефон из числа совместимых (их мы затронем чуть позже) и шнурок для подключения подопытного к компьютеру.
Несмотря на то, что прошивка цифрового сигнального процессора (он же DSP) так и остаётся «чёрным ящиком», можно с уверенностью сказать, что FreeCalypso наиболее близок к идее открытого GSM-телефона. На момент написания статьи ближе находятся только решения с использованием SDR, но простым пользователям они практически недоступны ввиду крайне высокой цены таких приборов, тогда как старый телефон на опыты может себе позволить практически каждый.
❯ Обзор оборудования
Итак, для того, чтобы повторить у себя этот проект, понадобится всего-ничего: совместимый телефон, кабель для прошивки и компьютер с Linux.
А вот и подопытный телефон. Это Motorola C139. Подойдут также C113, C115, C118, C155, но лично я с ними не пробовал. Под другие телефоны альтернативной прошивки нет.
Как и в C118, тут тоже есть сервисное меню, код для его входа такой же: **16379#. Тут можно включить трассировку, которую он будет отправлять в последовательный порт.
Интерфейс также очень похож на другие телефоны Motorola на чипсете TI Calypso. Ну а если достать C118, сомнения о том, что это телефоны из одной линейки, пропадают сразу же.
Для прошивки понадобится некий «T191 unlock cable», служащий для связи телефона с компьютером.
На практике его можно заменить переходником на базе CP2102 (или любым другим, у которого есть поддержка уровней 3,3 В. Не используйте переходники с пятивольтовыми уровнями. Спалите телефон). Как его спаять, я уже описывал тут. Подключать его надо к ПК с Linux, виртуалка не подойдёт. Возможно, у вас дела будут обстоять иначе, но на практике я столкнулся с тем, что при подключении такой штуки к ВМ начинается периодический пропуск байтов.
❯ Чуть-чуть об устройстве GSM-телефона
Немного затронем то, из чего вообще состоят обычные телефоны.
Сейчас нас интересуют именно кнопочные экземпляры, причём именно «традиционные», без какой-то пользовательской ОС и прочих наворотов. В отличие от смартфонов и коммуникаторов, где основной процессор общается с внешним модемом, здесь что пользовательские функции, что взаимодействие с сетью выполняются одним и тем же процессором, в нашем случае это тот самый TI Calypso.
Вот структурная схема телефона на таком чипсете. TI Calypso имеет в своём составе тот самый необходимый для работы сети DSP, процессорное ядро (ARM7TDMI) и аппаратные контроллеры интерфейса. К нему подключается радиочастотная часть: чип трансивера, высокостабильный генератор (тот самый, погрешности которого нам тогда не хватало, чтобы поднять свою БС без приёма синхросигнала от другой), антенна, фильтр, смеситель и антенный переключатель. Последний позволяет использовать одну антенну для приёма и передачи. Поскольку в GSM используется временно́е разделение, между кадрами на приём и передачу есть определённая задержка (равная длительности трёх кадров), так что этот чип представляет собой не частотно-разделительный фильтр, как в аналоговых телефонах (AMPS, TACS, NMT), а просто коммутатор, подключающий антенну то к приёмнику, то к передатчику.
Эти аналоговые сигналы обрабатывает DSP, прошивка и описание которого не разглашается даже производителям телефонов (тем же компаниям, которые и продают трубки, либо тем, кто выпускает ODM-телефоны, закупаемые предыдущими брендами).
Другими компонентами baseband являются аппаратный шифратор (реализующий те самые алгоритмы A5/1 и A5/2), ПЗУ с прошивкой DSP, аудиокодек, а также различные контроллеры — UART, дисплея, клавиатуры, ISO7816 (для чтения SIM-карты) и прочей периферии.
Что же до телефонов с двумя симками, то тут есть два варианта. Первый ныне практически полностью ушёл в историю — там используется один модем, а симки подключаются к нему через обычный мультиплексор. Таким образом, единовременно может быть доступна в сети только одна карта. Такая схема использовалась в первых таких телефонах (обычно это были дешёвые китайские трубки). Второй вариант сложнее — по сути это два полноценных модема, размещённых в одном корпусе. Так устроены ну практически все современные телефоны, начиная от стареньких Samsung Duos и заканчивая нынешними смартфонами.
❯ Ставим софт
Переходим к опытам. Для загрузки альтернативной прошивки нужна сама прошивка под нужный нам телефон, а также софт для этого. Всё это можно скачать тут. Нас интересуют архивы c1xx-fcmag-latest.tar.bz2 и fc-host-tools-latest.tar.bz2. Первый содержит прошивку и сопутствующие файлы, второй — утилиты для её загрузки.
Если прошивка поставляется собранной вместе с исходниками, то софт необходимо компилировать самому. Для этого распаковываем архив в папку, заходим в неё и традиционным для линукса образом собираем софт:
После непродолжительной сборки (я пробовал на Linux Mint и на Lubuntu, проблем не возникло) всё нужное ПО будет готово.
❯ Сливаем прошивку
Перед началом прошивки необходимо сделать резервную копию Flash. Она нужна на случай, если придётся вернуться к изначальной прошивке или если в процессе загрузки новой что-то пойдёт не так.
Итак, заходим в папку loadtools и запускаем софт:
sudo ./fc-loadtool -h compal -c 1003 /dev/ttyUSB0
Само собой, порт нужно заменить на тот, который соответствует вашему переходнику. Если у вас не C139, то команду следует выполнить со следующими параметрами:
C11x/12x: fc-loadtool -h compal /dev/ttyXXX C139/140: fc-loadtool -h compal -c 1004 /dev/ttyXXX C155/156: fc-loadtool -h c155 /dev/ttyXXX
Если всё сделано верно, в консоли появится примерно следующее:
Коротко жмякаем кнопку питания. Удерживать её не надо, это приведёт к обычной загрузке, что нам пока что не требуется. Также не стоит пытаться делать это с подключенным зарядником — в это время загрузчик не работает.
Если подключение успешно, отобразится консоль loadtool. Вводим следующую команду:
flash dump2bin backup.bin
Начнётся копирование прошивки с телефона на ПК. Процесс этот ничуть не быстрый и занимает примерно десять минут.
По окончании в папке с программой будет создан файл с штатной прошивкой телефона.
❯ Калибровка
Компоненты, использованные в радиочастотной части телефона, неидеальны, а ручная подгонка их номиналов привела бы к непомерному удорожанию телефона. Поэтому поступают проще: собранный телефон подключается к тестовому стенду, после чего полученные поправки и коэффициенты записываются на Flash.
Многие из вас наверняка видели этот маленький высокочастотный разъём на телефоне, а кто-то ошибочно полагал, что нужен он для подключения внешней антенны.
На старых телефонах всё было именно так. Вот, например, такое подключение на Motorola M3688. На новых же трубках этот разъём служит исключительно для тестирования на заводе или в сервисе, никакие пользовательские аксессуары в него не втыкаются.
Более того, кустарные попытки что-то туда воткнуть, скорее всего, приведут к тому, что не самый распространённый в других областях разъём сломается и телефон перестанет ловить сеть.
Тестирование обычно происходит при помощи специальных (ориентированных именно на мобильные сети) анализаторов стоимостью как квартира в центре столицы нашей страны.
Так вот. После того, как нужные настройки радиочастотной части получены, их загружают в память телефона, где они лежат в одном из скрытых каталогов файловой системы. Если просто установить свою прошивку (а FreeCalypso затирает всю Flash), то эти данные будут утеряны и телефон превратится в электронный органайзер. Поэтому их надо оттуда извлечь. Для этого предназначена специальная утилита c1xx-calextr, лежащая в папке ./ffstools/caltools.
Выполняем следующую команду:
./c1xx-calextr -b rfbin backup.bin 0x3FC000
Здесь backup.bin — файл дампа Flash, 0x3FC000 — смещение. Оно определяется следующим образом. Если размер Flash равен двум МБ, то смещение равно 0x1FC000, если четырём, то 0x3FC000. Размер этот очень легко определить по самому файлу дампа — 2097152 байт для маленькой версии и 4194304 байт для большой. После выполнения команды создастся папка rfbin, содержащая в себе все необходимые файлы с параметрами.
❯ Аккумулятор
Теперь очередь контроллера питания. Для него тоже есть свои параметры, если их не задать, то телефон не будет заряжаться. В инструкциях FreeCalypso упоминается вот эта ссылка, но она нерабочая. В реальности нужные нам файлы лежат тут. Нам понадобится standard следующего содержания:
Где-то может упоминаться вот такой файл. Не используйте его, с ним работать не будет.
Ну что же, можно перейти к самому важному этапу.
❯ Загрузчик
Теперь самый ответственный момент — перезапись загрузчика Motorola на тот, который будет запускать софт FreeCalypso.
Внимание! Неправильная перепрошивка загрузчика или нештатная ситуация в её процессе ведёт к окирпичиванию телефона. Если вы запорете эту область памяти, вернуть трубу к жизни сможет только программатор!
В случае использования C155 перепрошивать загрузчик не надо, описанные в этом разделе действия окирпичат телефон.
Перед началом данного предприятия заряжаем телефон «под завязку», затем подключаем его к компьютеру. Если аккумулятор дохлый, то запускаем от ЛБП, для верности. Симку, если она была вставлена, необходимо вытащить. Из архива с прошивкой извлекаем compal-flash-boot-for-fc.bin. После этого запускаем софт для прошивки, ранее описанным образом запускаем на телефоне загрузчик и выполняем следующую команду:
flash erase-program-boot compal-flash-boot-for-fc.bin
Если всё было сделано правильно, загрузчик будет успешно записан.
❯ Освобождение «Калипсо»
Теперь, если загрузчик записан, можно приступать к самой прошивке. В архиве нас интересует папка build-c139-hybrid-ui-vo. В ней и находится интересующая нас прошивка. И тут есть один нюанс: в качестве «полноценного» телефона подойдёт только Motorola C139. Под другие телефоны прошивки тоже имеются, но они реализуют функционал голосового модема, а не полностью самостоятельного телефона. Это тоже необходимо учесть, если вы хотите использовать иной телефон.
Итак, идём в эту папку и закидываем содержимое туда, где у нас лежит софт для загрузки. Далее вводим команду:
Прошивка начинается со стирания памяти.
Далее произойдёт загрузка самой прошивки.
И, после нескольких минут томительного ожидания, программа выдаст нечто вроде этого.
Затираем участок Flash, выделенный под системные файлы, для чего вводим команду:
flash erase 0x3C0000 0x30000
Первое число — смещение. Оно также отличается в зависимости от объёма памяти: 0x1C0000 для 2 МБ, 0x3C0000 для 4 МБ, 0x700000 для 8 МБ. Второе число — количество байт: 0x30000 для 2 и 4 МБ, 0xD0000 для 8 МБ.
С fc-loadtool по сути всё. Выходим, набрав exit....
ЧИТАТЬ ДАЛЕЕ ↩ (без регистрации и СМС)
Материал получился достаточно объемным и все подробности, к сожалению, не влезли :(
Написано специально для Timeweb Cloud и читателей Пикабу. Больше интересных статей в нашем блоге на Хабре и телеграм-канале.
Облачные сервисы Timeweb Cloud — это реферальная ссылка, которая может помочь поддержать авторские проекты.