Сборка собственной прошивки
Создание собственной прошивки
специально для всех даю краткую инструкцию... всего десяток комманд... для компиляции нужно иметь linux-box (в моем случае Debian GNU/Etch 4.0 развернутый в VMWare для чистоты экспиремента)
Code:
# uname -a
Linux debian 2.6.26-1-amd64 #1 SMP Thu Aug 28 13:32:26 UTC 2008 x86_64 GNU/Linux
подготовим место для сборки и скачали три необходимых файла
Code:
# rm -rf /opt/brcm /opt/broadcom
# ls -la ~/tmp
-rw-r--r-- 1 root root 273177367 2008-09-13 00:12 GPL_1927.ZIP
-rw-r--r-- 1 root root 2015762 2008-09-13 00:12 hndtools-mipsel-uclibc-3.2.3-full.tar.bz2
-rw-r--r-- 1 root root 15256385 2008-09-13 00:12 wl500g-1.9.2.7-10.tar.bz2
выполняем по очереди комманды... вывод каждой не привожу... смысла не вижу (кому нужно могу сделать логи выполнения каждой комманды make)
Code:
# tar -C /opt -zxvf ~/tmp/GPL_1927.ZIP
# mv /opt/broadcom/opt/brcm /opt
# tar -C / -jxvf ~/tmp/hndtools-mipsel-uclibc-3.2.3-full.tar.bz2
# rm /opt/brcm/hndtools-mipsel-uclibc
# ln -sf /opt/brcm/hndtools-mipsel-uclibc-3.2.3-full /opt/brcm/hndtools-mipsel-uclibc
# export PATH=$PATH:/opt/brcm/hndtools-mipsel-uclibc/bin:/opt/brcm/hndtools-mipsel-linux/bin
# tar -C /opt/broadcom/src -jxvf ~/tmp/wl500g-1.9.2.7-10.tar.bz2
# cd /opt/broadcom/src/wl500g-1.9.2.7-10 && make kernel && make
# cd /opt/broadcom/src/gateway && make && make images
в результате получаем все образы
Code:
# ls -la /opt/broadcom/src/gateway/mipsel-uclibc/
total 39880
drwxr-xr-x 5 root root 4096 2008-09-13 00:33 .
drwxr-xr-x 49 root root 4096 2008-09-13 00:18 ..
drwxr-xr-x 40 root root 4096 2008-09-13 00:33 install
drwxr-xr-x 3 root root 4096 2008-09-13 00:26 modules
drwxr-xr-x 14 root root 4096 2008-09-13 00:33 target
-rwx------ 1 root root 3095166 2008-09-13 00:33 target.cramfs
-rw-r--r-- 1 root root 669542 2008-09-13 00:33 vmlinuz
-rw-r--r-- 1 root root 3674112 2008-09-13 00:28 WL320gE-1.9.2.7-10.trx
-rw-r--r-- 1 root root 3674112 2008-09-13 00:29 WL320gP-1.9.2.7-10.trx
-rw-r--r-- 1 root root 3674112 2008-09-13 00:33 WL330gE-1.9.2.7-10.trx
-rw-r--r-- 1 root root 3702784 2008-09-13 00:30 WL500gp-1.9.2.7-10.trx
-rw-r--r-- 1 root root 3698688 2008-09-13 00:32 WL500gpv2-1.9.2.7-10.trx
-rw-r--r-- 1 root root 3706880 2008-09-13 00:27 WL500gx-1.9.2.7-10.trx
-rw-r--r-- 1 root root 3702784 2008-09-13 00:31 WL500W-1.9.2.7-10.trx
-rw-r--r-- 1 root root 3698688 2008-09-13 00:31 WL520gu-1.9.2.7-10.trx
-rw-r--r-- 1 root root 3698688 2008-09-13 00:28 WL550gE-1.9.2.7-10.trx
-rw-r--r-- 1 root root 3768320 2008-09-13 00:33 WL700g-1.9.2.7-10.trx
Создание собственной прошивки
Создание собственной прошивки
makcumka, спасибо все получилось.
Итак, по порядку:
- Ставил на WMware, линух под ядро 2.6. При создании виртуальной машины указывал сетку "host-only", размер винта 8Гб (реально понадобилось меньше 5-ти), 256 оперативки.
- Ставил Debian с CD образов под именем "debian-40r4a-i386-CD-1.iso" и т.д. Ставил стандартную установку, там проблем не ожидается. При запросе параметров сети, выбирал сеть с DHCP-manual, и указывал IP хоста.
- Подготовка к установке нужных пакетов
- заполняем локальный репозиторий. В рутовой консоле выполняем
Вставляем(или монтируем к vmware) cd с маркировкой "debian-40r4a-i386-CD-2.iso".
Повторяем ввод команды для каждого диска. Не уверен, но может быть понадобится только первые четыре.
- Проверяем на наличие и устанавливаем пакет с ssh-сервером
Code:
#aptitude search openssh-server
i openssh-server - Secure shell server, an rshd replacement
#aptitude install openssh-server
После этого у меня при помощи программы TunnelierPortable соединение проходило без проблем.
И далее я все делал через ssh - мне так привычней и удобней.
- Проверка доступности необходимых пакетов.
Вывод не привожу, должен быть аналогичен предыдущему пункту:
Code:
#aptitude search build-essential
#aptitude search libncurses-dev
#aptitude search gawk
#aptitude search flex
#aptitude search zlib1g-dev
Если какой-то пакет не доступен, то нужно повторить заполнение локального репозитария.
- Установка пакетов:
Code:
#aptitude install build-essential
#aptitude install libncurses-dev
#aptitude install gawk
#aptitude install flex
#aptitude install zlib1g-dev
- Копирование исходников в виртуальную машину.
Через SFTP, реализованный в TunnelierPortable, положим в /home/user/tt/ файлы
GPL_1927.zip
hndtools-mipsel-uclibc-3.2.3-full.tar.bz2
wl500g-1.9.2.7-10.tar.bz2
Дальше действовал по инструкции от makcumkи
- Удаляем хвосты(на всякий случай:)
Code:
# rm -rf /opt/brcm /opt/broadcom
- Проверяем, что нужные исходники лежат там, где необходимо
Code:
# ls -la /home/user/tt/
-rw-r--r-- 1 root root 273177367 2008-09-13 00:12 GPL_1927.ZIP
-rw-r--r-- 1 root root 2015762 2008-09-13 00:12 hndtools-mipsel-uclibc-3.2.3-full.tar.bz2
-rw-r--r-- 1 root root 15256385 2008-09-13 00:12 wl500g-1.9.2.7-10.tar.bz2
- Распаковка исходников
Code:
#rm -rf /opt/brcm /opt/broadcom
#tar -C /opt -zxvf /home/user/tt/GPL_1927.ZIP
#mv /opt/broadcom/opt/brcm /opt
#tar -C / -jxvf /home/user/tt/hndtools-mipsel-uclibc-3.2.3-full.tar.bz2
#rm /opt/brcm/hndtools-mipsel-uclibc
#ln -sf /opt/brcm/hndtools-mipsel-uclibc-3.2.3-full /opt/brcm/hndtools-mipsel-uclibc
#export PATH=$PATH:/opt/brcm/hndtools-mipsel-uclibc/bin:/opt/brcm/hndtools-mipsel-linux/bin
#tar -C /opt/broadcom/src -jxvf /home/user/tt/wl500g-1.9.2.7-10.tar.bz2
Делается достаточно долго, но проблем не ожидается.
- Собственно сборка и компиляция:
Code:
#cd /opt/broadcom/src/wl500g-1.9.2.7-10 && make kernel && make
#cd /opt/broadcom/src/gateway && make && make images
При первых проходах вываливались ошибки.
На этом этапе, по совету DemonGloom, я начал подбирать необходимые пакеты, установленные "выше".
- Проверка получившегося
Code:
# ls -la /opt/broadcom/src/gateway/mipsel-uclibc/
total 39880
drwxr-xr-x 5 root root 4096 2008-09-15 16:46 .
drwxr-xr-x 49 root root 4096 2008-09-15 16:33 ..
drwxr-xr-x 40 root root 4096 2008-09-15 16:45 install
drwxr-xr-x 3 root root 4096 2008-09-15 16:34 modules
drwxr-xr-x 13 root root 4096 2008-09-15 16:46 target
-rwx------ 1 root root 3094584 2008-09-15 16:46 target.cramfs
-rw-r--r-- 1 root root 669529 2008-09-15 16:45 vmlinuz
-rw-r--r-- 1 root root 3674112 2008-09-15 16:37 WL320gE-1.9.2.7-10.trx
-rw-r--r-- 1 root root 3674112 2008-09-15 16:39 WL320gP-1.9.2.7-10.trx
-rw-r--r-- 1 root root 3674112 2008-09-15 16:45 WL330gE-1.9.2.7-10.trx
-rw-r--r-- 1 root root 3702784 2008-09-15 16:40 WL500gp-1.9.2.7-10.trx
-rw-r--r-- 1 root root 3698688 2008-09-15 16:43 WL500gpv2-1.9.2.7-10.trx
-rw-r--r-- 1 root root 3706880 2008-09-15 16:35 WL500gx-1.9.2.7-10.trx
-rw-r--r-- 1 root root 3702784 2008-09-15 16:41 WL500W-1.9.2.7-10.trx
-rw-r--r-- 1 root root 3698688 2008-09-15 16:42 WL520gu-1.9.2.7-10.trx
-rw-r--r-- 1 root root 3698688 2008-09-15 16:36 WL550gE-1.9.2.7-10.trx
-rw-r--r-- 1 root root 3768320 2008-09-15 16:46 WL700g-1.9.2.7-10.trx
Можно устанавливать Debian с сети, тогда в настройках виртуальной машину нужно выбирать мост или NAT, и третий пункт (подготовка локального репозитория) не понадобится.
PS. Сейчас будут пробовать перепрошивать.
PPS. Перепрошил - работает. Но почему же размер отличается от оригинального на 94208?
Опыт создания custom firmware
Добрый вечер!
Сегодня весь день провел, разбираясь с toolchain-ом. :)
Мне нужно было, как минимум, скомпилировать модуль ядра hid.o для поддержки моего UPS (Krauler UP-M500VA), который снабжен usb разъемом и поддерживает HID интерфейс.
Попутно я разобрался с процессом создания прошивки. Вот какие проблемы возникли:
(1) Сначала решил попробовать собрать прошивку (версия 1.9.2.7-7f), ничего не меняя в конфигурации, чтобы проверить, что все работает. Все скачал, установил, пропатчил. Но! В самом конце, после компиляции всех исходников, при выполнении make install для окончательной сборки прошивки возникла ошибка с исходниками библиотеки lzma - их не было на нужном месте.
На форуме нашел подсказку попробовать make lzma в каталоге прошивки, но и это не сработало. Покопался в Makefile, показалось что там все в порядке :confused: . Вобщем, пропатчил вручную.
(2) Еще такое дело: когда все-таки собрал, размер моего trx файла оказался на 230КБ меньше, чем оригинальная прошивка Олега. Это тоже очень странно... Как добиться, чтобы размеры совпадали?
(3) Но, моя цель была - модуль hid.o, так что выполнил команду make menuconfig в каталоге src/gateway.
Добавил поддержку hid устройств в секции usb (модуль) и опцию для поддержки устройств hiddev.
Сделал make и тут-то пошли ошибки в файлах drivers/usb/hid-core.c и drivers/usb/hiddev.c.
Путем тщательного анализа до меня дошло, что кто-то патчил код поддержки usb устройств кодом из ядра версии 2.4.25 (тогда как оригинальный код из 2.4.20), но недопатчил!! :rolleyes:
Дело в том что в каталоге drivers/usb/ заменены были все файлы, но header файлы, которыми они пользовались (в моем случае - это include/linux/hiddev.h), были заменены только частично. Пришлось качать исходники ядра 2.4.25 и обновлять файл.
После этого все прекрасно скомпилировалось, я засунул полученный hid.o на работающий роутер и тот увидел мой UPS. Я его немного потестил, все работает прекрасно.
Так что, считаю, патч для этого файла (хотя бы) можно было бы добавить в прошивку. :)
P.S. Оффтоп. Еще в свое время обнаружил, что в библиотеку uClibc при сборке не была включена локаль ru_RU.CP1251, зато включена be_BY.CP1251 (Беларуссия) и они совершенно идентичны (это показал анализ исходников). У меня это было необходимо для svn checkout на роутере, если в именах файлов на сервере встречаются русские буквы.
Может быть, кому-нибудь пригодится.
Создание собственной прошивки
Подскажите пожалуйста, как вообще делать собственные прошивки?
У меня есть wl-520g, но алтернативной прошивки под него нет. Вот и появилась идея, растрясти прошивку от Oleg`а до состояния пригодного для моего устройства. Но немогу толком разобраться, где, что и как делать. Для этого дела есть SUSE Linux 10. Будте так добры, дайте инструкцию по подробней.