Статья Osmocom-bb: flashing. Перепрошиваем моторолу.

Приветствую, коллеги. Те, кто хоть раз игрался с osmocom-телефонами, знают, что стандартно прошивка загружается в RAM и пропадает после перезагрузки/выключения. Прошивка в основную память или "Flashing" позволяет использовать программу и после перезагрузки/выключения, что очень удобно для работы с программами, не использующими компьютер (наример RSSI или EMI). Мало того, можно прошить сразу несколько программ и переключаться между ними без последующих действий на компьютере.

Если же вы не понимаете, о чём идёт речь, то советую прочитать прошлую часть.

IMG_20180617_015724.jpg


Однако не смотря на все плюсы, при прошивке всегда что-то может пойти не так, и телефон превратится в тыкву кирпич (один по невнемательности я уже окирпичил). Если вы собираетесь делать с ним ещё что-либо, то советую хорошо подумать, прежде чем бежать делать перепрошивку.

Все действия будут проводиться на motorola c118. Для телефонов на базе calypso e88 (MotorolaC123/C121/C118) и calypso e87 (MotorolaC115/C117) всё делается одинаково.
Телефон прошивается в три этапа:
  • загрузчик (Compal loader)
  • OSMOCOM menu (загружает приложения из flash в ram)
  • приложение
Без загрузчика телефон превратится в кирпич.

Подготовка

Скачаем osmocom-menu с официального git-репозитория:
Код:
git clone git://git.osmocom.org/osmocom-bb -b jolly/menu osmocombb-menu
cd osmocombb-menu
идём в файл src/target/firmware/Makefile и раскомментируем две строки:
Код:
CFLAGS += -DCONFIG_FLASH_WRITE
CFLAGS += -DCONFIG_FLASH_WRITE_LOADER
компилируем командой make

Установка
Перед прошивкой проверьте надёжность вашего кабеля и зарядите телефон.
Выключаем телефон, подключаемся к компьютеру через usb-ttl
Код:
cd src
host/osmocon/osmocon -p /dev/ttyUSB0 -m c123xor target/firmware/board/compal_e88/loader.compalram.bin
Коротко жмём на кнопку включения, начнётся загрузка Compal loader-а в RAM телефона.
Код:
Received PROMPT1 from phone, responding with CMD
read_file(target/firmware/board/compal_e88/loader.compalram.bin): file_size=28044, hdr_len=4, dnload_len=28051
Received PROMPT2 from phone, starting download
handle_write(): 4096 bytes (4096/28051)
handle_write(): 4096 bytes (8192/28051)
handle_write(): 4096 bytes (12288/28051)
handle_write(): 4096 bytes (16384/28051)
handle_write(): 4096 bytes (20480/28051)
handle_write(): 4096 bytes (24576/28051)
handle_write(): 3475 bytes (28051/28051)
handle_write(): finished
Received DOWNLOAD ACK from phone, your code is running now!
Received DOWNLOAD ACK from phone, your code is running now!
battery_compal_e88_init: starting up

OsmocomBB Loader (revision osmocon_v0.0.0-1748-g46188c72)
======================================================================
Running on compal_e88 in environment compalram
IMG_20180617_143155.jpg

Прошиваем загрузчик + osmocom-menu
Память на телефоне разбита на "страницы" по 64 килобайта примерно так:
  • 0x000000-0x00ffff: Flash page 0
  • 0x010000-0x01ffff: Flash page 1
  • 0x020000-0x02ffff: Flash page 2
  • ... more Flash pages ...
  • 0x800000-0x83ffff: Ram
Compal loader займёт первые 8191байт, OSMOCOM menu оставшиеся 57343 байт нулевой страницы далее от 0x010000 (начало первой страницы) идут приложения
  • 0x000000-0x001fff: Compal loader
  • 0x002000-0x00ffff: OSMOCOM menu
  • 0x010000-........: OSMOCOM application and storage
