pudeev (pudeev) wrote,
pudeev
pudeev

ADSL модем D-Link DSL-2640U. Часть V. Процесс сборки/разборки и обновления firmware.

I. Компиляция
Для закачки и установки необходимого софта потребуется ~500 MB свободного места на HDD.
Скачиваем исходники (~100 MB) с ftp-сервера D-Link:
[root@localhost gpl]# wget ftp://ftp.dlink.ru/pub/ADSL/GPL_source_code/RU_DSL-2640U/RU_DSL-2640U_3-06-04-3C_GPL.tar.gz

Распаковываем:
[root@localhost gpl]# gunzip -c RU_DSL-2640U_3-06-04-3C_GPL.tar.gz | tar xvf -
consumer_install
README
RU_DSL-2640U_3-06-04-3C_consumer.tar.gz
RU_DSL-2640U_3-06-04-3C_uclibc_crosstools_3.4.2_0.9.27.tar.gz


Читаем инструкцию:
[root@localhost gpl]# cat README
RU_DSL-2640U Open Source Release

This release contains all of the files needed to build a RU_DSL-2640U image.
To build an image, please follow the below process:

1. System Request:
   Redhat Linux 9.0

2. All operations should be performed as the "root" user

3. Install tools and source code
   #./consumer_install

4. Build image:
   # cd RU_DSL-2640U_3-06-04-3C
   # make PROFILE=RU_DSL-2640U

The final image is located in the targets/RU_DSL-2640U subdirectory.
Specify this image in the RU_DSL-2640U Web interface image upgrade
item in order to upgrade the device image.

Red Hat Linux 9.0:
[root@localhost gpl]# uname -a
Linux localhost.localdomain 2.4.20-8 #1 Thu Mar 13 17:54:28 EST 2003 i686 i686 i386 GNU/Linux
[root@localhost gpl]# gcc -v
gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)

Запускаем скрипт установки:
[root@localhost gpl]# ./consumer_install

Скрипт предлагает установить на ПК компоненты, необходимые для сборки firmware Broadcom DSL modem/router, нажимаем "y":
This script installs Broadcom DSL modem/router components onto your Linux PC.
The installation will overwrite existing files.  You will be prompted before a
component is installed.

This script may create directories and overwrite existing files.  Therefore,
you will need to have root privilages to run this script.

Press 'y' to continue: y

Теперь нам сообщают, что "исходники" будут установлены в /home/pudeev/gpl/Broadcom (для удобства я у себя переименовал длинные файлы начинающиеся на RU_DSL-2640U_3-06-04-3C_* в Broadcom), нажимаем "y":
The Broadcom DSL modem/router source files are ready to be installed at
/home/pudeev/gpl/Broadcom. Existing source files, in any, will be overwritten.

Press 'y' to install the Broadcom DSL modem/router source files: y

Ждем 2-3 минуты пока закончится процесс извлечения и копирования файлов из архива RU_DSL-2640U_3-06-04-3C_consumer.tar.gz (у меня это Broadcom_consumer.tar.gz) в каталог /home/pudeev/gpl/Broadcom.
Затем скрипт предлагает установить ПО Toolchain (кросс-компилятор для процессора с архитектурой MIPS для ОС Linux, библиотеки C для embedded Linux) в директорию /opt/toolchains, нажимаем "y":
The Broadcom DSL modem/router toolchain is ready to be installed at /opt/toolchains.
Existing toolchain files, if any, will be overwritten.

Press 'y' to install the Broadcom toolchain: y

Ждем несколько секунд пока установятся два rpm-пакета:
Installing files from /home/pudeev/gpl/Broadcom_uclibc_crosstools_3.4.2_0.9.27.tar.gz.

uclibc-crosstools-common.i386.rpm
uclibc-crosstools-mips.i386.rpm
Preparing...                ########################################### [100%]
        package uclibc-crosstools-common-3.4.2-12 is already installed
        package uclibc-crosstools-mips-3.4.2-12 is already installed

Все. Процесс установки закончен. Теперь посмотрим что получилось:
[root@localhost gpl]# ls -l /home/pudeev/gpl/Broadcom

