Сборка прошивки для роутеров на базе RT5350

Написано на основе сборки для HAME MPR-A2.

На самом деле под рукой у меня был клон MPR-A1, но с 32Мб оперативной памяти. Необходимость сборки прошивки возникла из желания заменить флеш-память объёмом 4Mb на более ёмкую. Естественно для этого нужно владеть паяльником.

Я пошел по простому пути:

  • Подключил UART: его пады разведены на плате, и в MPR-A1 даже подписаны ;-) UART нам понадобится, что бы получить доступ к Ralink uBoot;
  • Выпаял SPI FLASH;
  • Считал существующую прошивку с помощью Flashrom: flashrom -p serprog:dev=/dev/ttyACM0:4000000 -r backup_firmware.bin;
  • Эту же прошивку мы отправим в более ёмкую микросхему памяти (на 8Мб). Но прежде надо выровнять размер файла: cp backup_firmware.bin firmware8m.bin; truncate -s 8M firmware8m.bin. Это необходимо, потому-что flashrom отказываешься шить флеш, если её размер не совпадает с размером указанного файла;
  • Теперь можно прошить новую микросхему памяти: flashrom -p serprog:dev=/dev/ttyACM0:4000000 -c MX25L6445E -w firmware8m.bin;
  • И запаять её обратно в роутер.

Возможно потребуется обновить u-boot. Но в моём случае Ralink uBoot уже был свежий с поддеркой 32Mb SDRAM.

Анализ OpenWrt из trunk показал, что поддержка RT3550 и в частности роутеров HAME MPR-A1/MPR-A2 уже находится в мейнстриме, что упрощает сборку кастомной фирмвари.

Роутер MPR-A2 снабжен 32Mb SDRAM и 8Mb SPI FLASH, т.е. как раз мой доработанный клон.

Для сборки требуется выполнить следующие действия:

1. Получаем свежую версию исходников OpenWrt из репозитория

mkdir openwrt
cd openwrt
svn co svn://svn.openwrt.org/openwrt/trunk hame_Ax
cd hame_Ax

Или обновим старую

svn up

2. Стоит почистить каталог с временными файлами rm -rf openwrt/trunk/tmp, особенно если ранее уже производились сборки в этом дереве исходников.

3. Получаем дополнительные пакеты:

./scripts/feeds update -a && ./scripts/feeds install -a 

4. Применяем дефолтную конфигурацию:

make defconfig 

5. Запускаем конфигуратор

make menuconfig

6. Настраиваем сборку для нашего устройства

Target System: Ralink RT288x/RT3xxx
Subtarget: RT3x5x/RT5350 based boards
Target Profile: HAME MPR-A2

Если у вас MPR-A1 или MPR-A5 c 4Mb SPI FLASH то указываем в Target Profile HAME MPR-A1

Если flash-память была заменена на 16Mb, то необходимо указать в новый размер в .dts файле.

$ vi target/linux/ramips/dts/MPRA2.dts

и в районе 40й строки заменяем размер сегмента firmware c 0x7b0000 на 0xfb0000

partition@50000 {
  label = "firmware";
  reg = <0x50000 0xfb0000>;
};

7. Не выходя из конфигуратора указываем тип собираемого образа

Target Images: ramdisk
Target Images: squashfs

8. Теперь можно сохранить конфигурацию и выйти из конфигуратора.

9. Собираем образ

make -j 9

Здесь значение параметра -j - это количество ядер в вашем процессоре +1.

Первая сборка может занять достаточно долгое время, потому как кроме собственно образа будет ещё собран тулчейн.

10. После сборки в каталоге openwrt/trunk/bin/ramips/ появятся файлы с firmware

openwrt-ramips-rt305x-mpr-a2-initramfs-uImage.bin
openwrt-ramips-rt305x-mpr-a2-squashfs-sysupgrade.bin

11. Сперва прошиваем openwrt-ramips-rt305x-mpr-a2-initramfs-uImage.bin. Сделать это можно через Ralink uBoot, нажав в терминале UART 2 при загрузке.

12. Если обновление прошло успешно, то после перезагрузки роутер уже загрузит наш OpenWRT, но без доступа к SPI Flash как к диску.

13. Теперь проведём ещё одно обновление прошивки. Я выполнял команды всё так же через терминал UART, но можно воспользоваться ethernet портом и подключиться к роутеру телнетом: telnet 192.168.1.1.

Необходимо отправить прошивку openwrt-ramips-rt305x-mpr-a2-squashfs-sysupgrade.bin на роутер. Я положил ещё в каталог локального web-сервера и скачал на роутере:

cd /tmp
wget http://192.168.1.2/openwrt-ramips-rt305x-mpr-a2-squashfs-sysupgrade.bin
mtd write openwrt-ramips-rt305x-mpr-a2-squashfs-sysupgrade.bin firmware
reboot

14. Всё, теперь у нас есть роутер с простором для творчества:

BusyBox v1.22.1 (2014-09-13 00:43:31 MSK) built-in shell (ash)
Enter 'help' for a list of built-in commands.

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 CHAOS CALMER (Bleeding Edge, r42514)
 -----------------------------------------------------
  * 1 1/2 oz Gin            Shake with a glassful
  * 1/4 oz Triple Sec       of broken ice and pour
  * 3/4 oz Lime Juice       unstrained into a goblet.
  * 1 1/2 oz Orange Juice
  * 1 tsp. Grenadine Syrup
 -----------------------------------------------------
root@OpenWrt:/# 
root@OpenWrt:/# 
root@OpenWrt:/# df -h
Filesystem                Size      Used Available Use% Mounted on
rootfs                    4.9M    272.0K      4.6M   5% /
/dev/root                 2.0M      2.0M         0 100% /rom
tmpfs                    14.3M     56.0K     14.3M   0% /tmp
/dev/mtdblock5            4.9M    272.0K      4.6M   5% /overlay
overlayfs:/overlay        4.9M    272.0K      4.6M   5% /
tmpfs                   512.0K         0    512.0K   0% /dev
root@OpenWrt:/# free
             total         used         free       shared      buffers
Mem:         29356        15480        13876            0         1576
-/+ buffers:              13904        15452
Swap:            0            0            0

Поддежка 3G модемов и Yota

Ранее мы получили прошивку с минимальными возможностями, но от роутера хочется выполнения его прямого предназначения.

TODO