OSMOCOM menu не может быть прошит без затирания оригинального загрузчика Compal loader, потому что оба расположены на одной и той же странице флэш-памяти. Первая вещь, которую нужно сделать, это сохранить оригинальный загрузчик.
Код:
cd src
host/osmocon/osmoload memdump 0x000000 0x2000 compal_loader.bin

Что бы проверить, что прошивка флеш-памяти проходит нормально, мы загрузим Compal и OSMOCOM Menu в неправильную локацию памяти. Если прошивка не удастся из-за какой-либо ошибки, то на телефоне всё ещё останется оригинальный Compal loader, и motorola не превратится в кирпич.

Затираем страницу 0x010000 и прошиваем только что сохранённый compal_loader.bin и OSMOCOM menu:
Код:
host/osmocon/osmoload funlock 0x010000 0x10000
host/osmocon/osmoload ferase 0x010000 0x10000
host/osmocon/osmoload fprogram 0 0x010000 compal_loader.bin
host/osmocon/osmoload fprogram 0 0x012000 target/firmware/board/compal_e88/menu.e88loader.bin
Если в выводе нету ошибок, то можно приступать к прошивке загрузчика на нужное место 0x000000
Код:
host/osmocon/osmoload funlock 0x000000 0x10000    # разблокировка первой страницы
host/osmocon/osmoload ferase 0x000000 0x10000    # очистка
host/osmocon/osmoload fprogram 0 0x000000 compal_loader.bin    # прошивка загрузчика на место 0x000000
host/osmocon/osmoload fprogram 0 0x002000 target/firmware/board/compal_e88/menu.e88loader.bin # прошивка меню
меню прошивется на ту же страницу флеш-памяти, что и загрузчик, но с отступом в 8192 байт (0x002000) вперёд.

Подготавливаем приложение

OSMOCOM menu ищет приложения по заголовкам, который делается так:
echo "highram:RSSI" >temp
В этом случае я сделал заголовок для RSSI, теперь надо добавить к нему само приложение
cat target/firmware/board/compal_e88/rssi.highram.bin >>temp
Прошивка приложения возможна только в том случае, если количество байт в файле temp чётное. Если это не так, то нужо добавить ещё один байт в конец.

1529235736794.png


Теперь приложение готово для прошивки во флеш-память.
Прошиваем приложение

Нужно определить, сколько места требуется приложению. В случае с RSSI оно занимает пространство между 64 и 128 килобайт, следовательно ему нужно 2 страницы флеш-памяти для прошивки.
Код:
host/osmocon/osmoload funlock 0x010000 0x20000    # Разблокируем первую и вторую страницы
host/osmocon/osmoload ferase 0x010000 0x20000    # Очищаем
host/osmocon/osmoload fprogram 0 0x010000 temp    # Прошиваем в начало первой страницы (0x010000)

Приложение прошилось на первую и вторую страницу. В случае прошивки второго приложения, ему нужно будет выделять место на третей странице или выше, что бы оно не задело предыдущее.

Для примера: для приложения EMI так же нужно 2 страницы флеш-памяти:
Код:
host/osmocon/osmoload funlock 0x030000 0x40000    # Разблокируем первую и вторую страницы
host/osmocon/osmoload ferase 0x030000 0x40000    # Очищаем
host/osmocon/osmoload fprogram 0 0x030000 temp    # Прошиваем в начало первой страницы (0x010000)

Тестируем

Выключаем телефон, отключаем от компьютера и зажимаем на 1.5 - 2 секунды. Появится картинка загрузчика, затем на экран будет выведено меню с выбором приложений. Не стоит зажимать кнопку слишком долго при включении, в таком случае (во всяком случае у меня) телефон выключается после отжатия кнопки.

На этом всё. Желаю удачи и не окирпичить телефон.
 

swap3r