total 88
drwxrwxrwx    4 root     root         4096 Nov 14  2007 bcmdrivers
drwxr-xr-x    3 root     root         4096 Jul 29 13:06 hostTools
drwxr-xr-x    3 root     root         4096 Jul 29 13:05 kernel
-rwxrwxrwx    1 root     root        54093 Nov 14  2007 Makefile
drwxr-xr-x    3 root     root         4096 Jul 29 13:06 shared
drwxr-xr-x    5 root     root         4096 Jul 29 13:06 targets
drwxr-xr-x    4 root     root         4096 Jul 29 13:06 userapps
-rwxrwxrwx    1 root     root           68 Nov  5  2007 version.make

Информация о версии релиза (3-06-04-3C):
[root@localhost gpl]# cd Broadcom
[root@localhost Broadcom]# cat version.make
BRCM_VERSION=3
BRCM_RELEASE=06
BRCM_EXTRAVERSION=04
ASUS_RELEASE=3C


Настройка ядра:
[[root@localhost Broadcom]# cd kernel/linux
[root@localhost linux]# make menuconfig


Добавить/удалить утилиты в BusyBox:
[root@localhost Broadcom]# cd userapps/opensource/busybox
[root@localhost busybox]# make menuconfig
[root@localhost busybox]# mv brcm.config brcmconfig.old
[root@localhost busybox]# mv .config brcm.config
[root@localhost busybox]# chmod +x brcm.config


Для компиляции и сборки запускаем скрипт и ждем несколько минут:
[root@localhost gpl]# cd Broadcom
[root@localhost Broadcom]# make PROFILE=RU_DSL-2640U

Окончательный результат работы скрипта - готовый имидж прошивки:
[root@localhost Broadcom]# ls images/
RU_DSL-2640U_306043C00_cfe_fs_kernel_3.06L..



II Разборка
Можно разобрать уже готовую прошивку от другого аналогичного модема, доработать ее и "залить" в D-Link. Структура микрокода в D-Link DSL-2640U практически совпадает со структурой микрокода других модемов с чипом Broadcom, и даже не зависит от номера чипа. Например, "модемы-близнецы" (расположение элементов немного не совпадает) - Zhone 6218-I2-xxx (это бывший Paradyne 6218-I2) и ASUS AM604g (раньше назывался AAM6020VI-B6). Микрокод у Zhone 6218-I2-xxx вообще один к одному, можно смело прошивать свой D-Link DSL-2640U (с небольшой доработкой). Стоит отметить, что в отличие от D-Link'a , firmware у Zhone постоянно совершенствуется и обновляется.

Структура микрокода у D-Link DSL-2640U выглядит так:


Открываем hex-редактор, первые 256 байт для всех модемных прошивок на базе чипов Broadcom - Broadcom tag:


Здесь можно найти тех. информацию о firmware, адреса и размеры CFE, kernel, rootfs, а также контрольные суммы. Взяв за основу bcmTag.h, я составил полное описание Broadcom tag для D-Link DSL-2640U в виде таблицы:


Combined image file - firmware.img (3300727 bytes):
1. bcm_tag (256 bytes)
2. cfe.img (62332 bytes)
3. sqsh.img (2699264 bytes)
4. kernel.img (538843 bytes)
5. model_name (32 bytes)

1. Broadcom file tag - bcm_tag (256 bytes)
[root@fc9 firmware]# hexdump -C -n 192 firmware.img
00000000  36 00 00 00 42 72 6f 61  64 63 6f 6d 20 43 6f 72  |6...Broadcom Cor|
00000010  70 6f 72 61 74 69 6f 00  76 65 72 2e 20 32 2e 30  |poratio.ver. 2.0|
00000020  00 00 00 00 00 00 36 33  34 38 00 00 44 2d 34 50  |......6348..D-4P|
00000030  2d 57 00 00 00 00 00 00  00 00 00 00 31 00 33 33  |-W..........1.33|
00000040  30 30 34 37 31 00 00 00  33 32 31 37 30 33 31 31  |00471...32170311|
00000050  36 38 00 00 36 32 33 33  32 00 00 00 00 00 33 32  |68..62332.....32|
00000060  31 37 30 39 36 39 36 30  00 00 32 36 39 39 32 36  |17096960..269926|
00000070  34 00 00 00 33 32 31 39  37 39 36 32 32 34 00 00  |4...3219796224..|
00000080  35 33 38 38 34 33 00 00  00 00 00 00 00 00 00 00  |538843..........|
00000090  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

2. CFE (Boot loader) - cfe.img (62332 bytes)
2.1 CFE signature
43 46 45 31
43 46 45 31 - CFE signature "CFE1CFE1"
2.2 Text (code) segment (113120 bytes) + BSS Area (18528 bytes)
[root@fc9 firmware]# hexdump -C -s 6048 -n 32 cfe.bin
000017a0  80 40 10 00 5d 00 00 40  00 00 08 00 2f 3e 61 3f  |.@..]..@..../>a?|
000017b0  fb 7d ac 43 a5 74 50 73  17 c9 55 1f ce 2d 46 70  |.}.C.tPs..U..-Fp|

