среда, 21 августа 2013 г.

Что же делать, если..

Если сетевое устройство не пингуется, значит что-то с ним не так. Если простое "ВКЛ./ВЫКЛ." не помогает и к консоли из-под устройства нам не достучаться, то все плохо. Если раньше все было хорошо, а после запуска очередного демона все изменилось, то скорее всего, виноват именно он. Значит надо его убить. А как убить демона внутри модема, к которому нет доступа из-под консоли? Рекурсия налицо: нет консоли -- нет работы. Почему так? Не знаю, так получилось...

Далее приведено описание одного из способов реанимации модема на Angstrom'е без bios'a.




Что же делать, если ваш демон сделал "грязные делишки" ?

1. Нужно к какому-нибудь рабочему ПК подключиться по USB-интерфейсу (если это возможно).

2. Зайти microcom'ом на модем и посмотреть, что творится в модеме.
sudo microcom -s 115200 -p /dev/ttyUSB0

Если на этом моменте получается залогиниться, то проблем никаких нет и не было (возможно, вам это все приснилось). Если же происходит перезагрузка, вывод исключений на стандартный вывод или что-то непонятное, значит переходим к 3му пункту.

3. У модема (сетевого устройства) делаем "ВКЛ./ВЫКЛ." и добиваемся захода в U-Boot. Должны увидеть что-то такое:

DRAM:  64 MB
NAND:  512 MiB
In:    serial
Out:   serial
Err:   serial
Net:   macb0
macb0: PHY present at 1
macb0: Starting autonegotiation...
macb0: Autonegotiation complete
macb0: link up, 100Mbps full-duplex (lpa: 0x45e1)
Hit any key to stop autoboot:  0 
U-Boot> 
U-Boot> 

4. Затем посмотреть на параметры окружения с помощью команды:
printenv

Получим, например, такое:

baudrate=115200
bootargs=mem=64M console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=jffs2 mtdparts=atmel_nand:4M(Bootstrap),60M(root),-(data)
bootcmd=nand read 0x22200000 0x200000 0x200000; bootm 0x22200000
bootdelay=3
ethact=macb0
ethaddr=00:1F:63:02:04:6A
ethaddr2=00:1F:63:02:05:6A
fileaddr=22200000
filesize=20000
ipaddr=192.168.64.100
serial=0020
serverip=192.168.64.3
stdin=serial
stdout=serial
stderr=serial

Environment size: 419/262139 bytes

Самые важные параметры в этой "простыне":

bootargs=mem=64M console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=jffs2 mtdparts=atmel_nand:4M(Bootstrap),60M(root),-(data)

5. Настраиваем своий параметры окружения с помощью команды set bootargs. Но помимо вышеперечисленных, нам не хвататет старта консоли после очередного ребута: init=/bin/sh.
Для этого, выполяем команду:
set bootargs mem=64M console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=jffs2 mtdparts=atmel_nand:4M(Bootstrap),60M(root),-(data) init=/bin/sh

6. Запуск ядра:
boot

NAND read: device 0 offset 0x200000, size 0x200000
 2097152 bytes read: OK
## Booting kernel from Legacy Image at 22200000 ...
   Image Name:   linux-3.9
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1952671 Bytes =  1.9 MB
   Load Address: 20008000
   Entry Point:  20008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
OK

Starting kernel ...

7. Теперь убираем демон, который возможно и испортил вашу жизнь:
update-rc.d -f daemonname remove

8. Последние шаги:
sync
exec /sbin/init

Итог: должны увидеть приветствие в виде:

.-------.                                           
|       |                  .-.                      
|   |   |-----.-----.-----.| |   .----..-----.-----.
|       |     | __  |  ---'| '--.|  .-'|     |     |
|   |   |  |  |     |---  ||  --'|  |  |  '  | | | |
'---'---'--'--'--.  |-----''----''--'  '-----'-'-'-'
                -'  |
                '---'
login:

Вводим логин и пароль и все ок =).

Если вы еще со мной, вот вам торт:

2 комментария:

  1. вангую, что вместо команды
    set bootargs mem=64M console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=jffs2 mtdparts=atmel_nand:4M(Bootstrap),60M(root),-(data) init=/bin/sh

    можно ввести что-то типа
    set bootargs "$bootargs init=/bin/sh"

    ОтветитьУдалить