Green Team
06.11.2016
71
59
BIT
0
Dr.Lafa, спасибо за статью.
Вопрос, а что это дает кроме чисто академического интереса? Если использование моторолы совместно с осмокомом и опеннбтсом я хоть как-то понимаю (снифф, своя бс, стресс тестинг), то суть действий в этом топике мне непонятны. Спасибо.
 

Dr.Lafa

Green Team
30.12.2016
507
1 050
BIT
0
Dr.Lafa, спасибо за статью.
Вопрос, а что это дает кроме чисто академического интереса? Если использование моторолы совместно с осмокомом и опеннбтсом я хоть как-то понимаю (снифф, своя бс, стресс тестинг), то суть действий в этом топике мне непонятны. Спасибо.
Есть пара приложений (RSSI, EMI, и, кажется, были ещё), которые используются без компьютера. Прошивка даёт возможность загрузить их все и переключаться между ними без компьютера.
 
  • Нравится
Реакции: Vertigo и Глюк

swap3r

Green Team
06.11.2016
71
59
BIT
0
Есть пара приложений (RSSI, EMI, и, кажется, были ещё), которые используются без компьютера. Прошивка даёт возможность загрузить их все и переключаться между ними без компьютера.
спасибо, теперь вспомнил и частично понял, что оно такое. К сожалению, как по мне, это больше, как академическая фича, но все равно интересно.
Спасибо за популяризацию темы осмокома в рунете.
 

Russian_Bird

Green Team
29.10.2017
15
10
BIT
0
Юзаю cp2102, при прошивке выдает Received FTMTOOL from phone, ramloader has aborted. джек уже и так, и сяк паял. Что делать ? пытался и c123xor и c123, не помогло. Что делать в данном случае ?
 
A

avw

Можно ли прошивать другими прошивками (напр. layer, trx, и т.д.), чтобы каждый раз не заливать одно и то же по новому?
 

Dr.Lafa

Green Team
30.12.2016
507
1 050
BIT
0
Можно ли прошивать другими прошивками (напр. layer, trx, и т.д.), чтобы каждый раз не заливать одно и то же по новому?
Можно, но для соединения с компьютером прийдётся так же каждый раз загружать всё в RAM
 

Fox77

New member
29.03.2019
2
0
BIT
0
Доброго времени суток!
Делаю по этому рецепту. Столкнулся с проблемой.

host/osmocon/osmoload fprogram 0 0x010000 compal_loader.bin
вылазит ошибка
bad crc 9bf1 (not 78dc) at offset 0x00000000
status 822083592, aborting

В инете нашел описание проблемы - ошибка в модуле Osmoload.c
Вроде как уже давно известна и пофиксена, тем неменее у меня не идёт.
Кто знает, подскажите.
 
В

Виктор2016

Есть пара приложений (RSSI, EMI, и, кажется, были ещё), которые используются без компьютера. Прошивка даёт возможность загрузить их все и переключаться между ними без компьютера.
А вы не пробовали прошить не RSSI и EMI, а прошить именно загрузчик с которым трубка работает с любым из приложений, типа мобиле или СССН? что бы не с компа заливать его в RAM а с внутренней памяти. У меня часто при загрузке с компа загрузка останавливается на finished и усё, надо отключать от питания телефон и по новой
 
В

Виктор2016

А вы не пробовали прошить не RSSI и EMI, а прошить именно загрузчик с которым трубка работает с любым из приложений, типа мобиле или СССН? что бы не с компа заливать его в RAM а с внутренней памяти. У меня часто при загрузке с компа загрузка останавливается на finished и усё, надо отключать от питания телефон и по новой
первая часть вопроса закрыта, действительно без загрузки в RAM с компа не обойтись, а вот с не полной загрузкой загрузчика - finished не пробовали бороться?
 

lenta6661

New member
02.03.2019
2
0
BIT
10
Всем привет.
Всё отлично поставил на Ubuntu 14 с моторолкой с115. Потратил неделю и два TTL адаптера - но результат радует.
Пытался поставить world - не в какую не хочет ставить.
Но Установил layer1 без перебоя.
Такой вопрос. Что делать следующим шагом да бы не снести загрузчик?
Делать по инструкции выше не боясь словить камня?
Просто я боюсь отсоединить даже,терминал не закрываю.
 

