The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Использование uBoot для восстановления поврежденной прошивки портативных устройств
В большом числе основанных на Linux портативных устройств и встраиваемых систем
(например, на телефонах на базе платформы Android), используется загрузчик
uBoot, который можно использовать для экстренной загрузки прошивки, в случае
мертвого зависания аппарата вследствие неудачной перепрошивки.

При попытке загрузки с подключенной через последовательный порт консолью, в
терминале можно увидеть примерно такую информацию:

   U-Boot 2010.03-01161-gd91b0a9 (Apr 22 2010 - 03:24:41)
   Marvell-GuruPlug

   SoC:   Kirkwood 88F6281_A0
   DRAM:  512 MB
   NAND:  512 MiB
   In:    serial
   Out:   serial
   Err:   serial
   Net:   egiga0, egiga1
   88E1121 Initialized on egiga0
   88E1121 Initialized on egiga1
   Hit any key to stop autoboot:  3 

При нажатии любой клавиши процесс продолжения загрузки будет прерван и на
экране появится приглашение для ввода команд:

   Marvell>> 

Для просмотра переменных окружения загрузчика вводим команду printenv:

   Marvell>> printenv
   bootcmd=${x_bootcmd_usb}; ${x_bootcmd_kernel}; setenv
    bootargs ${x_bootargs} ${x_bootargs_root}; 
    bootm 0x6400000;
   bootdelay=3
   baudrate=115200
   x_bootcmd_usb=usb start
   x_bootcmd_kernel=nand read.e 0x6400000 0x100000 0x400000
   x_bootargs=console=ttyS0,115200
   x_bootargs_root=ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs
   ethaddr=02:50:43:16:d0:2b
   ethact=egiga0
   eth1addr=02:50:43:fb:31:71
   bootargs=rootwait
   stdin=serial
   stdout=serial
   stderr=serial

   Environment size: 441/131068 bytes

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

Изменение переменных окружения производится командой setenv, например,
установим IP-адреса для встроенного Ethernet-адаптера:

   Marvell>> setenv ipaddr 192.168.1.55
   Marvell>> setenv serverip 192.168.1.1
   Marvell>> setenv netmask 255.255.255.0

Для сохранения изменений во Flash-память необходимо использовать команду saveenv.

Введя команду help можно посмотреть список доступных встроенных команд, а введя
"help имя_команды", посмотреть краткую справку о заданной команде. Подробнее с
командами uBoot можно познакомиться в этом или этом руководстве.

Наша задача, организовать для оживления аппарата загрузку ядра и корневой ФС.
Нам необходимо найти образ ядра (uImage), необходимых модулей с драйверами
(modules.tar.gz), образ ram-диска (initrd) и корневой ФС (rootfs.tar.gz). Как
правило  данные файлы можно выделить из распространяемых производителем
обновлений прошивки или попытаться найти в сети, например, на сайтах
http://plugcomputer.org/ или http://sheeva-with-linux.com.

Некоторые типы устройств можно восстановить без лишних трудностей, например,
для встраиваемых систем Ionics Stratus в uBoot предусмотрена специальная
команда для быстрого восстановления прошивки через USB - достаточно скопировать
на USB Flash файлы  uImage, modules.tar.gz, rootfs.tar.gz и initrd. После чего
в приглашении uBoot набрать:

   run recover2

Для других устройств, таких как Guruplug, восстановление немного сложнее.
Копируем на USB Flash файлы uImage и modules.tar.gz, после чего в приглашении
uBoot выполняем команды:

   usb start
   fatload usb 0 0x00800000 uImage
   nand erase clean 0x00100000 0x00400000
   nand write.e 0x00800000 0x00100000 0x00400000
   bootm 0x00800000 0x01100000

После чего перезагружаем устройство, входим под пользователем root и
распаковываем содержимое архива modules.tar.gz в корень:

   cd /
   tar xvf /mnt/modules.tar.gz

uBoot также способен считать ядро и initrd с SD-карты или по сети, используя
протокол tftp (tftp-сервер для большинства Linux-дистрибутивов представлен в
пакете tftpd).

Альтернативным путем восстановления работоспособности устройства является
использование готовых инструментариев. Например, программа ESIA
предоставляет удобный GUI-интерфейс для восстановления типовых устройств.  Для
подключения необходимо установить свежую версию программы openocd, которая
позволяет задействовать JTAG-интерфейс, подключившись к устройству через
последовательный порт. Далее, нужно подгрузить драйвер ftdi_sio, указав
корректный идентификатор устройства (можно посмотреть командой lsusb):

   sudo rmmod ftdi_sio
   sudo modprobe ftdi_sio vendor=0x1c0c product=0x0102

Если программа ESIA не помогла, можно попробовать скрипты Sheevaplug Installer
и GuruPlug Installer.
 
16.02.2011 , Источник: http://www.linuxplanet.com/linuxpla...
Ключи: linux, hardware, uboot, recover, kernel, boot, embedded / Лицензия: CC-BY
Раздел:    Корень / Администратору / Система / Загрузка, однопользовательский режим

Ваш комментарий
Имя:         
E-Mail:      
Заголовок:
Текст:



  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor