Введение


В некоторых случаях в результате некорректных действий при обновлении ПО на сервисных маршрутизаторах ESR может возникнуть проблемы с загрузкой ПО (firmware), вторичного загрузчика (u-boot) или даже первичного загрузчика (bdk). Именно для таких случаев будет необходимо подготовить и использовать загрузочную SD-карту по инструкции описанной в данной статье.

Ограничения

Данная инструкция актуальна для следующих моделей ESR:

  • ESR-3100
  • ESR-3200
  • ESR-3200L
  • ESR-3300

Необходимые файлы

Для подготовки загрузочной SD-карты потребуются следующие файлы в зависимости от модели маршрутизатора:

МодельHW-версия

Имя директории

<DIR>

Первичный загрузчик

<bdk-file>

Вторичный загрузчик

<uboot-file>

Основное ПО

<firmware-file>

ESR-3100всеesr3100esr3100-1.X.Y-buildZZZ.bdkesr3100-1.X.Y-buildZZZ.ubootesr3100-1.X.Y-buildZZZ.firmware
ESR-3200всеesr3200esr3200-1.X.Y-buildZZZ.bdkesr3200-1.X.Y-buildZZZ.ubootesr3200-1.X.Y-buildZZZ.firmware
ESR-3200Lвсеesr3200lesr3200-1.X.Y-buildZZZ.bdkesr3200-1.X.Y-buildZZZ.ubootesr3200-1.X.Y-buildZZZ.firmware
ESR-3300всеesr3300esr3300-1.X.Y-buildZZZ.bdkesr3300-1.X.Y-buildZZZ.ubootesr3300-1.X.Y-buildZZZ.firmware

В таблице Выше приведены шаблоны имён файлов, которые далее по тексту будут упоминаться как <bdk-file>, <uboot-file> и <firmware-file>.

Архив с актуальными файлами ПО и загрузчиков можно скачать на официальном сайте компании https://eltex.ru/ выбрав:

"Продукты" ---> "Сервисные маршрутизаторы" ---> <Выбрать необходимую модель> ---> Вкладка "Документы и файлы" ---> Столбец "Программное обеспечение"

Необходимое программное обеспечение на персональном компьютере (ПК)

Для подготовки загрузочной SD-карты по данной инструкции потребуется:

  • Операционная система Linux любой сборки
  • Терминальная программа (встроенный терминал, terminator или любая аналогичная)
  • Утилита для разметки диска в терминале: fdisk 
  • Утилита для форматирования разделов: mkfs.vfat из пакета dosfstools
  • Утилита для побитного копирования файлов: dd

Алгоритм создания образа:

1. Подключить SD-карту к ПК

Для этого можно использовать либо штатный разъём для SD-карт либо Card-reader подключаемый к USB-разъёму ПК.

2. Определить идентификатор подключенной SD-карты

Для выполнения данного шага необходимо в терминальной программе запустить утилиту fdisk с ключём "-l"

user@PC:~$ sudo fdisk -l
[sudo] пароль для user: password
......
Устр-во    Загрузочный начало  Конец Секторы Размер Идентификатор Тип
/dev/sda1                3072   8191    5120   2,5M             1 FAT12
/dev/sda2               32768 339967  307200   150M             b W95 FAT32

В примере выше, подключенная SD-карта определена как  /dev/sda

3. Создать первый раздел на SD-карте

3.1. В терминальной программе запустить утилиту fdisk в  качестве ключа используя идентификатор подключенной SD-карты. Проверить текущие разметку и разделы на SD-карте.

user@PC:~$ sudo fdisk /dev/sda

Добро пожаловать в fdisk (util-linux 2.39.3).
Изменения останутся только в памяти до тех пор, пока вы не решите записать их.
Будьте внимательны, используя команду write.

Команда (m для справки): p

Диск /dev/sda: 14,84 GiB, 15931539456 байт, 31116288 секторов
Disk model: MassStorageClass
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0xb4460960

