Собираем u-boot для WiFi роутера


Опубликовано 29.10.2020 11:42 | Автор: Admin

В данной статье рассматривается:
В данной статье рассмотрим, как собрать свой u-boot для роутеров из общедоступных исходников.

Данная статья это продолжение предыдущие статьи Оживление WIFI роутера WNR1000v2h2. Соответственно собирать мы будем u-boot для роутера WNR1000v2h2.


Ранее не приходилось собирать подобные вещи, под подобные платформы так, что это мой первый опыт.

Путь до выхода готового результата был долгим и тернистым.

Вначале нам надо было определиться, что за архитектура используется в нашем процессоре AR7240 - это архитектура misp и прямой порядок байт (big endian), от нее мы и будем отталкиваться. Обычно при сборке из исходников используют так называемый Toolchains т.е. набор инструментов уже кем-то подготовленный.

Я начал искать. Было найдено много всего, но испробовано:

  • LEDE SDK for AR71xx MIPS (17.01.0 release)
  • Buildroot
  • OpenWrt Toolchain for AR71xx MIPS

Первые два набора муторные и запутанные, требует дополнительного пристального изучения, но на это у меня не было времени.

Третий набор был уже более человеческий, но с ним тоже особо не заладилось. Собрать u-boot из исходников им не вышло.

Было принято решение собрать набор для компиляции своими руками, то и было сделано. Сама сборка набора включает в себя не так много это GNU Binary Utilities и собственно сам компилятор GCC под архитектуру mips. На данном этапе все прошло довольно гладко, потом началась непосредственно сборка u-boot из исходников и тут все прошло без особых проблем. Я получил долгожданный бинарник и писался от счастья, но счастье не было долгим. Залив на роутер я получил полу рабочий загрузчик, он стартовал, но на половине пути зависал. Тут завис и я так, как что делать дальше было не понятно. 

Я начал просматривать исходники в поисках точки зависания, но конечно ничего криминально я не нашел. Далее начались поиски первоисточника т.к. я работал с форком официального проекта и возможно ошибки были внесены автором форка, ну как вы понимаете, я не ничего не нашел. Изыскания в поисках похожих проектов подходящих под мою модель тоже не дали результатов.

Начались творческие изыскания. На просторах интернет прочитал что-то вроде, что не версии компилятора одинаково полезны из чего следует, что нам надо поиграться с версиями компилятора. Отрываем репозиторий и видим, что там с десяток версий компилятора и если их тупо перебирать мы так и до пенсии не успеем, нужен путь короче.

Идем на сайт netgear где у них выложены исходные коды от их железок к некоторым из которых приложены Toolchains и эмпирическим путем вычисляем примерную версию компилятора, что они используют.

Далее скачиваем, собираем, потом опять собираем, заливаем и наслаждаемся проделанной работой.

А теперь к делу.


Процесс сборки u-boot из исходников

Нам понадобится:

  • Развернутая Linux система на виртуальной машине. Я использовал Ubuntu 20.04.1 LTS , развернул на встроенном Hyper-V в Windows10. Linux необходимо настроить на работу с сетью Internet для скачивания необходимых пакетов, а так же не забудьте про SSH для удобства работы . Как установить и настроить ОС Linux мы рассматривать не будем, данного материала полно в интернете.
  • Компилятор gcc-3.4.6 - как было описано выше, версия компилятора очень важна
  • binutils - набор инструментов для создания и управления бинарниками, объектными файлами, библиотеками, данными профилей и ассембленым исходным кодом. 
  • Исходные коды u-boot для WNR1000v2h2 


Приступим:

Устанавливаем необходимы пакеты

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

Хепи енд.



Метки
Linux u-boot Firmware Netgear

Комментариев: 0

 61 |


Добавить комментарий:
Отправить