Перепрошивка Neo FreeRunner

Материал из PDA Prime_wiki

С чего начинается свободное устройство? Правильно - с прошивки! Одна из основных особенностей Neo FreeRunner в том что все программное обеспечение свободное и можно спокойно скачать исходные коды с сайта разработчиков и собрать прошивку под себя как захочется. Изменению в программной части этого устройства поддается все!

Что потребуется для прошивки:

Если будет ставится новая прошивка то необходим образ прошивки (http://openmoko.com/download.html) который состоит из:

  • jffs2 образа (содержащий саму файловую систему прошивки)
  • Ядра uImage.bin
  • При желании новый файл заставки splash.gz
  • При желании новый загрузчик u-boot.bin (внимание! загрузчик обновлять очень нежелательно, при неудаче могут возникнуть проблемы с восстановлением). Если версия загрузчика на устройстве 1.3.2-moko12 то смысла обновлять нету.

Для обновления загрузчика в NOR памяти также понадобится плата отладки (DBoard) которая поставляется отдельно от устройства. В большинстве случаев NOR память вообще лучше не трогать если вы точно не уверены что в делаете.

Содержание

Загрузчик

В устройстве загрузчик прошит в 2 разные области памяти NAND и NOR. Загрузчик из NAND памяти используется для обычной загрузки телефона. Он легко может быть прошит через USB провод. Загрузчик из NOR памяти обычно используется для восстановления телефона. Он не может быть изменен без DBoard.

Для прошивке устройство необходимо подключить к компьютеру и загрузить один из загрузчиков. При прошивки всех компонентов кроме самого загрузчика нет разницы из какой области его загружать. Загрузчик в NAND памяти прошивается только если он загружен из NOR памяти.

Для загрузки из NAND памяти необходимо:

  1. Зажать кнопку включения.
  2. Через пару секунд не отпуская кнопки зажать и удерживать AUX (вторая кнопка на телефоне помимо включения) пока не появится меню загрузчика.

Для загрузки из NOR памяти необходимо:

  1. Зажать кнопку AUX.
  2. Держа AUX зажать кнопку включения.
  3. Через 5-7 секунд отпустить кнопку AUX.
  4. Отпустить кнопку включения только когда появится меню загрузчика.

В обоих случаях меню будет почти одинаковым. Для перемещения между пунктами используется кнопка AUX. Для выбора пункта используется кнопка включения.

Стандартный список меню:

  • Boot - обычная загрузка из внутренней памяти.
  • Boot from MicroSD - загрузка с карточки
  • Set console to USB - поднимает консоль через которую можно настроить загрузчик.
  • Set console to Serial - тоже самое но только через DBoard
  • Reset - перезагрузка
  • Power off - выключение

Можно изменить или добавить пункты меню (как раз через консоль поднимаемую загрузчиком). Например таким образом через загрузчик можно передать параметры ядру.

Создание резервной копии прошивки

Лучше всегда иметь под рукой рабочую копию родной прошивки для восстановления. Скачать прошивку из телефона можно используя DFU-util. Для этого необходимо:

  1. Подключить телефон к компьютеру
  2. Войти в меню загрузчика
  3. В зависимости от того какой раздел памяти требуется сохранить выполнить:
dfu-util -a kernel -R -U good-kernel.bin для сохранения ядра
dfu-util -a rootfs -R -U good-rootfs.jffs2 для сохранения файловой системы
dfu-util -a splash -R -U good-splash.bin для сохранения картинки загрузки
dfu-util -a u-boot -R -U good-u-boot.bin для сохранения загрузчика
dfu-util -a u-boot_env -R -U good-u-boot_env.bin для сохранения переменных окружения загрузчика

Примечание для пользователей GNU/Linux: команды необходимо выполнять от пользователя root или используя sudo. Сам лично на Windows прошивать телефон не пробовал.

У меня в системе оказалось не одно dfu устройство. Поэтому мне пришлось еще указывать и само устройство. Посмотреть список устройств можно командой:

dfu-util -l

Вот пример моего списка устройств:

dfu-util - (C) 2007 by OpenMoko Inc.
This program is Free Software and has ABSOLUTELY NO WARRANTY

Found Runtime: [0x0b05:0x1712] devnum=2, cfg=0, intf=2, alt=0, name="UNDEFINED"
Found Runtime: [0x1d50:0x5119] devnum=6, cfg=0, intf=2, alt=0, name="USB Device Firmware Upgrade" 

Из списка можно догадаться что Neo FreeRunner это второе устройства. Чтобы его использовать просто необходимо добавить --device 0x1d50:0x5119 в команду (где цифры берутся из списка из квадратных скобок). Например:

dfu-util --device 0x1d50:0x5119 -a kernel -R -U good-kernel.bin

В случае удачи результат будет примерно такой:

dfu-util - (C) 2007 by Openmoko Inc.
This program is Free Software and has ABSOLUTELY NO WARRANTY
Opening USB Device 0x0000:0x0000...
Claiming USB DFU Runtime Interface...
Determining device status: state = appIDLE, status = 0
Device really in Runtime Mode, send DFU detach request...
Resetting USB...
Opening USB Device...
Found Runtime: [0x1d50:0x5119] devnum=12, cfg=0, intf=0, alt=3, name="kernel"
Claiming USB DFU Interface...
Setting Alternate Setting ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
Transfer Size = 0x1000
Resetting USB to switch back to runtime mode

А на экране самого устройства:

DFU: Switching to DFU Mode
DEVICE_CONFIGURED: 1
Starting DFU Upload of partition 'kernel'

А в случае неудачи:

dfu-util - (C) 2007 by Openmoko Inc.
This program is Free Software and has ABSOLUTELY NO WARRANTY
Opening USB Device 0x0000:0x0000...
Claiming USB DFU Runtime Interface... 
Determining device status: state = appIDLE, status = 0
Device really in Runtime Mode, send DFU detach request...
Resetting USB... 
Opening USB Device...
Found Runtime: [0x1d50:0x5119] devnum=20, cfg=0, intf=0, alt=6, name="rootfs"
Claiming USB DFU Interface...
Setting Alternate Setting ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
Transfer Size = 0x1000
dfu_upload error -110

И будет видна ошибка через demsg (в GNU/Linux):

usb 5-2: usbfs: USBDEVFS_CONTROL failed cmd dfu-util rqt 161 rq 2 len 4096 ret -110

Лично у меня не получилось сохранить jffs2 раздел (вылетало с ошибкой). С остальным проблем не было.

Самое главное сохранить переменные загрузчика. Они еще могут понадобится в дальнейшем например для настройки вариантов загрузки.

Прошивка

Прошивка производится абсолютно также как и бекап за исключением того что необходимо указывать -D вместо -U в команде, например:

dfu-util -a kernel -R -D new-kernel.bin

Вместо new-kernel.bin указывается путь до нужного файла. Аналогично прошиваются и другие области.

Установка системы на карточку

Для начала установки необходимо подготовить карточку. На ней должно быть 2 раздела:

  1. Fat 16 (32)
  2. Ext2

Первой раздел карточки используется для загрузки ядра. На втором собственно и будет находится сама система. Образ ядра необходимо скопировать в корень первого раздела. Файл ядра должен называться uImage.bin (соблюдая регистр) (для некоторых старых версий загрузчика оно должно называться просто uimage ). В корень второго раздела необходимо распаковать jffs2 образ файловой системы. Такой образ например можно смонтировать так:

modprobe jffs2 
modprobe mtdram 
modprobe mtdchar 
modprobe mtdblock 

dd if=image-jffs2 of=/dev/mtd0 
mount -t jffs2 /dev/mtdblock0 /mnt

(Для этого ядро должно быть собрано с поддержкой mtd устройств, модулями mtdram mtdchar mtdblock и файловой системой jffs2)

После монтирования можно просто скопировать файлы на карточку.

Для загрузки с карточки нужно в загрузчике выбрать пункт Boot from MicroSD.

Работа с переменными окружения загрузчика

Чтобы начать редактировать переменные окружения необходимо:

  1. Подключить устройство к компьютеру через USB
  2. Войти в меню загрузчика
  3. Выбрать в меню Set console to USB

После этого можно подключаться к телефону. В GNU/Linux для этого можно использовать minicom для подключения к устройству /dev/ttyACM0 При помощи команды help можно посмотреть все доступные команды. Из полезного командой printenv можно посмотреть все переменные окружения. Командой setenv можно редактировать и создавать переменные окружения. По окончанию все изменения нужно сохранить командой saveenv.

Это незавершённая статья. Вы поможете проекту, исправив и дополнив её.