Устр-во    Загрузочный начало  Конец Секторы Размер Идентификатор Тип
/dev/sda1                2048   4095    2048     1M            83 Linux
/dev/sda2                4096 516095  512000   250M             b W95 FAT32

Команда (m для справки): 

Вместо /dev/sda необходимо использовать идентификатора подключенной SD-карты определенный в п.2 данной инструкции.

3.2. Создать новую разметку диска типа DOS. Проверить текущую разметку на SD-карте.

Команда (m для справки): o
Created a new DOS (MBR) disklabel with disk identifier 0xb5b9ec41.

Команда (m для справки): p
Диск /dev/sda: 14,84 GiB, 15931539456 байт, 31116288 секторов
Disk model: MassStorageClass
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0xb5b9ec41

3.3. Создать первый раздел размеров в 8МБ без указания типа файловой системы. Проверить текущие разметку и разделы на SD-карте.

Команда (m для справки): n
Тип раздела
   p   основной (0 primary, 0 extended, 4 free)
   e   расширенный (контейнер для логических разделов)
Выберите (по умолчанию - p): p
Номер раздела (1-4, по умолчанию 1): 1
Первый сектор (2048-31116287, по умолчанию 2048): 3072
Last sector, +/-sectors or +/-size{K,M,G,T,P} (3072-31116287, по умолчанию 31116287): 8191

Создан новый раздел 1 с типом 'Linux' и размером 2,5 MiB.

Команда (m для справки): t
Выбранный раздел 1
Hex code or alias (type L to list all): 1
Тип раздела 'Linux' изменен на 'FAT12'.

Вводимые в данном разделе числовые значения ("Первый сектор" и "Последний сектор") должны чётко соответствовать значениям указанным в примере выше.

3.5. Сохранить изменения разметки SD-карты.

Команда (m для справки): w
Таблица разделов была изменена.
Вызывается ioctl() для перечитывания таблицы разделов.
Синхронизируются диски.

4. Отформатировать первый раздел носителя в FAT12

user@PC:~$ sudo mkfs.vfat -F12 /dev/sda1
mkfs.fat 4.2 (2021-01-31)

Вместо /dev/sda необходимо использовать идентификатора подключенной SD-карты определенный в п.2 данной инструкции.

5. Записать первичный и вторичный загрузчик в первый раздел SD-карты

Для ESR-3100:

user@PC:~$ sudo dd if=<bdk-file> of=/dev/sda && sync
8192+0 записей получено
8192+0 записей отправлено
4194304 байтов (4,2 MB, 4,0 MiB) скопировано, 1,01818 s, 4,1 MB/s

user@PC:~$sudo dd if=<uboot-file> of=/dev/sda bs=1K seek=4352 && sync
657+1 записей получено
657+1 записей отправлено
673105 байтов (673 kB, 657 KiB) скопировано, 0,000755073 s, 891 MB/s

Для ESR-3200/3200L/3300:

sudo dd if=<bdk-file> of=/dev/sda && sync
8192+0 записей получено
8192+0 записей отправлено
4194304 байтов (4,2 MB, 4,0 MiB) скопировано, 0,00523253 s, 802 MB/s

sudo dd if=<uboot-file> of=/dev/sda bs=1K seek=4096 && sync
2508+1 записей получено
2508+1 записей отправлено
1284478 байтов (1,3 MB, 1,2 MiB) скопировано, 0,001658 s, 775 MB/s

Вместо /dev/sda необходимо использовать идентификатора подключенной SD-карты определенный в п.2 данной инструкции.
Вместо переменной <bdk-file> и <uboot-file> необходимо использовать путь и имя файла актуального первичного загрузчика для той модели ESR, для которой создается данная загрузочная SD-карта. Имена файлов соответствующие переменным указаны в таблице в разделе Необходимые файлы.

6. Создать второй раздел на SD-карте

6.1. Создать второй раздел, размер 150 МБ, тип файловой системы - FAT32

user@PC:~$ sudo fdisk /dev/sda

Добро пожаловать в fdisk (util-linux 2.39.3).
Изменения останутся только в памяти до тех пор, пока вы не решите записать их.
Будьте внимательны, используя команду write.


Команда (m для справки): n
Тип раздела
   p   основной (1 primary, 0 extended, 3 free)
   e   расширенный (контейнер для логических разделов)
Выберите (по умолчанию - p): p
Номер раздела (2-4, по умолчанию 2): 2
Первый сектор (2048-31116287, по умолчанию 2048): 32768
Last sector, +/-sectors or +/-size{K,M,G,T,P} (32768-31116287, по умолчанию 31116287): +150M

Создан новый раздел 2 с типом 'Linux' и размером 150 MiB.

Команда (m для справки): t
Номер раздела (1,2, по умолчанию 2): 2
Hex code or alias (type L to list all): b

Тип раздела 'Linux' изменен на 'W95 FAT32'.

6.2. Проверить текущие разметку и разделы на SD-карте.

Команда (m для справки): p
Диск /dev/sda: 14,84 GiB, 15931539456 байт, 31116288 секторов
Disk model: MassStorageClass
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0xd4cfeee6

Устр-во    Загрузочный начало  Конец Секторы Размер Идентификатор Тип
/dev/sda1                3072   8191    5120   2,5M             1 FAT12
/dev/sda2               32768 339967  307200   150M             b W95 FAT32

Вводимые в данном разделе числовые значение "Первый сектор" должно чётко соответствовать значению указанному выше.
Второй раздел обязательно должен начинаться по смещению 32768. Первая область памяти 16MB на SD-карте не должна быть затронута при записи нового раздела.
Размер раздела может отличаться от 150МБ. Но меньше его делать не рекомендуется т.к. может не хватить места для записи необходимых файлов, а больше - также бессмысленно т.к. кроме ПО для одной модели ESR туда копировать не нужно.

6.3.  Сохранить изменения разметки SD-карты.

Команда (m для справки): w
Таблица разделов была изменена.
Вызывается ioctl() для перечитывания таблицы разделов.
Синхронизируются диски.

7. Отформатировать первый раздел носителя в FAT32

user@PC:~$ sudo mkfs.fat /dev/sda2
mkfs.fat 4.2 (2021-01-31)

Вместо /dev/sda необходимо использовать идентификатора подключенной SD-карты определенный в п.2 данной инструкции.

8. Создать во втором разделе директорию с названием модели ESR и скопировать в неё загрузчики и образ основного ПО

user@PC:~$ mkdir temp
user@PC:~$ sudo mount /dev/sda2 temp
user@PC:~$ sudo mkdir temp/<DIR>
user@PC:~$ sudo cp <bdk-file> temp/<DIR>/bdk.bin
user@PC:~$ sudo cp <uboot-file> temp/<DIR>/u-boot.bin
user@PC:~$ sudo cp <firmware-file> temp/<DIR>/firmware
user@PC:~$ sudo ls -lh temp/<DIR>
итого 112M
-rw-r--r-- 1 root root 4,0M дек  3 15:33 bdk.bin
-rw-r--r-- 1 root root 107M дек  3 15:33 firmware
-rw-r--r-- 1 root root 658K дек  3 15:33 uboot.bin

Вместо /dev/sda необходимо использовать идентификатора подключенной SD-карты определенный в п.2 данной инструкции.
Вместо переменной <DIR> необходимо использовать имя папки указанное в таблице Необходимые файлы в соответствии с моделью ESR, для которой создается данная загрузочная SD-карта.
Вместо переменной <bdk-file> необходимо использовать путь и имя файла актуального первичного загрузчика для той модели ESR, для которой создается данная загрузочная SD-карта. 
Вместо переменной <uboot-file> необходимо использовать путь и имя файла актуального вторичного загрузчика для той модели ESR, для которой создается данная загрузочная SD-карта. 
Вместо переменной <firmware-file> необходимо использовать путь и имя файла актуального ПО для той модели ESR, для которой создается данная загрузочная SD-карта.
Имена файлов соответствующие переменным указаны в таблице в разделе Необходимые файлы.

