Не получается загрузиться с оригинальной прошивки UFS922

maniak

Любитель Сат-ТВ
Вобщем небольшой отчетик по решению разных проблем.

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

/app/app # ./maruapp
Can not open config file
mode=0
kmsg=0
serverip=
port=0
outpath=
Can not open config file
[LOG]: Before HDD Initialization... -> Start in (/MainApp.cpp 426)
[LOG]: 0th Partition Name=sda, Blocks=488386584, Major=8, Minor=0 -> Parse in (/PartitionParser.cpp 177)
<skip за ненадобностью>
[LOG]: Partition /dev/sda6 will be formatted by MARUSYS RAW FS -> Format in (/HDDPartition.cpp 109)
[LOG]: Mapping Raw Partition... -> MapRawPartition in (/HDDPartition.cpp 601)
[LOG]: rec -> MakeDedicated in (/HDDDevice.cpp 617)
[LOG]: rec -> MakeDedicated in (/HDDDevice.cpp 619)
[LOG]: rec -> Format in (/RecordMgr.cpp 714)
[LOG]: rec -> Format in (/RecordMgr.cpp 718)
<но потом>
[LOG]: Checking Dedicated HDD... -> HDDDevice in (/HDDDevice.cpp 102)
[[LOG-ERROR]]: Not a Dedicated HDD!!!!!!!!! -> RecordRawVolume in (/RecordRawVolume.cpp 65)
[LOG]: rec -> Format in (/RecordMgr.cpp 721)
[LOG]: rec -> Format in (/RecordMgr.cpp 731)
[[LOG-ERROR]]: Invalid Status -> Format in (/RecordRawVolume.cpp 91)

.... и перезагрузка. И так до бесконечности. Вобщем какой-то отстой. Честно говоря не верил, что поможет но... dd if=/dev/zero of=/dev/sda bs=65536 -- ждать минут 40 - час. И все заработало ! Еще надо уточнить, что hddreset не спасает, поскольку трет только таблицу разделов.

Если у вас затерлась вся flash (которая на борту) кроме boot firmware. Почти все можно востановить с usb flash. На компе форматируете usb под FAT16 (с fat32 почему-то у меня лично не сложилось -- хотя пробовал всего две разных флешки).
Итак -- востанавливается:
"Kernel - 0xA004.0000-0xA01F.FFFF"
"APP_Modules 0xA04E.0000-0xA0AF.FFFF"
"App + GTK 0xA04E.0000-0xA0FF.FFFF"
"GTK Lib 0xA0B0.0000-0xA0FF.FFFF"

Не востанавливается:
"Config FS - 0xA020.0000-0xA029.FFFF"
"Root FS- 0xA02A.0000-0xA04D.FFFF"

Причем Root FS монтируется ro. Т.е. если потерли -- это не гарантийный случай. Востановить можно тем-же dd. Образы любезно предоставил xloaloa (см. выше). Для востановления надо "подсунуть" оригинальному ядру (энигма пока не может работать с /dev/mtdblock*) корневой раздел. Я использовал от энигмы. Т.е. на флеш создаем раздел ext3 (на нем будет корневой раздел). Не надо пытаться разметить под fat/ntfs -- они не поддерживают simlinks. Дальше распаковываем туда энигму, кладем выше упомянутые файлы. Устанавливаем параметры загрузки:
setenv bootargs 'console=ttyAS0,115200 root=/dev/sdb1 rw mem=89m bigphysarea=6144 coprocessor_mem=3m@0x04000000,3m@0x04300000'

Загрузку прерываем (ctrl+c) после запуска init. При помощи dd востанавливаем утраченое:
dd if=mtdblock2.iso of=/dev/mtdblock2
dd if=mtdblock3.iso of=/dev/mtdblock3

