Для закачки и установки необходимого софта потребуется ~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 кабеля
← Ctrl ← Alt
Ctrl → Alt →
← Ctrl ← Alt
Ctrl → Alt →