9. Отмонтировать второй раздел и удалим временную директорию

user@PC:~$ sudo umount temp
user@PC:~$ sudo rm -r temp

Получившуюся SD-карту можно использовать для загрузки сервисного маршрутизатора ESR и обновления/восстановления загрузчиков и основного ПО. 

Алгоритм копирования загрузочной SD-карты в файл

После создания загрузочной SD-карты есть возможность сохранить её образ в файл на ПК. Это может потребоваться для передачи образа другим сотрудникам или для быстрого разворачивания образа на SD-карту в случае повторения проблемы с загрузкой маршрутизатора.

1. Подключить SD-карту к ПК

Для этого можно использовать либо штатный разём для SD-карт либо Card-reader подключаемый к USB-разъёму ПК.

2. Определить идентификатор подключенной SD-карты

Для выполнения данного шага необходимо в терминальной программе запустить утилиту fdisk с ключём "-l"

user@PC:~$ sudo fdisk -l
[sudo] пароль для user: password
......
Устр-во    Загрузочный начало  Конец Секторы Размер Идентификатор Тип
/dev/sda1                3072   8191    5120   2,5M             1 FAT12
/dev/sda2               32768 339967  307200   150M             b W95 FAT32

В примере выше, подключенная SD-карта определена как  /dev/sda

3. Произвести побитное копирование содержимого всей SD-карты в файл на ПК

user@PC:~$ sudo dd if=/dev/sda of=<file-name>.iso bs=1M count=152 status=progress; sync
135266304 байтов (135 MB, 129 MiB) скопировано, 3 s, 45,0 MB/s
152+0 записей получено
152+0 записей отправлено
159383552 байтов (159 MB, 152 MiB) скопировано, 3,53561 s, 45,1 MB/s
user@PC:~$ 

Вместо /dev/sda необходимо использовать идентификатора подключенной SD-карты определенный в п.2 данной инструкции.

Вместо переменной <file-name> необходимо использовать путь и имя файла сохраняемого образа. В имени файла желательно отобразить всю ключевую информацию относящуюся к данному образу, такую как модель ESR'а и версия ПО. Например "recovery_esr200_1_20_4"

Необходимо учитывать, что в примере выше использованы параметры для сохранения образа SD-карты размер второго раздела которой не превышает 150МБ. 
Если второй раздел созданной SD-карты более 150МБ, необходимо в качестве аргумента ключа "count" указывать количество мегабайт во втором разделе и приплюсовать еще 2 блока по 1МБ (указано в качестве аргумента ключа "bs").

Алгоритм загрузки образа загрузочной SD-карты на носитель

1. Подключить SD-карту к ПК

Для этого можно использовать либо штатный разъём для SD-карт либо Card-reader подключаемый к USB-разъему ПК.

2. Определить идентификатор подключенной SD-карты

Для выполнения данного шага необходимо в терминальной программе запустить утилиту fdisk с ключём "-l"

user@PC:~$ sudo fdisk -l
[sudo] пароль для user: password
......
Устр-во    Загрузочный начало  Конец Секторы Размер Идентификатор Тип
/dev/sda1                3072   8191    5120   2,5M             1 FAT12
/dev/sda2               32768 339967  307200   150M             b W95 FAT32

В примере выше, подключенная SD-карта определена как  /dev/sda

3. Распаковать образ на подключенную SD-карту

user@PC:~$ sudo dd if=<file-name>.img of=/dev/sda status=progress; sync
103690752 bytes (104 MB, 99 MiB) copied, 18 s, 5,8 MB/s
208896+0 записей получено
208896+0 записей отправлено
106954752 bytes (107 MB, 102 MiB) copied, 22,4274 s, 4,8 MB/s
user@PC:~$

Вместо /dev/sda необходимо использовать идентификатора подключенной SD-карты определенный в п.2 данной инструкции.

Вместо переменной <file-name> необходимо использовать путь и имя файла образа (сохраненного ранее Вами или другим человеком). 


  • Нет меток