80 40 10 00 - Code address
5d 00 00 40 - LZMA signature
00 00 08 00 - Begin code data
2f 3e 61 3f - Code data
........
66 18 95 4c - End code data

Структура cfe.lzma (45424 bytes):
5d 00 00 40 - LZMA signature
00 90 DA 01 - cfe.out size = 121488 bytes [Text (code) segment (113120 bytes) + BSS Area (18528 bytes)]
00 00 00 00 - "Shim" header
00 00 08 00 - Begin code data
2f 3e 61 3f - Code data
........
66 18 95 4c - End code data

Декомпрессия cfe.lzma:
C:\>lzma d –d22 cfe.lzma cfe.out
LZMA  4.58 beta  Copyright (c) 1999-2008 Igor Pavlov  2008-05-05

3. Root filesystem image (SquashFS with LZMA compression) - sqsh.img (2699264 bytes)
73 71 73 68 - SquashFS signature "sqsh"
[root@fc9 firmware]# hexdump -C -n 32 sqsh.bin
00000000  73 71 73 68 00 00 01 93  00 29 29 65 00 29 29 61  |sqsh.....))e.))a|
00000010  00 00 00 00 00 28 eb bb  00 29 15 37 00 02 00 00  |.....(...).7....|

Декомпрессия SqashFS v. 2.0 с помощью утилиты unsquashfs:
[root@fc9 firmware]# unsquashfs -s sqsh.bin
Reading a different endian SQUASHFS filesystem on sqsh.bin
Found a valid big endian SQUASHFS 2:0 superblock on sqsh.bin.
Creation or last append time Mon Oct 29 17:30:21 2007
Filesystem is not exportable via NFS
Inodes are uncompressed
Data is compressed
Check data is not present in the filesystem
Fragments are not present in the filesystem
Always_use_fragments option is not specified
Duplicates are removed
Filesystem size 2634.35 Kbytes (2.57 Mbytes)
Block size 16384
Number of fragments 0
Number of inodes 403
Number of uids 1
Number of gids 0

[root@fc9 firmware]# unsquashfs sqsh.bin
Reading a different endian SQUASHFS filesystem on sqsh.bin

created 253 files
created 27 directories
created 64 symlinks
created 58 devices
created 1 fifos

4. Kernel image (with LZMA compression) - kernel.img (538843 bytes)
[root@fc9 firmware]# hexdump -C -s 2761852 -n 32 kernel.img
002a247c  80 01 00 00 80 1a 90 18  00 08 38 cf 5d 00 00 40  |..........8.]..@|
002a248c  00 00 00 6f fd ff ff a3  b7 7f 63 c5 55 81 b7 e0  |...o......c.U...|

80 01 00 00 - Code Address
80 1a 90 18 - Entry Address
00 08 38 cf - kernel.lzma size = 538831 bytes
5d 00 00 40 - LZMA signature
00 00 00 6f - Begin code data
fd ff ff a3 - Code data
........
9a 32 83 ba - End code data

