Подготовлено на основе документа: Руководство оператора MAG-200 (стр. 12, 19, 38)
На примере: OS - Ubuntu 12.04 server, STB MAG-200/250
Для STB MAG-250 необходимо использовать «option space Infomir»
Приставка посылает dhcp-запрос со следующими параметрами:
vendor_class_id - " TeleTecMAG200boot "dhcp_client_id - "TeleTecMAG200-XX:XX:XX:XX:XX:XX", где XX:XX:XX:XX:XX:XX – MAC адрес устройстваvendor_spec содержаться следующие опцииVernum – строка формата "XXX" с ведущими нулями datetime - __DATE__" - "__TIME__
Получив dhcp-ответ начальный загрузчик анализирует наличие в нем опций TeleTec.mcip и TeleTec.mcport. Если они присутствуют, то начальный загрузчика подключается к мультикаст группе указанной этими параметрами и принимает образ из этой группы. Если эти опции не указаны, то выполняется загрузка образа по протоколу tftp c сервера next-server расположенного по пути filename("mag200/Bootstrap").
Далее у загруженного образа проверяется цифровая подпись с использованием установленного ключа оператора. После проверки выполняется запуск образа, при этом в качестве корневой файловой системы указывается nfs раздел расположенный по адресу указанному в опции “root-path” (в начале этого параметра должен быть указан IP сервера и через двоеточие расположение каталога, который будет монтироваться в качестве корня файловой системы). Bootstrap опциию “rootp-path” игнорирует.
Содержимое файла dhcpd.conf:
class "MAG200_boot" {
match if (( option vendor-class-identifier="TeleTecMAG200boot"));
vendor-option-space TeleTec;
option TeleTec.mcip 224.10.0.50;
option TeleTec.mcport 9000;
}
class "MAG200_boot" {
match if (( option vendor-class-identifier="TeleTecMAG200boot"));
filename "mag200/Bootstrap";
next-server 192.168.1.2;
}
• для загрузки ядра по протоколу tftp с корневой файловой системой, подключенной через nfs:
class "MAG200_boot" {
match if (( option vendor-class-identifier="TeleTecMAG200boot"));
filename "mag200/uImage";
next-server 192.168.1.2;
option root-path "192.168.1.2:/srv/mag200/rootfs";
}
Последний вариант наиболее часто используется интеграторами для отладки ПО, операторами для проверки образа перед формированием образа для прошивки в приставку.
Файл /etc/exports должен содержать строку: /srv/mag200 *(rw,no_root_squash,sync)
После включения приставки на экран выводится логотип, если он установлен, а на индикаторе передней панели отображается “200”. Далее начальный загрузчик выводит на экран телевизора и индикатор на передней панели информационные сообщения об этапах загрузки.
| Этапы загрузки основного ПО | Передняя панель | Сообщения на экране телевизора |
|---|---|---|
| Кабель Ethernet не подключен | Erln | «No link detected!!!» |
| Посылка запроса dhcp | dHCP | “DHCP” |
| Посылка повторного запроса dhcp (с номером попытки) | dHCP | «DHCP Retry#» |
| Запрос dhcp закончился неудачно | Er10 | «DHCP Error» |
| Загрузка ядра с раздела mtd4 | nand | «Load from nand» |
| Ошибка загрузки ядра с раздела mtd4 | Er20 | «Error loading image from nand» |
| Содержимое раздела mtd4 некоректно | Er20 | «Active partition not valid» |
| Загрузка ядра/bootstrap из мультикаст группы | load | «Multicast load» |
| Загрузка ядра/bootstrap по протоколу tftp | tftp | «Tftp load» |
| Проверка цифровой подписи | chec | «Checking image» |
| Неверный формат образа | Er30 | «Wrong image» |
| Цифровая подпись не корректна | Er30 | «Wrong digital signature» |
| Запуск ядра/bootstrap-а на выполнение | GO__ | «Loading …» |
Bootstrap позволяет оператору обновить основное ПО расположенное в приставке и выполнить необходимые настройки. Начальный загрузчик получает, проверяет и запускает образ на выполнение. Этим образом может быть bootstrap, подписанный установленным в приставку ключом оператора или общедоступным ключем (stb_pubbin.key).
Стандартный bootstrap 1 состоит из ядра Linux и корневой файловой системы RAM. После запуска bootstrap-а запускается dhcp-клиент. В dhcp-запросах, которого установлена опция vendor-class-identifier в значение «TeleTecMAG200boot». Если в dhcp-ответе получены параметры TeleTec.mcip_img и TeleTec.mcport_img, то выполняются попытки загрузить подготовленный оператором образ из мультикаст группы TeleTec.mcip_img:TeleTec.mcport_img. Параметры TeleTec.ip_log:TeleTec.ip_port опеределяют адрес куда bootstrap попытается послать результаты своей работы. Получить этот отчет, можно, например, запустив на сервере с IP - TeleTec.ip_log, команду: nc –l ip_port. Bootstrap выполняет проверку цифровой подписи полученного образа с использованием ключа оператора, если он установлен, иначе проверка выполняется общедоступным ключом. С каждым образом для обновления связаны следующие параметры:
“Image_Date”;“Image_Version”;“Image_Desc”.
Далее проверяется номер версии полученного образа. Если номер образа меньше чем номер уже прошитого образа, то обновления не происходит. Если номера равны то обновление происходит, только если в меню начального загрузчика в пункте “Image Info”/“Forced” предварительно установить значение “Yes”. Если номер образа больше, то выполняется обновление образа. После успешного обновления, устанавливаются переменные начального загрузчика “Image_Version”, “Image_Date” и “Image_Desc”, устанавливается режим загрузки “NAND” и выполняется перезапуск приставки. Переменные начального загрузчика “Image_Version”, “Image_Date” и “Image_Desc” можно посмотреть в меню начального загрузчика “Image Info”,а так же с помощью утилиты fw_printenv. Процесс обновления сопровождается выводом на экран телевизора соответствующих сообщений.
Содержимое секции «_upgrade» файла dhcpd.conf:
class "MAG200_upgrade" {
match if (( option vendor-class-identifier="TeleTecMAG200upgrade"));
vendor-option-space TeleTec;
option TeleTec.mcip 224.10.0.50;
option TeleTec.mcport 9000;
option TeleTec.mcip_img 224.10.0.51;
option TeleTec.mcport_img 9001;
option TeleTec.ip_log 192.168.1.2;
option TeleTec.port_log 10000;
}
Для конфигурирования системы обновления образов на приставке с использованием карусельной мультикаст группы необходимо выполнить следующие шаги:
bootstrap и образа для обновления в мультикаст группу;
Приставка при работе по протоколу dhcp заполняет информационный элемент vendor-class-identifier. Анализ его значения позволяет установить некоторые параметры и настройки приставки, они передаются в ответе dhcp-сервера и влияют на варианты загрузки и работы приставки.
В файле dhcpd.conf приведен пример конфигурирования dhcp-сервера.
В разделе Описание vendor-specific опций описаны опции, которые передаются в информационном элементе vendor-specific.
С помощью утилиты mcsend можно огранизовать карусельные мультикаст группы. В файле mcast.conf содержится пример конфигурации, в которой организуется две мультикаст группы. В первой 224.10.0.50:9000 - вещается Bootstrap, во второй 224.10.0.51:9001 - вешается imageupdate.
mcsend входи в состав операторских утилит
Запуск утилиты с подготовленным конфигурационным файлом mcast.conf выполняется следующей командой:
./mcsend -c ./mcast.conf
Процесс обновления программного обеспечения в приставке с использованием карусельных мультикаст групп состоит из следующих этапов:
vendor-class-identifier="TeleTecMAG200boot" и получает ответ от dhcp-сервера с TeleTec.mcip и TeleTec.mcport;TeleTec.mcip:TeleTec.mcport (в этом примере 224.10.0.50:9000); vendor-class-identifier=«TeleTecMAG200upgrade» и получает ответ от dhcp-сервера с установленными TeleTec.mcip_img и TeleTec.mcport_img; TeleTec.mcip_img:TeleTec.mcport_img (в этом примере 224.10.0.51:9001) - это файл imageupdate; Для обновления программного обеспечения с использованием «фиксированных» карусельных мулькаст групп необходимо с помощью утилиты mcsend (например) организовать карусельные мультикаст группы. При этом приставка ожидает, что в группе 224.50.0.50:9000 - вещается Bootstrap, во второй 224.50.0.51:9001 - вешается imageupdate. Адреса групп для этой процедуры фиксированы. В файле mcast_mcman.conf содержится пример конфигурации, в которой организуется две этих мультикаст группы.
Процесс обновления программного обеспечения в приставке с использованием «фиксированных» карусельных мультикаст групп состоит из следующих этапов:
Использую данный процесс можно заменить основное ПО на приставке не используя протоколы dhcp и tftp, достаточно только организовать вещание необходимых файлов и инициировать смену основного ПО.
| Название | Код | Тип | Описание | Кем используется |
|---|---|---|---|---|
| mcip | 3 | ip-address | IP адрес мультикаст группы для приема ядра или Bootstrap-а. | Boolloader |
| mcport | 4 | integer 16 | Порт мультикаст группы для приема ядра или Bootstrap-а. | Boolloader |
| oppubfile | 9 | text | Содержит имя файла, в котором расположен подготовленный ключ оператора для установку в приставку | Bootstrap |
| mcip_img | 10 | ip-address | IP адрес мультикаст группы для приема imageupdate. | Bootstrap |
| mcport_img | 11 | integer 16 | Порт мультикаст группы для приема imageupdate. | Bootstrap |
| mcip_mng | 12 | ip-address | IP адрес мультикаст группы для приема команд. | Основное ПО |
| mcport_mng | 13 | integer 16 | Порт мультикаст группы для приема команд. | Основное ПО |
| ip_log | 14 | ip-address | IP адрес сервера на который Bootstrap может послать отчеты. | Bootstrap |
| port_log | 15 | integer 16 | Порт на сервере на который Bootstrap может послать отчеты. | Bootstrap |
| logo_x | 16 | integer 16 | Координата по оси x, левого верхнего угла логотипа | Boolloader |
| logo_y | 17 | integer 16 | Координата по оси y, левого верхнего угла логотипа | Boolloader |
| bg_color | 18 | integer 32 | Цвет фона в формате “XRGB” для отображения информационных сообщений при загрузке | Boolloader |
| fg_color | 19 | integer 32 | Цвет шрифта в формате “XRGB” для отображения информационных сообщений при загрузке | Boolloader |
| VerNumber | 20 | text | Версия начального загрузчика три символа с ведущими нулями. Пример использования: substring( option vendor-encapsulated-options,2,3)=«002» | Dhcp-сервер |
| DateTime | 21 | text | Дата и время создания начального загрузчика. | Dhcp-сервер |
| portal_dhcp | 22 | text | Портал, на который выполняется переход, если не установлены переменные “portal1” и “portal2” и переменная ”use_portal_dhcp” не установлена или имеет значение “true”. Если переменная ”use_portal_dhcp” установлена в ”false”, то это значение этой переменной не используется. | Dhcp-сервер |
option ntp-servers 10.1.1.1; option domain-name-servers 10.1.1.1; authoritative; option subnet-mask 255.255.255.0; default-lease-time 600; max-lease-time 7200; allow bootp; ############################################################# # Option for TeleTec (for mag200) ############################################################# option space TeleTec; option TeleTec.update_url code 24 = text; option TeleTec.update_sboot code 25 = text; option TeleTec.update_ver code 26 = text; option TeleTec.update_mode code 27 = text; option TeleTec.portal_dhcp code 22 = text; option TeleTec.update_sboot_ver code 28 = text; option TeleTec.logo_x code 16 = integer 16; option TeleTec.logo_y code 17 = integer 16; option TeleTec.bg_color code 18 = integer 32; option TeleTec.fg_color code 19 = integer 32; option TeleTec.mcip code 3 = ip-address; option TeleTec.mcport code 4 = integer 16; option TeleTec.oppubfile code 9 = text; option TeleTec.mcip_img code 10 = ip-address; option TeleTec.mcport_img code 11 = integer 16; option TeleTec.mcip_mng code 12 = ip-address; option TeleTec.mcport_mng code 13 = integer 16; option TeleTec.ip_log code 14 = ip-address; option TeleTec.port_log code 15 = integer 16; option TeleTec.VerNumber code 20 = text; option TeleTec.DateTime code 21 = text; ############################################################# # Option for Infomir (for mag245/250 and higher) ############################################################# option space Infomir; option Infomir.autostart code 1 = text; option Infomir.bootargs code 2 = text; option Infomir.mcip code 3 = ip-address; option Infomir.mcport code 4 = integer 16; option Infomir.oppubfile code 9 = text; option Infomir.mcip_img code 10 = ip-address; option Infomir.mcport_img code 11 = integer 16; option Infomir.mcip_mng code 12 = ip-address; option Infomir.mcport_mng code 13 = integer 16; option Infomir.ip_log code 14 = ip-address; option Infomir.port_log code 15 = integer 16; option Infomir.logo_x code 16 = integer 16; option Infomir.logo_y code 17 = integer 16; option Infomir.bg_color code 18 = integer 32; option Infomir.fg_color code 19 = integer 32; option Infomir.VerNumber code 20 = text; option Infomir.DateTime code 21 = text; option Infomir.portal_dhcp code 22 = text; option Infomir.timezone code 23 = text; option Infomir.update_url code 24 = text; option Infomir.update_sboot code 25 = text; option Infomir.update_ver code 26 = text; option Infomir.update_mode code 27 = text; option Infomir.update_sboot_ver code 28 = text; ############################## BOOT MAG200 ############################### class "MAG200_boot" { match if (( option vendor-class-identifier="TeleTecMAG200boot")); filename "mag200/uImage"; next-server 10.1.1.1; option root-path "10.1.1.1:/srv/mag200"; option ntp-servers 10.1.1.1; vendor-option-space TeleTec; } class "MAG200_vendor" { match if (( option vendor-class-identifier="TeleTecMAG200")); next-server 10.1.1.1; option ntp-servers 10.1.1.1; vendor-option-space TeleTec; option TeleTec.portal_dhcp "http://10.1.1.1/stalker_portal/c/index.html"; option TeleTec.update_url "tftp://10.1.1.1/mag200/imageupdate_200_212r2"; option TeleTec.update_ver "212"; option TeleTec.update_sboot "http://10.1.1.1/mag200/SbootIm_038_200"; option TeleTec.update_sboot_ver "038"; option TeleTec.update_mode "tftp://10.1.1.1/mag200/Bootstrap_200_212r2"; } ############################## BOOT MAG250 ################################ class "MAG250_boot" { match if (( option vendor-class-identifier="InfomirMAG250boot")); filename "mag250/uImage_mag250"; next-server 10.1.1.1; option root-path "10.1.1.1:/srv/mag250"; option ntp-servers 10.1.1.1; vendor-option-space Infomir; } class "MAG250_vendor" { match if (( option vendor-class-identifier="InfomirMAG250")); next-server 10.1.1.1; option ntp-servers 10.1.1.1; vendor-option-space Infomir; option Infomir.portal_dhcp "http://10.1.1.1/stalker_portal/c/index.html"; option Infomir.update_url "tftp://10.1.1.1/mag250/imageupdate_250_212r2"; option Infomir.update_ver "212"; option Infomir.update_sboot "http://10.1.1.1/mag250/SbootIm_mag250"; option Infomir.update_sboot_ver "007"; option Infomir.update_mode "tftp://10.1.1.1/mag250/Bootstrap_250_212r2"; } ############################## NETWORK #################################### subnet 10.1.1.0 netmask 255.255.255.0 { option subnet-mask 255.255.255.0; next-server 10.1.1.1; pool { range 10.1.1.10 10.1.1.254; next-server 10.1.1.1; option ntp-servers 10.1.1.1; } }