hongpingguo

New member
03.07.2020
3
0
BIT
0
У меня motorola c113 прошивается из под Linux Mint 20 x64 по FTDI - всё ок. Но, с прошитым под другие скоростя CP210x процесс прошивки зависает после фразы "handle_write(): finished", не появляется фраза "got 1 bytes from modem, data looks like: 1b ." Кто-нибудь сталкивался с подобной проблемой? В какую сторону смотреть? При пересборке osmocombb ставил "#define I_HAVE_A_CP210x".
$ osmocon -m c123 -p /dev/ttyUSB0 hello_world.compalram.bin
got 1 bytes from modem, data looks like: 04 .
got 1 bytes from modem, data looks like: f0 .
got 1 bytes from modem, data looks like: 1b .
got 4 bytes from modem, data looks like: f6 02 00 41 ...A
got 1 bytes from modem, data looks like: 01 .
got 1 bytes from modem, data looks like: 40 @
Received PROMPT1 from phone, responding with CMD
read_file(hello_world.compalram.bin): file_size=25844, hdr_len=4, dnload_len=25851
got 1 bytes from modem, data looks like: 1b .
got 1 bytes from modem, data looks like: f6 .
got 1 bytes from modem, data looks like: 02 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 41 A
got 1 bytes from modem, data looks like: 02 .
got 1 bytes from modem, data looks like: 43 C
Received PROMPT2 from phone, starting download
handle_write(): 4096 bytes (4096/25851)
handle_write(): 4096 bytes (8192/25851)
handle_write(): 4096 bytes (12288/25851)
handle_write(): 4096 bytes (16384/25851)
handle_write(): 4096 bytes (20480/25851)
handle_write(): 4096 bytes (24576/25851)
handle_write(): 1275 bytes (25851/25851)
handle_write(): finished
 

hongpingguo

New member
03.07.2020
3
0
BIT
0
У меня motorola c113 прошивается из под Linux Mint 20 x64 по FTDI - всё ок. Но, с прошитым под другие скоростя CP210x процесс прошивки зависает после фразы "handle_write(): finished", не появляется фраза "got 1 bytes from modem, data looks like: 1b ." Кто-нибудь сталкивался с подобной проблемой? В какую сторону смотреть? При пересборке osmocombb ставил "#define I_HAVE_A_CP210x".
$ osmocon -m c123 -p /dev/ttyUSB0 hello_world.compalram.bin
got 1 bytes from modem, data looks like: 04 .
got 1 bytes from modem, data looks like: f0 .
got 1 bytes from modem, data looks like: 1b .
got 4 bytes from modem, data looks like: f6 02 00 41 ...A
got 1 bytes from modem, data looks like: 01 .
got 1 bytes from modem, data looks like: 40 @
Received PROMPT1 from phone, responding with CMD
read_file(hello_world.compalram.bin): file_size=25844, hdr_len=4, dnload_len=25851
got 1 bytes from modem, data looks like: 1b .
got 1 bytes from modem, data looks like: f6 .
got 1 bytes from modem, data looks like: 02 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 41 A
got 1 bytes from modem, data looks like: 02 .
got 1 bytes from modem, data looks like: 43 C
Received PROMPT2 from phone, starting download
handle_write(): 4096 bytes (4096/25851)
handle_write(): 4096 bytes (8192/25851)
handle_write(): 4096 bytes (12288/25851)
handle_write(): 4096 bytes (16384/25851)
handle_write(): 4096 bytes (20480/25851)
handle_write(): 4096 bytes (24576/25851)
handle_write(): 1275 bytes (25851/25851)
handle_write(): finished
Ага, для cp2102 надо указывать ключ -m c123xor
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!