kernel.lzma (538831 bytes)
[root@fc9 firmware]# hexdump -C -n 32 kernel.lzma
00000000  5d 00 00 40 00 18 90 1a  00 00 00 00 00 00 00 6f  |]..@...........o|
00000010  fd ff ff a3 b7 7f 63 c5  55 81 b7 e0 8b fd 81 da  |......c.U.......|

5d 00 00 40 - LZMA signature
00 18 90 1a - kernel.out size = 1609754 bytes
00 00 00 00 - "Shim" header
00 00 00 6f - Begin code data
fd ff ff a3 - Code data
........
9a 32 83 ba - End code data

Декомпрессия kernel.lzma:
C:\>lzma d –d22 kernel.lzma kernel.out
LZMA  4.58 beta  Copyright (c) 1999-2008 Igor Pavlov  2008-05-05

5. Model name (optional) - model_name (32 bytes)
[root@fc9 firmware]# hexdump -C -s 3300695 -n 32 firmware.img
00325d57  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00325d67  00 00 00 00 52 55 5f 44  53 4c 2d 32 36 34 30 55  |....RU_DSL-2640U|



III Установка прошивки
Существует несколько способов update прошивки:
1. Стандартный способ через web интерфейс.
Закладка Tools -> меню Firmware -> Firmware Upgrade

2. С помощью tftpd.
По умолчанию в модеме стартует процесс tftpd и постоянно слушает UDP порт 69. Подключив компьютер по Ethernet к модему, по TFTP можно обновить прошивку.
Запускаем на компьютере командную строку, затем с помощью встроенного tftp клиента загружаем в модем прошивку и ожидаем окончание процесса обновления (2-3 минуты):
Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

C:\>ping -t 192.168.1.1

Обмен пакетами с 192.168.1.1 по 32 байт:

Ответ от 192.168.1.1: число байт=32 время=1мс TTL=64
Ответ от 192.168.1.1: число байт=32 время=1мс TTL=64
Ответ от 192.168.1.1: число байт=32 время=1мс TTL=64
Ответ от 192.168.1.1: число байт=32 время=1мс TTL=64

Статистика Ping для 192.168.1.1:
    Пакетов: отправлено = 4, получено = 4, потеряно = 0 (0% потерь),
Приблизительное время приема-передачи в мс:
    Минимальное = 1мсек, Максимальное = 1 мсек, Среднее = 1 мсек
Control-C
^C

C:\>tftp -i 192.168.1.1 put bcm963xx_fs_kernel
Успешная передача: 3308917 байт за 13 сs, 253900 байт/с

3. C помощью ftpd.
По умолчанию в модеме стартует процесс ftpd и постоянно слушает TCP порт 21. Подключив компьютер по Ethernet к модему, по FTP можно обновить прошивку.
Запускаем на компьютере командную строку, затем с помощью встроенного FTP-клиента загружаем в модем прошивку и ожидаем окончание процесса обновления (2-3 минуты):
Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

C:\>ftp 192.168.1.1
Связь с 192.168.1.1.
220 Ftp firmware update utility
Пользователь (192.168.1.1:(none)): admin
331 Password please.
Пароль:
230 User logged in.
ftp> binary
200 Transfer type changed to BINARY
ftp> put bcm963xx_fs_kernel
200 PORT 192.168.1.32:4216 OK
150 BINARY data connection established.
Ftp image done. PLEASE TYPE 'bye' or 'quit' NOW to quit ftp and the Router will
start writing the image to flash.
ftp: 3308917 байт отправлено за 4,97 (сек) со скоростью 665,91 (КБ/сек).
ftp> bye
221 The Router will reboot upon completion (about 2 minutes)...

C:\>

