Данная статья это продолжение предыдущие статьи Оживление WIFI роутера WNR1000v2h2. Соответственно собирать мы будем u-boot для роутера WNR1000v2h2.
Ранее не приходилось собирать подобные вещи, под подобные платформы так, что это мой первый опыт.
Путь до выхода готового результата был долгим и тернистым.
Вначале нам надо было определиться, что за архитектура используется в нашем процессоре AR7240 - это архитектура misp и прямой порядок байт (big endian), от нее мы и будем отталкиваться. Обычно при сборке из исходников используют так называемый Toolchains т.е. набор инструментов уже кем-то подготовленный.
Я начал искать. Было найдено много всего, но испробовано:
Первые два набора муторные и запутанные, требует дополнительного пристального изучения, но на это у меня не было времени.
Третий набор был уже более человеческий, но с ним тоже особо не заладилось. Собрать u-boot из исходников им не вышло.
Было принято решение собрать набор для компиляции своими руками, то и было сделано. Сама сборка набора включает в себя не так много это GNU Binary Utilities и собственно сам компилятор GCC под архитектуру mips. На данном этапе все прошло довольно гладко, потом началась непосредственно сборка u-boot из исходников и тут все прошло без особых проблем. Я получил долгожданный бинарник и писался от счастья, но счастье не было долгим. Залив на роутер я получил полу рабочий загрузчик, он стартовал, но на половине пути зависал. Тут завис и я так, как что делать дальше было не понятно.
Я начал просматривать исходники в поисках точки зависания, но конечно ничего криминально я не нашел. Далее начались поиски первоисточника т.к. я работал с форком официального проекта и возможно ошибки были внесены автором форка, ну как вы понимаете, я не ничего не нашел. Изыскания в поисках похожих проектов подходящих под мою модель тоже не дали результатов.
Начались творческие изыскания. На просторах интернет прочитал что-то вроде, что не версии компилятора одинаково полезны из чего следует, что нам надо поиграться с версиями компилятора. Отрываем репозиторий и видим, что там с десяток версий компилятора и если их тупо перебирать мы так и до пенсии не успеем, нужен путь короче.
Идем на сайт netgear где у них выложены исходные коды от их железок к некоторым из которых приложены Toolchains и эмпирическим путем вычисляем примерную версию компилятора, что они используют.
Далее скачиваем, собираем, потом опять собираем, заливаем и наслаждаемся проделанной работой.
А теперь к делу.
Нам понадобится:
Приступим:
Устанавливаем необходимы пакеты
y1@y1:~$ sudo apt-get update
y1@y1:~$ sudo apt-get install gcc
y1@y1:~$ sudo apt install make
Установка переменных для облегчения дальнейшей работы
root@y1:/home/y1# cd /
root@y1:/# mkdir project && cd project
!папка где мы будем все собирить
root@y1:/project# export WDIR=/project
!наименования исполняемых файлов для собираемого пакета
root@y1:/project# export TARGET=mips-linux
!место куда будет установлены собранные пакеты
root@y1:/project# export PREFIX=/opt/mips_be
root@y1:/project# export PATH="${PATH}":${PREFIX}/bin
!для исправлении ошибки при сборке GCC, актуально только для нашей версии
root@y1:/project# export CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2"
Скачиваем необходимые исходные коды
root@y1:/project# wget http://ftp.gnu.org/gnu/binutils/binutils-2.35.tar.bz2
root@y1:/project# wget http://ftp.gnu.org/gnu/gcc/gcc-3.4.6/gcc-3.4.6.tar.bz2
root@y1:/project# git clone https://github.com/realmicu/uboot-wnrmod2k
Сборка и установка binutils
!распаковываем скаченный архив
root@y1:/project# tar xjf binutils-2.35.tar.bz2
!создаём каталог и входим в него
root@y1:/project# mkdir build-binutils && cd build-binutils
!производим конфигурирование для последующей сборки
root@y1:/project/build-binutils# ../binutils-2.35/configure --target=$TARGET --prefix=$PREFIX
!собираем пакет
root@y1:/project/build-binutils# make
!устанавливаем
!возможно надо перегрузиться после установки
root@y1:/project/build-binutils# make install
!выходим из каталога
root@y1:/project/build-binutils# cd ..
Сборка и установка компилятора GCC
root@y1:/project# tar xjf gcc-3.4.6.tar.bz2
root@y1:/project# mkdir build-gcc-bootstrap && cd build-gcc-bootstrap
root@y1:/project/build-gcc-bootstrap# ../gcc-3.4.6/configure --target=$TARGET --prefix=$PREFIX \
--enable-languages=c --without-headers \
--with-gnu-ld --with-gnu-as \
--disable-shared --disable-threads \
--disable-libmudflap --disable-libgomp \
--disable-libssp --disable-libquadmath \
--disable-libatomic
root@y1:/project/build-gcc-bootstrap# make -j2
root@y1:/project/build-gcc-bootstrap# make install
Заключительный этап, сборка u-boot
root@y1:/project/build-gcc-bootstrap# cd ../uboot-wnrmod2k
!конфигурируем параметры сборки
root@y1:/project/uboot-wnrmod2k# make wnr1000v2_config FLASH_SIZE=4
!собираем
root@y1:/project/uboot-wnrmod2k# make
Если все прошло удачно, то в каталоге project/uboot-wnrmod2k появится u-boot.bin это и есть наш загрузчик, теперь его надо залить на роутер. Как это сделать читайте Оживление WIFI роутера WNR1000v2h2
Скачать файл с нашей ОС можно программой WinSCP
Хепи енд.