На первые два сектора flash выставлен write protect -- так вот не надо его снимать. Иначе возможен брик. А вообще энигму лучще грузить с usb flash -- потому как первое, что делает пользователь -- пытается подключить диск и естественноо после инициализации мы видим на форуме "Энигма перестала грузиться". И мне кажется, что процесс можно вполне автоматизировать. Типа вставил flash с энигмой и загрузился -- без flash грузиться оригинальная прошивка. Правда памяти в eeprom маловато...
 

maniak

Любитель Сат-ТВ
Получилось сделать двойную загрузку. Т.е. при вставленой usbflash с энигмой грузится энигма если нет usbflash -- грузимся по умолчанию.

Все делалось на debian linux. Сначала разбиваем usbflash. Первый раздел fat16, второй etx3. Далее монтируем оба раздела и копируем на fat uImage от энигмы под именем u (позже будет понятно почему один символ). На раздел ext3 распаковываем саму энигму. usbflash готова. Дальше настраиваем uboot. Перед этой процедурой обязательно сохраните текущие настройки. Т.е. выполните printenv и сохраните весь вывод в файл. Вот env который обеспечивает двойную загрузку:

MB411> printenv
bootdelay=1
baudrate=115200
autoload=n
board=mb411
boot_version=100
ethaddr=00:D0:55:04:1D:66

autoboot=0
netmask=255.255.255.0
gateway=192.168.0.1
filesize=1E17D1
a2=a5000000
bootcmd=run b1
b1=usb reset;fatload usb 0:1 $a2 u;if iminfo $a2;then set bootargs $a1;run bootargs;bootm $a2;else bootm a0040000;fi
bootargs=console=ttyAS0,115200 root=/dev/mtdblock3 mem=89m bigphysarea=6144 coprocessor_mem=3m@0x04000000,3m@0x04300000
a1=console=ttyAS0,115200 root=/dev/sdb2 rw ip=192.168.0.80::::kathrein:eth0:eek:ff mem=89m coprocessor_mem=4m@0x10000000,4m@0x10400000 rootdelay=4 init=/bin/devinit
ipaddr=192.168.0.80
stdin=serial
stdout=serial
stderr=serial

Environment size: 651/764 bytes

Казалось-бы места еще навалом.... но в процессе загрузки с usbflash происходит переприсвоение bootargs значением a1. Вот по этому даже название образа который грузится пришлось сократить до u и удалить из окружения gateway,netmask и т.д. Если этого не сделать -- будем получать сообщение: ## Error: environment overflow, "bootargs" deleted.

Тем кому интересно... Почему не сделать usbflash с одним разделом ? Монитор (bootfirmware) не умеет работать с разделами ext3 сделаными на компе. Т.е. не удается загрузиться при помощи ext2load. А fat не позволяет хранить символические ссылки.... Вот по этому linux в процессе создания usbflash необходим.
 

Nick183

Пользователь
Получилось сделать двойную загрузку. Т.е. при вставленой usbflash с энигмой грузится энигма если нет usbflash -- грузимся по умолчанию...... На раздел ext3 распаковываем саму энигму.

maniak, когда я пытаюсь распаковать файл new-kf-ufs922-e2.tar.gz, у меня в конце распаковки появляется сообщение об ошибке:
"Невозможно открыть fd\2 (dev\stderr-->fd\2)"
"Символическая связь указывает на отсутствующий файл".
И так много-много строчек. Пробовал распаковывать разными архиваторами, скачивал файл заново - ничего не меняется. Подскажи, что я не так делаю?
 

maniak

Любитель Сат-ТВ
"Невозможно открыть fd\2 (dev\stderr-->fd\2)"
"Символическая связь указывает на отсутствующий файл".

Файловая система должна быть ext2 или ext3. Для создания файловой системы на usbflash подключите ее к компьютеру, через пару сек. выполните dmesg и посмотрите к какому устройству она подключена. Должно быть, что-то типа /dev/sdX. После подключения usb flash убедитесь, что она не смонтировалась автоматически (зависит от дистрибутива и настроек.). Запустите fdisk /dev/sdX и посмотрите какие разделы привутствуют на текущий момент. Если есть разделы -- удалите их (ВСЕ ДАННЫЕ НА USBFLASH БУДУТ УНИЧТОЖЕНЫ). Создайте два primary раздела : первый должен иметь тип 6 (FAT16), второй 83 (Linux)(Размер второго раздела должен быть достаточен для распаковки образа энигмы -- я создавал 200Мб на 2-х Гб флешке) и сохраните изменения (команда w). Отформатируйте разделы: первый mkfs.vfat /dev/sdX1, второй mkfs.ext3 /dev/sdX2. Примонтируйте оба раздела. Например так mount /dev/sdX1 /mnt/sdX1 и mount /dev/sdX2 /mnt/sdX2 (если каталогов /mnt/sdX# нет -- создайте их. mkdir /mnt/sdX1 и mkdir /mnt/sdX2). Распакуйте содержимое архива на второй раздел. Для этого лучще перейдите в точку монтирования (cd /mnt/sdX2). tar zxvf <путь к архиву>/new-kf-ufs922-e2.tar.gz и скопируйте uImage на первый раздел -- cp boot/uImage /mnt/sdX1/u. Выполните sync, cd ~, umount /mnt/sdX1 и umount /mnt/sdX2.
 

Nick183

Пользователь
maniak, благодарю за подробное описание. Я несколько дней, как осваиваю Linux по вечерам. Создавать разделы, монтировать устройтва и т.д. я научился. Проблема была в архиваторе.
Прописал переменные по твоему рецепту. Загрузка без флэшки проходит нормально, а с вставленной флэшкой после включения зависает с надписью на дисплее "Kathrein UFS-922". В терминале снял log загрузки:

Board: STb7100-Mboard (MB411) [29-bit mode]


U-Boot 1.3.1 (Oct 4 2008 - 01:58:33) - stm23-2008-06-03

DRAM: 64 MB
NOR: 16 MB
In: serial
Out: serial
Err: serial
Serial 3 Intialized
VFD_Driver Init
VFD_Controller Type : NEW Kathrein VFD using PIC
[0xfa] [0xd] read key= [0xfa] [0xd]
ACK
Test Class : GetInstance()
Test Class : GetInstance()
RawBuffer.cpp at RawBuffer ,29
FD = 0
SWRecoveryHandler.cpp at Recover ,46
No Recovery Needed
End of testCpp
Hit any key to stop autoboot: 1  0
(Re)start USB...
USB: scanning bus for devices... 3 USB Device(s) found
scanning bus for storage devices... 1 Storage Device(s) found
reading u
................................................................................................................................................................................................

1972177 bytes read

## Checking Image at a5000000 ...
Image Name: Linux-2.6.17.14_stm22_0041
Created: 2009-02-20 22:07:35 UTC
Image Type: SuperH Linux Kernel Image (gzip compressed)
Data Size: 1972113 Bytes = 1.9 MB
Load Address: 84001000
Entry Point: 84002000
Verifying Checksum ... OK
Unknown command 'rw' - try 'help'
Original bootargs = console=ttyAS0,115200 root=/dev/sdb2 rw ip=192.168.1.201::::kathrein:eth0:eek:ff mem=89m coprocessor_mem=4m@0x10000000,4m@0x10400000 rootdelay=4 init=/bin/devinit
ethaddr = 00:D0:55:04:1E:46

new Params = console=ttyAS0,115200 root=/dev/sdb2 rw ip=192.168.1.201::::kathrein:eth0:eek:ff mem=89m coprocessor_mem=4m@0x10000000,4m@0x10400000 rootdelay=4 init=/bin/devinit stmmaceth=ethaddr:00:D0:55:04:1E:46

## Booting image at a5000000 ...
Image Name: Linux-2.6.17.14_stm22_0041
Created: 2009-02-20 22:07:35 UTC
Image Type: SuperH Linux Kernel Image (gzip compressed)
Data Size: 1972113 Bytes = 1.9 MB
Load Address: 84001000
Entry Point: 84002000
Verifying Checksum ... OK
Uncompressing Kernel Image ... OK

Warning: Unable to determine if kernel is built for 29- or 32-bit mode!

Starting kernel console=ttyAS0,115200 root=/dev/sdb2 rw ip=192.168.1.201::::kathrein:eth0:eek:ff mem=89m coprocessor_mem=4m@0x10000000,4m@0x10400000 rootdelay=4 init=/bin/devinit stmmaceth=ethaddr:00:D0:55:04:1E:46
- 0x00000000 - 0 ...

И на этом все.
Может подскажеш в чем дело?
 

Nick183

Пользователь
Если у кого-то получилась двойная загрузка, то выложите пожалуйста log загрузки с флэшки.
 

Nick183

Пользователь
Разобрался, почему не шла загрузка с флэшки. Надо было указать раздел /deb/sdb5 вместо /dev/sdb2. Еще смущает вот это сообщение:
Unknown command 'rw' - try 'help'
Original bootargs = console=ttyAS0,115200 root=/dev/sdb2 rw ip=192.168.1.201::::kathrein:eth0:eek:ff mem=89m coprocessor_mem=4m@0x10000000,4m@0x10400000 rootdelay=4 init=/bin/devinit
 

maniak

Любитель Сат-ТВ
Unknown command 'rw' - try 'help'

Как-то странно работает подписка. Вроде настроено уведомление по почте, а оно не приходит. Впрочем даже лучще, что Вы сами разобрались. sdb5, а не sdb2 -- это потому, что так размечена флешка. Вы видимо не удаляли разделы. Собственно можете посмотреть fdisk /dev/sdX и дать команду p. Она покажет, что у вас как минимум 5 разделов.

На сообщение <Unknown command 'rw' - try 'help'> не обращайте внимания -- это особенность работы uBoot. Или вернее необходимости выполнить run bootargs непосредственно передзагрузкой кернела. Естественно комманды rw в uboot не существует, но зато существует такой параметер для кернела и он нужен для нормальной работы энигмы.
 

Nick183

Пользователь
manik, спасибо за помощь. Загрузка идет нормально, с параметром rw разобрался. Без него тоже загрузка не идет. Немного повозился с сетью, но настроил.
В настройках Енигмы посмотрел ip адрес и попытался по нему зайти по FTP, не получилось. Изменения в настройках Енигмы ничего не дали. Тогда я в env прописал ipaddr тем значением, что предложила Енигма и это же значение прописал в a1.
При загрузке получил сообщение: ## Error: environment overflow, "bootargs" deleted. Нужно было как-то освобождать место. Я не нашел команды удаления переменных и ничего не придумал, как прописать serverip пустым значением. В результате загрузка прошла успешно и сеть заработала. По FTP залил спутники.
Теперь буду разбираться с эмуляторами.
Еще раз спасибо, maniak, за помощь.
 

maniak

Любитель Сат-ТВ
Несколько человек обратились с проблемой циклической перезагрузки на оригинальной прошивке. По этому решил запостить соображения на сей счет.

Есть три основные причины по которым не запускается maruapp: повреждены конфигурационные файлы -- в этом случае проще всего откатиться на 1.01 и потом установить 1.02, поврежден hdd -- надо полностью очистить диск и тогда maruapp сможет его инициировать как новый, поврежден корневой или конфигурационный раздел во flash -- тогда надо востанавливаться при помощи dd и вот этих файлов http://forum.sat-expert.com/kathrein...tml#post182398.

В первом случае стандартная процедура загрузки образа с USB flash. Во втором -- надо прервать выполнение start.sh после начала загрузки maruapp (на консоли появиться надпись "sda1 sda2 sda3 sda4 <sda5 sda6>") нажатием ctrl+c. После этого произойдет запуск /bin/sh и можно будет вводить команды. Я очистил диск командой dd if=/dev/zero of=/dev/sda bs=65536 (подождать 30 мин и нажать ctrl+c). Эта команда заполняет hdd нулями. Если получите сообщение типа /dev/zero not found -- значит ctrl+c нажали слишком рано, до загрузки модулей. Ну, и в третьем случае нужно опять таки прервать загрузку (только в этот раз не оригинальной прошивки, а например энигмы) (ctrl+c) и востановить при помощи dd if=mtdblock2.iso of=/dev/mtdblock2 и dd if=mtdblock3.iso of=/dev/mtdblock3. Файлы я копировал на usb flash. И потом монтировал в /mnt/usb/ (если каталога не будет -- его надо создать mkdir /mnt/usb) командой mount /dev/sdb1 /mnt/usb -- дальше надо перейти /mnt/usb и выполнить выше указанные команды.

Не надо пытаться это воспроизводить если не понимаете сути выполняемых команд. Если вы случайно затрете один из /dev/mtdb (увидите сообщение типа kernel panic вследствии not mount/fount root fs или wrong image magic) придется востанавливать систему посредством загрузки образа (например энигмы) с usb или hdd. Эта процедура требует некоторой квалификации и наличия linux машины. Я её делал давно и всего один раз по этому пошагово воспроизвести не смогу. В общем будьте осторожны.
 

Indigo777

Профи в Сат-ТВ
Несколько человек обратились с проблемой циклической перезагрузки на оригинальной прошивке. По этому решил запостить соображения на сей счет.

Есть три основные причины по которым не запускается maruapp: повреждены конфигурационные файлы -- в этом случае проще всего откатиться на 1.01 и потом установить 1.02, поврежден hdd -- надо полностью очистить диск и тогда maruapp сможет его инициировать как новый, поврежден корневой или конфигурационный раздел во flash -- тогда надо востанавливаться при помощи dd и вот этих файлов http://forum.sat-expert.com/kathrein...tml#post182398.

В первом случае стандартная процедура загрузки образа с USB flash. Во втором -- надо прервать выполнение start.sh после начала загрузки maruapp (на консоли появиться надпись "sda1 sda2 sda3 sda4 <sda5 sda6>") нажатием ctrl+c. После этого произойдет запуск /bin/sh и можно будет вводить команды. Я очистил диск командой dd if=/dev/zero of=/dev/sda bs=65536 (подождать 30 мин и нажать ctrl+c). Эта команда заполняет hdd нулями. Если получите сообщение типа /dev/zero not found -- значит ctrl+c нажали слишком рано, до загрузки модулей. Ну, и в третьем случае нужно опять таки прервать загрузку (только в этот раз не оригинальной прошивки, а например энигмы) (ctrl+c) и востановить при помощи dd if=mtdblock2.iso of=/dev/mtdblock2 и dd if=mtdblock3.iso of=/dev/mtdblock3. Файлы я копировал на usb flash. И потом монтировал в /mnt/usb/ (если каталога не будет -- его надо создать mkdir /mnt/usb) командой mount /dev/sdb1 /mnt/usb -- дальше надо перейти /mnt/usb и выполнить выше указанные команды.

Не надо пытаться это воспроизводить если не понимаете сути выполняемых команд. Если вы случайно затрете один из /dev/mtdb (увидите сообщение типа kernel panic вследствии not mount/fount root fs или wrong image magic) придется востанавливать систему посредством загрузки образа (например энигмы) с usb или hdd. Эта процедура требует некоторой квалификации и наличия linux машины. Я её делал давно и всего один раз по этому пошагово воспроизвести не смогу. В общем будьте осторожны.


Я восстановил свой ресивер по второй методике. До выполнения очистки диска я его снял, удалил все разделы, отформатировал в EXT3, установил обратно и запустил dd if=/dev/zero of=/dev/sda bs=65536 по выше описанному алгоритму, через час (ctrl+c) ресивер стартанул, потом сам перегрузился и заработал.
Спасибо maniak за методику!
 

HeZZballa

Новичок
видимо с вашей методикой у меня проблемы, ф1 могу ставить а другие ни как не получается поставить.
 
Сверху