4. Из shell модема по TFTP.
На компьютере запускаем TFTP-сервер, в его корне размещаем файл с прошивкой. Например, имя файла прошивки - bcm963xx_fs_kernel. Теперь заходим в шелл модема, выполняем команду и ждем окончание процесса обновления (2-3 минуты):
# tftp -g -t i -f bcm963xx_fs_kernel 192.168.1.2
kill ...
unloaded ...
Remaining ...
.
.
.
Done removing processes
Allocating 3308925 bytes for broadcom image.
Memory allocated
Total image size: 3308917
Firmware model is correct: [RU_DSL-2640U]
Broadcom format verified.
Tftp image done.

Flashing CFE...
Flashing root file system and kernel...

Восстановление настроек модема из backup файла. В корне TFTP-сервера размещаем бэкапный конфиг файл. Например, имя файла - backupsettings.conf. Затем в шелле модема выполняем команду и ждем окончание процесса обновления (20-30 секунд):
> tftp -g -f backupsettings.conf -t c 192.168.1.4
kill process ...
Remaining modules...
.
.
.
Done removing processes
Not regular image file
Allocating 4194324 bytes for flash image.
Memory allocated
Total image size: 6184
Could be configuration data...
Tftp image done.
> Configuration update done.
 Resetting...

5. С помощью консоли и TFTP-сервера из CFE.
При обновлении этим способом проверка "Model name" не происходит, поэтому можно "заливать" прошивки от других аналогичных модемов.
Подключить компьютер к модему по Ethernet. Настроить сетевую карту компьютера: IP-адрес - 192.168.1.2, маска подсети - 255.255.255.0, основной шлюз - 192.168.1.1. Проверить доступность модема с помощью утилиты ping. Ответ модема с параметром TTL=100, указывает на то, что он работает в режиме CFE:
C:\>ping 192.168.1.1

Обмен пакетами с 192.168.1.1 по 32 байт:

Ответ от 192.168.1.1: число байт=32 время<1мс TTL=100
Ответ от 192.168.1.1: число байт=32 время<1мс TTL=100
Ответ от 192.168.1.1: число байт=32 время<1мс TTL=100
Ответ от 192.168.1.1: число байт=32 время<1мс TTL=100

Статистика Ping для 192.168.1.1:
    Пакетов: отправлено = 4, получено = 4, потеряно = 0 (0% потерь),
Приблизительное время приема-передачи в мс:
    Минимальное = 0мсек, Максимальное = 0 мсек, Среднее = 0 мсек

Настроить на компьютере TFTP-сервер и в его корень положить прошивку. Подключить консольный кабель. Войти в CFE и обновить прошивку:
CFE> f 192.168.1.2:bcm963xx_fs_kernel
Loading 192.168.1.2:bcm963xx_fs_kernel ...
Finished loading 3308917 bytes
Firmware model is correct: [RU_DSL-2640U]

Flashing CFE: ........


Flashing root file system and kernel at 0xbfc10000: ..................................................

*** Image flash done *** !
Resetting board...

6. С помощью режима "Аварийного восстановления" по http из CFE.
Подключить компьютер к модему по Ethernet. Настроить сетевую карту компьютера: IP-адрес - 192.168.1.2, маска подсети - 255.255.255.0, основной шлюз - 192.168.1.1. Выключить модем. Зажать скрепкой скрытую кнопку Reset, и не отпуская включить модем. Подождать 15-20 секунд и отпустить кнопку Reset. Если к модему подключена консоль, то на экране можно увидеть вот такое сообщение:
web info: Waiting for connection on socket 0.
CFE>

Теперь заходим по http на модем:


Выбираем файл с прошивкой. Нажимаем Update Software и ждем 2 минуты:


7. С помощью JTAG кабеля.
Потребуется вскрытие корпуса, специальный кабель и утилита.



Оглавление:
Часть I. Описание, тех. характеристики
Часть II. Подключаем консольный кабель
Часть III. Boot Loader, OS Linux 2.6.8.1 и оболочка BusyBox 1.0
Часть IV. Собрал первую тестовую прошивку
Часть V. Процесс сборки/разборки и обновления firmware
Часть VI. Подключение JTAG кабеля

Tags: adsl, bcm6348, broadcom, busybox, d-link, dsl-2640u, firmware, linux, linux embedded, modem, red hat
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 121 comments
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →