Эльбрус/пнс
Программа начального старта
ПНС, также "бут" (boot) -- аналог BIOS в обычных ПК: прошивка, входящая в комплект материнской платы и обеспечивающая начальную настройку/самодиагностику вычислительного комплекса с последующей загрузкой операционной системы.
Отличается не полноэкранным, а командно-строчным методом организации взаимодействия.
Конфигурируется посредством своего интерактивного режима после нажатия пробела на соответствующем приглашении, а в части загрузчика -- также /boot/boot.conf на указанном загрузочном устройстве/разделе.
Задачи
Помимо своей основной задачи ПНС решает и ряд вспомогательных, предоставляя интерактивный режим для выбора загрузочного носителя и позволяя сконфигурировать аппаратное обеспечение (например, отключить инициализацию отсутствующих жёстких дисков или неподключенных сетевых интерфейсов для ускорения загрузки).
Нижняя консоль
Интерактивный режим, вызываемый по нажатию пробела при соответствующей подсказке после инициализации оборудования и перед загрузкой ядра ОС; включает:
- основное меню
- boot#-меню
- расширенное меню
Для работы нижней консоли требуется уже запущенная память, что приводит к необходимости сброса настроек всего бута по зажатой Esc в случае выбора несовместимых настроек.
Верхняя консоль
В бутах для v6-систем (e16c/e12c/e2c3) добавлена интерактивная часть, работающая до инициализации ОЗУ -- т.н. верхняя консоль, вызываемая по зажатой X на COM-порту при старте машины[1].
Среди прочего позволяет настроить:
- режим работы памяти
- прогрев VGA BIOS дискретной видеокарты
режим ОЗУ
Пример для Micron MTA18ASF2G72PZ-3G2R1 на 1Э16С-uATX:
Cmd Accepted
...
b Calc CPU MC Freq (PLL MC)
...
Hit any Menu-key:b
E.g: 350000000-1350, 400000000-1600, 450000000-1800, 525000000-2100, 600000000-2400
650000000-2600, 675000000-2700, 700000000-2800, 725000000-2900, 750000000-3000, 800000000-3200
Hit Enter to DFLT MC Freq 337500000 or 0 to finish or type Freq in Hz : 8000000003 Max
----------------------------------------------------------------------
# NF NR OD Fvco error
----------------------------------------------------------------------
1 . 0x3000000000 1 3 2.400000e+09 +0000.000000
----------------------------------------------------------------------
Calc tunes: clkf 0x3000000000 , clkr 0 , clkod 2
Press Enter for Dflt CPUs Mask 0xF | type 0 to finish | type hex CPUs mask: 0x20 Max
Press Enter for Dflt MCs Mask 0xFF | type 0 to finish | type hex MCs mask: 0x0ff
You are about to set MC Freq 800000000 Hz for CPU0 ,1 ,2 ,3 MC0 ,1 ,2 ,3 ,4 ,5 ,6 ,7
Save Tune ? (y or n)y
Saved in CMOS Will applied after PwrReset
Other Tune ? (y or n)n
Exit ? (y or n)y
В ответ на подсказку "0x0" был произведён ввод значения "ff", далее трижды "y". Внимание: для учёта сделанных настроек следует выполнить аппаратный reset по кнопке!
прогрев VGA BIOS
Пример для 1Э16С-uATX:
2 y/n X86EMU_VIDEO_INIT En
[...] Hit any Menu-key:2
Current x86emu_video_init_enable Flag = 0
Invert ? (y or n)y
Exit ? (y or n)_
Ввод -- после выбора в меню верхней консоли пункта "2" дважды "y".
Советы
Определение версии
В самой ПНС (расширенный режим по "~"):
get version boot
В загруженной Linux-системе:
cat /proc/bootdata
Отключение сетевой загрузки
Для ускорения процесса инициализации можно выключить ethernet-интерфейсы в ПНС (ядро Linux их поднимет самостоятельно)[2]:
~ set eth controller disable <Esc> b <Enter>
Переключение видеовывода по умолчанию
См. в расширенном командном режиме ПНС (~) вывод:
get video output set video output
Например, для случая 1Э8СВ с набортным Aspeed VGA и дискретным Radeon для переключения на последний рекомендовали[3]:
set video output 0
В более старых бутах (до video) был параметр vga.
На случай потери доступа к интерфейсу ПНС с локальной консоли держите под руками COM-кабель.
См. тж. прогрев VGA BIOS выше.
Отключение встроенной видеокарты
Для отключения встроенной видеокарты необходимо в расширенной командной строке набрать команду set cpu_pci 0 0; рекомендуется предварительно выполнить команду get cpu_pci 0 и запомнить ее выдачу, чтобы потому можно было восстановить настройку командой set cpu_pci 0 <old_value>
Неподдерживаемые видеокарты
В старых версиях бута был белый список по конкретным PCI ID проверенных видеокарт; вывод изображения на неподдерживаемые штатно не производился, но возможно принудительно включить его:
# get video output
[0x01] - 00:00:08:00.0, [0x1002/0x699f] (NOT SUPPORTED) is selected
# set video unsupported 0x01
[0x01] - 00:00:08:00.0, [0x1002/0x699f] (NOT SUPPORTED) unsupported is selected
В современных ПНС для видеокарт AMD данная процедура не требуется.
Включение краткого вывода при загрузке
Тем не менее, советую установить:
set output_lvl 3
чтобы были видны не только супер-мега-критические ошибки, но и сообщения о более будничных событиях, мешающих запуску, — в штатных ситуациях это никак себя проявлять не будет, зато в нештатных сэкономит много времени на «чесании репы». -- Антон Самсонов
Включение USB3
При наличии набортного или дискретного USB3-контроллера может понадобиться его явное включение:
set usb xhci controller enable
Доступ через BMC
В прошивке BMC обычно запускается tmux на одном из COM-портов платы, доступном с сервис-процессора; подключиться -- tmux attach
Device tree
В последние годы (начиная с v6, но затем пошло "сползать" и в <=v5) ядра МЦСТ стали рассчитывать на наличие данных device tree, прошитых вместе с ПНС либо предоставленных особо; в частности, ядро 6.1-1.9 закладывается на dtb версии 2.0.
Перед тем как добавлять/заменять dtb в прошивке (брать там же, где и её саму под свою плату) -- можно поместить файл в /boot/devtree.dtb[4] либо также в /boot/ под другим именем и указать в /boot/boot.conf для нужного ядра опцией devtree=/moydevtree.dtb (аналогично initrd= или cmdline=); загрузчик возмёт его оттуда.
Проблемы
GUI
COM-COM
Загрузка двух связанных последовательным кабелем ВК "Эльбрус" может пойти кувырком, если при одновременном включении прошивки "уговорят" друг друга сменить настройки загрузчика (#2436); рекомендуется применять асимметричные кабели USB-COM.
8С
Ранние версии прошивки для 801-РС/804 не работают с USB-клавиатурами через USB-хаб, при этом 4С/1С+ с этим справляются; в недавней версии исправлено, запрашивайте в МЦСТ (#4770). Там же в наличии поддержка символических ссылок (#2231).
Если получили подобный вывод при попытке загрузки с флэшки -- попробуйте флэшку другой модели (выделенного курсивом быть не должно):
Use this Unit as Drive #10Error request
Долгий запуск
Более ≈30 секунд (например, 60+) до начала запуска ОС на 1-процессорной машине могло проходить только в следующих случаях:
1) попытки ретрейна линков ОЗУ, КПИ и т. п. при их нестабильной / неисправной работе;
2) ожидание инициализации не совсем исправных накопителей SATA, USB и т. д. (особенно CD-ROM);
3) ожидание инициализации сети и отклика сервера ATA-over-Ethernet (раньше по умолчанию было включено);
4) «легендарный» бут для Эльбрус-8С от 2018-06-01, выполнявший PCI reset после обхода каждого устройства, из-за чего изображение на экране появлялось лишь минуты через полторы после пуска (некоторые пользователи до сих пор на нём сидят).
Сейчас время выхода ПНС на готовность сократилось за счёт того, что в COM-порт не выдаются столь подробные отладочные сообщения, которые даже на скорости 115200 требуют много времени. -- Антон Самсонов
Обновление
Причины
Также обновление может добавить ранее отсутствовавшую функциональность -- например, вышеупомянутую поддержку USB-хабов или загрузку ОС через USB3-карту.
Проведение
Крайне желательно обеспечить бесперебойное питание и/или достижимость программатора на всякий нештатный случай.
Прошивка запрашивается в техподдержке МЦСТ с указанием типа и серийного номера ВК; само обновление можно произвести из-под загруженной ОС при установленном пакете flashrom[5] (#2966):
flashboot.sh boot.bin
либо если предоставлен также файл devicetree:
flashboot.sh boot.bin devtree.dtb
В процессе будет сделана резервная копия имеющейся прошивки, путь к ней будет указан в начале процесса прошивки (можно заархивировать на всякий).
После произведения обновления, который должен занять несколько минут, стоит перезагрузить машину в удобное время, чтобы убедиться в отсутствии необходимости вмешательства в процесс загрузки.
Может потребоваться добавление dtb (запрашивайте образ совмещённых прошивки и devicetree для конкретной платы в поддержке, указав модель и серийный номер); свежие буты умеют подшивать devicetree прямо из основного меню[6]; контроль наличия/версии:
head /sys/firmware/devicetree/base/{model,version}
Если в процессе прошивки получите сообщение Use Kombinator to generate flash dump -- следует затереть прошивку предложенной тем же скриптом командой с --erase вместо -w <dumpfile> и записать заново; в случае 1Э16С-uATX (.466):
flashrom -c S25FL512S -p linux_spi:dev=/dev/spidev0.0,spispeed=12500 --erase flashboot.sh E16C_T23_MCST.bin tvgi.00424-01_99_01.devtree.e16c_1e16s-uatx.dtb
После успешного завершения прошивки выключаем машину через halt и отключаем от сети на минуту.
Краткий гайд по обновлению devtree/ПНС через flashboot.sh
- Берем файлы .dtb (device-tree) и .bin (ПНС)
- Выполняем команду flashboot.sh <boot.bin> <file.dtb> (<boot.bin> и <file.dtb> меняем на файлы из пункта 1)
- Если ругается Kombinator, выполняем (MT25QL512 для примера, меняем на свой чип) и повторяем пункт 2. Если все ок, переходим к пункту 4.
flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=12500 -c MT25QL512 --erase
- Выключаем машину командой halt(!), дожидаемся ее выключения и обесточиваем на 1-2 минуты. Подключаем питание, ждем загрузку BMC (если есть), запускаем машину.
- Радуемся новым devtree/ПНС.
Сброс настроек
При перепрошивке через ОС могут наложиться настройки от предыдущей версии. На машине, где открыт терминал, "читающий" СОМ-порт перешитого ВК, зажмите ESC при включении/перезапуске ВК и наберите "yes, I want", когда бут попросит. (#3985)
Для настройки режима работы памяти на v6-системах обратите внимание на верхнюю консоль.
Прошивка программатором на базе CH341A
Cпасибо за гайд @celcion
Если не страшит паяльник — можно замодить 5V в корректные 3.3V
Нужно:
- Программатор на CH341A
- Установить IMSProg или flashrom
Распиновка порта на плате соответствует Dediprog SF100
VCC (+3.3V) -° 1 2 -- VDD (GND)
CS# -- 3 4 -- SCK
MISO -- 5 6 -- MOSI
NC -- 7 8 -- RST#
Соответственно, подключаем разъемы к плате согласно маркировке. Первый контакт на плате обозначен небольшой точкой.
Подключать обязательно надо пины с 1 по 6; 7-й не подсоединён, а 8-й для перепрошивки не требуется.
Очень желательно перед подключением программатора перепроверить, что распиновка на вашей плате соответствует указанной выше — хотя бы просто проверив тестером, что на 1-м контакте на включенной плате присутствует напряжение +3,3В, а 2-й контакт звонится на землю; проверять надо CS на материнке, VCC может на пине не показываться (на v4 не было), а вот CS был в обоих случаях — выдаётся стандартно, когда чип надо выключить. Если это не так — можете закрывать данный гайд, он для вас неактуален.
Важно:
- Соблюдайте полярность и напряжение 3.3V!
- Перед подключением программатора обязательно полностью обесточьте плату (отключите блок питания от сети) и подождите хотя бы 30 секунд, чтобы напряжение с неё полностью ушло.
- Не подключайте программатор слишком длинным шнуром USB, лучше используйте USB-хаб с длинным шнуром и подключайте к нему программатор напрямую.
- Помните, что никакой особой защиты "от дурака" на плате не предусмотрено, так что делайте всё максимально аккуратно и перепроверяйте по несколько раз.
Процесс может занять до 10–15 минут в зависимости от модели программатора, подключения и т.п.
Система и ПО для прошивки
Помимо программатора нужен ещё один компьютер, с которого будете осуществлять прошивку, и необходимое ПО. Автором данной статьи в качестве такого компьютера использовался обычный ПК на Debian 13. Соответственно, все дальнейшие инструкции подразумевают использование Linux.
Для перепрошивки под Linux можно воспользоваться рекомендуемой МЦСТ программой flashrom. Её можно поставить из стандартных репозиториев вашего дистрибутива либо собрать из исходников по инструкции.
Для Windows необходимое ПО и инструкции можно найти здесь. Автором данной статьи прошивка из Windows не проверялась, так что можете действовать на свой страх и риск и в случае успеха дополнить данную статью соответствующей информацией.
Бэкап текущей прошивки
Прежде чем что-либо прошивать, обязательно сделайте бэкап текущей прошивки! Если на плате есть BMC — его прошивку тоже лучше на всякий случай забэкапить, инструкции для этого те же, только порт на плате другой, подробнее в конце статьи.
Для этого вводим следующую команду:
flashrom --programmer 'ch341a_spi' -r pns_backup.bin --progress
Если программа автоматически не определит точную модель чипа, укажите его явно (например, для платы 1Э8СВ-uATX):
flashrom --programmer 'ch341a_spi' -c "MT25QL512" -r pns_backup.bin --progress
Если программа вообще не смогла определить ваш чип и завершилась ошибкой — перепроверьте, правильно ли вы подключили программатор, верно ли указали его модель (если это не CH341A) и хватает ли прав (если запускаете не от root). Если всё равно не работает — дальше продолжать не имеет смысла, обращайтесь в поддержку МЦСТ.
Если процесс пошёл, то наберитесь терпения — он может занять до 10–15 минут в зависимости от модели программатора, подключения и т.п.
Если до завершения копирования программа завершится ошибкой (например, LIBUSB_TRANSFER_ERROR) — скорее всего, проблема в подключении, попробуйте переключить программатор в другой USB-порт, поменяйте хаб, удлинитель и т.п. Также может быть, что неисправен сам программатор — тогда имеет смысл поменять уже его.
Собранный дамп текущей прошивки крайне желательно сохранить на будущее для возможности отката.
Подготовка новой прошивки
В зависимости от того, в каком виде вам досталась новая версия прошивки, может понадобиться дополнительно подготовить её перед тем, как заливать на плату. Проверьте размер сделанного дампа текущей прошивки, если новая версия сильно меньше — значит, надо сначала сделать "пустой" файл такого же размера, как дамп текущей прошивки, заполненного 0xFF, а затем "вписать" туда новую прошивку. Если для платы нужен devtree — то его также надо будет туда вписать по корректному смещению.
Для 8СВ смещение 7340032, для Е2С3 и Е16С — 4849664.
На примере ПНС для 1Э8СВ-uATX делается это примерно следующим образом:
// new_pns.bin — прошивка ПНС, new_devtree.dtb — devtree dd if=/dev/zero count=64 bs=1M | tr '\0' '\377' > new_firmware.bin dd if=new_pns.bin of=new_firmware.bin bs=1 seek=0 conv=notrunc dd if=new_devtree.dtb of=new_firmware.bin bs=1 seek=7340032 conv=notrunc
Процесс прошивки
Убедитесь повторно, что вы точно сделали бэкап текущей прошивки и корректно подготовили новую (что она нужного размера, вы не забыли туда вписать нужные компоненты прошивки, в процессе не было никаких ошибок, созданный файл не является пустым, и т.д), после чего прошивайте новую прошивку следующей командой:
flashrom --programmer 'ch341a_spi' -c "MT25QL512" -w new_firmware.bin --progress
Опять же наберитесь терпения: процесс может идти до 20–30 минут в зависимости от ранее перечисленных обстоятельств.
Важно:
- После прошивки обязательно отключите программатор от платы, прежде чем подавать на неё питание!
- Обязательно убедитесь в том, что в конце вывода flashrom после окончания его работы присутствует слово VERIFIED. Если его там нет, то проверьте вывод и dmesg на наличие ошибок и попробуйте запустить прошивку повторно. Если с двух-трёх попыток не получится, то проверьте соединение USB, переключите программатор в другой порт и т.д. Если ничего не поможет — попробуйте снять дамп зашитой прошивки и сверить его контрольную сумму с той, что вы только что зашивали, если она совпадает — можно попробовать загрузиться, скорее всего всё в порядке. В противном случае дальше вам в поддержку, плату лучше больше не включать.
Включение после прошивки
После завершения прошивки еще раз убедитесь, что отключили программатор от платы, и включайте систему. Если есть возможность, подключитесь к плате по COM-порту, чтобы увидеть через него какие-либо возможные ошибки.
Первое включение после прошивки желательно делать без подключения каких-то дополнительных устройств вроде PCI-плат или жестких дисков, чтобы в случае проблем исключить их влияние.
Может также потребоваться включить компьютер, удерживая клавишу Esc[8] для сброса настроек ПНС, особенно если старая и новая версия ПНС сильно отличаются по времени выхода.
Прошивка BMC
На платах, где присутствует BMC, процесс его прошивки в целом примерно такой же, как и ПНС. По крайней мере в случае 1Э8СВ-uATX там такой же (но не тот же!) коннектор с такой же распиновкой и таким же чипом памяти. Поэтому инструкции примерно те же, за исключением подготовки новой прошивки.
В случае 1Э8СВ-uATX прошивка BMC весит 48 мегабайт, остальные 16 — это сохранённые данные. То есть если хотите, например, сбросить настройки BMC, то помимо способа с зажиманием кнопки UID можно это сделать ещё и так:
// Сделайте бэкап текущей прошивки BMC в файл bmc_backup.bin dd if=bmc_backup.bin of=bmc_fw_only.bin bs=1M count=48 dd if=/dev/zero count=64 bs=1M | tr '\0' '\377' > bmc_clear.bin dd if=bmc_fw_only.bin of=bmc_clear.bin bs=1M seek=0 conv=notrunc
После чего прошить получившийся файл bmc_clear.bin в BMC таким же образом, как и ПНС.
Прошивка программатором на базе STM32 bluepill
Cпасибо за гайд @celcion
Изначально проверьте 3.3V батарейку на плате на всякий, что она может быть подсевшей.
После прошивки, вычитайте память, чтобы удостовериться в валидности данных
Нужно:
- Плата STM32 bluepill: https://market.yandex.ru/card/stm32f103c8t6-otladochnaya-plata-stm32/101816055502
- Программатор ST-Link V2: https://market.yandex.ru/card/programmator-st-link-v2/101464945718
Поставить зависимости (пример для Debian):
sudo apt-get install gcc-arm-none-eabi stlink-tools
Собрать прошивку:
git clone --recurse-submodules https://github.com/dword1511/stm32-vserprog.git cd stm32-vserprog make BOARD=stm32-bluepill
Подключить ST-Link V2 к STM32 bluepill (четыре контакта на противоположном от USB конце платы) согласно #Распиновка_порта_на_плате_соответствует_SF100:
ST-Link V2 STM32 bluepill SWDIO -> SWIO SWCLK -> SWCLK 3.3V -> 3.3V GND -> GND
Переставить джампер BOOT0 для включения режима прошивки и подключить ST-Link V2 к компу.
Прошить собранную прошивку на bluepill:
sudo st-flash write stm32-vserprog.bin 0x8000000
Отключить bluepill от ST-Link V2 и вернуть джампер BOOT0 на место.
Подключить bluepill к плате Эльбруса по распиновке:
A4 -> CS A5 -> SCK A6 -> MISO A7 -> MOSI
3.3V и GND на плате bluepill подписаны.
Подключить bluepill к компу, с которого прошивать, по USB и там запустить (для 1Э8СВ-uATX):
flashrom -p serprog:dev=/dev/ttyACM0:4000000 -c "MT25QL512" -r pns_bcp.bin --progress flashrom -p serprog:dev=/dev/ttyACM0:4000000 -c "MT25QL512" -w pns_new.bin --progress
Прошивка с помощью Flipper Zero
Можно попробовать использовать
- https://lab.flipper.net/apps/spi_mem_manager с подключением согласно #Распиновка_порта_на_плате_соответствует_SF100
Прошивка с BMC
Осуществляется скриптом update-host-flash, но бэкап текущей прошивки в нём не предусмотрен => резервным будет вариант с программатором; подробнее см. на wiki.e-2k.ru.
Ссылки
- Эльбрус/загрузчик
- Эльбрус/com
- Официальная вики
- Программа начального старта (ТВГИ.00727)
- Документация ВК "Эльбрус": ТВГИ.00315-03 34 01 изм. 30, п. 3.2.
- "И всё таки она живая!" | Создаем загрузочную USB-флешку с Альт Линукс для Эльбруса
- Как сбросить пароль (init=/bin/bash)
- Прошивка ПНС с помощью набортной BMC
Примечания
- ↑ Наиболее вероятно читать ПНС будет с COM1/ttyS0; например, на 1Э16С-uATX разъём X31 отображается в COM2/ttyS1 и в ряде прошивок вывод на него есть, а ввод в верхней консоли не воспринимается (исправлено в мае 2023)
- ↑ работает автодополнение по кнопке <Tab>, достаточно набирать первые буквы слов команды
- ↑ mcst#5977
- ↑ mcst#8349
- ↑ обратите внимание: flashrom собран с патчем МЦСТ
- ↑ 'U' - Upload file from Flash to Disk:, далее 2 - rDEV3 (DevTree), указать номер диска (флэшки), раздела (обычно 0) и путь к файлу .dtb
- ↑ например, MOD-CH341A blue
- ↑ не пройдёт через tmux+minicom в BMC, лучше на прямом COM