• Sky
  • Blueberry
  • Slate
  • Blackcurrant
  • Watermelon
  • Strawberry
  • Orange
  • Banana
  • Apple
  • Emerald
  • Chocolate
  • Charcoal

Search the Community: Showing results for tags 'openwrt'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Main
    • Main
    • Programming
    • Hardware
    • Projects
    • Lessons
    • Other

Blogs

  • Уроки
  • 22 проекта на Omega2

Categories

  • Files

Categories

  • Articles

Calendars

  • Community Calendar

Found 1 result

  1. Информация в целом не новая и так или иначе обсуждалась на множестве ресурсов. Считаю правильным размещение мануала на этот счет здесь, с прицелом именно под наши задачи. Помимо этого - это не простой копи-паст а работа над своим проектом, с проверкой и решением возникающих на сегодняшний день проблем. На всякий случай и для самостоятельной сверки ниже описываемых параметров, вот адрес на Openwrt.org, посвященный Омеге: https://openwrt.org/toh/hwdata/onion/onion_omega2 Настройка производилась на чистом Ubuntu. Погнали: Заходим в папку, в которой будем "разворачиваться". Я делал это в папке Dowloads юзера. Открываем терминал. Устанавливаем необходимые пакеты: sudo apt-get install subversion git sudo apt-get install g++ libncurses5-dev zlib1g-dev gawk libssl-dev unzip make Копируем репозиторий последней версии OpenWrt git clone git://github.com/openwrt/openwrt.git -b v18.06.2 Скачанный репозиторий появится новым каталогом OpenWrt в текущем. Заходим в него cd OpenWrt Обновляем фиды ./scripts/feeds update -a Здесь меня поджидали две неожиданности. Во первых РКН забанил нужные нам адреса! Для решения проблемы читаем тут очень простой способ, либо ищем и решаем вопрос самостоятельно. Вторые грабли - по какой то (я не стал разбираться какой именно) причине, было заявлено об отсутствии необходимой версии Python. Решение этой проблемы: apt install python2.7 python-pip Поскольку попытка обновления фидов завершилась неудачно, повторяем: ./scripts/feeds update -a устанавливаем фиды ./scripts/feeds install -a Практически все подготовили! Командуем: make prereq Будет проверено все ли необходимые пакеты установлены. Если есть недостающие , об этом будет сообщено. Если есть проблемы - устраняем, если все в порядке - запустится тулчейн. Используем стрелки вверх-вниз, пробел и esc. Просто выходим. Запускаем его еще раз: make menuconfig И производим настройку: Target System - Mediatek Ralink MIPS Subtarget - mt76x8 Target Profile - Onion Omega2 Должно получиться вот так Сохраняем, выходим. При такой настройке, вы соберёте "голую" прошивку. Пройдитесь по меню, посмотрите какие модули можно включить, возможно вам нужно больше, чем пустая система! Для полной сборки под нашу платформу (настроенную нами конфигурацию) make или make world Эта команда вызовет следующую последовательность событий: компиляция набора инструментов (toolchain) кросс-компиляцию исходных кодов создание opkg-пакетов создание образа прошивки, готового к прошивке. Команда make world сама выполняет следующую последовательность команд: make target/compile make package/cleanup make package/compile make package/install make package/preconfig make target/install make package/index Вы можете выполнить каждую из них отдельно. Например, если процесс компиляции какого-либо пакета прервался с ошибкой, после устранения ошибки можно продолжить сборку (без удаления уже сделанного): make package/compile make package/install make package/preconfig make target/install make package/index При запуске Make можно (и полезно) использовать следующие параметры: Для отладки - параметр V=xx указывает уровень выдачи сообщений в процессе сборки. Значением V можно указать: 1 или w - выводить путь к каталогу при входе в него и после выхода из него; 99 или s - выводить полную информацию о сборке, обычные сообщения жёлтым, ошибки красным, отладочные чёрным. Примеры: make V=w Трассировка каталогов (путей). make V=s make V=99 Трассировка с полной информацией о сборке. make V=sw Тоже полная трассировка. (Если указать два значения, работает более полный вывод.) Если у вас многоядерный процессор, процесс сборки можно ускорить с использованием параметра -j: make -j 3 Число после j, это количество ядер + 1. Если это приводит к случайным ошибкам сборки запустите компиляцию еще раз, но без параметра -j Ждем, через полчаса-час находим свою прошивку в каталоге ~/ваш каталог/openwrt/bin. Если перед сборкой выбран правильный target, но прошивка получается размером больше допустимого - файлы *sysupgrade.bin и *factory.bin не будут созданы! После сборок и экспериментов с выбором состава прошивки, необходимо почистить систему от полученного мусора , перед новыми сборками. чистимся: make clean - Удаляет содержимое каталогов bin и build_dir. make dirclean - Удаляет содержимое каталогов /bin и /build_dir, а также дополнительно /staging_dir и /toolchain (инструментарий кросс-компиляции). 'Dirclean' - основная команда для полной очистки. make distclean - Удаляет все что вы собрали или настроили, а также удаляет все загруженное из репозитория и исходные коды пакетов. ВНИМАНИЕ : Кроме всего прочего будет стерта ваша конфигурация сборки (.config), ваш набор инструментов (toolchain) и все прочие исходные коды. Используйте с осторожностью! Список репозиториев находится в файле feeds.conf.default А что, если нам требуется собрать лишь одну, собственноручно написанную программу? В принципе - довольно просто, но как всегда и во всём - потребуется выполнение некоторых условий. Поскольку целью поста не является научить вас писать на С или С++, мы будем отталкиваться от кода, который есть во всех учебниках по программированию - "Hello world!". Вот так выглядит этот код на С: /**************** * Helloworld.c * Firs simple c program. *****************/ #include <stdio.h> int main(void) { printf("Hello world!\n\n"); return 0; } Либо вот так, если это С++: /**************** * Helloworld.cpp * Firs simple cpp program. *****************/ #include <iostream> #include <string> using namespace std; int main() { string s = "Hello world!\n\n"; cout << s; return 0; } Создаём файл helloworld с расширением c или cpp соответственно. Далее нам необходимо правильно его разместить и написать с нему соответствующий makefile. Мы разместим для удобства нашу программу в разделе "Utilites". Для этого переходим в каталог package и создаём там каталог helloworld. Как и ранее, предполагаем, что вы уже находитесь в каталоге openwrt, автоматически созданном при скачивании репозитория. cd package mkdir helloworld внутри него создаём каталог src cd helloworld mkdir src В каталоге src располагаем наш исходник. Можете сделать это с помощью вашего любимого текстового редактора, просто скопировав текст из этого поста. В каталоге helloworld создаём файл makefile. Его содержимое, очевидно должно быть разным для разных вариантов программы. Для "c" это: ################################################# # OpenWrt Makefile for helloworld.c program # # Здесь определены большинство используемых в директивах переменных. в # Нам нужно указать базовое описание пакета, # где построить нашу программу, # где найти исходные файлы # и где впоследствии устанавливать # скомпилированную программу # # Будьте осторожны с пробелами в этом файле. # Отступы должны быть именно табуляцией, а не множеством пробелов подряд! # Так же, не должно быть пробелов в конце строк, # которые не являются комментариями! # ################################################# include $(TOPDIR)/rules.mk # Имя и номер релиза пакета PKG_NAME:=helloworld PKG_RELEASE:=1 # Указываем каталог в котором будем производить сборку # $(BUILD_DIR) по умолчанию build_mipsel # в корневом каталоге OpenWrt SDK PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) include $(INCLUDE_DIR)/package.mk # Указываем информацию о пакете для этой программы. # По названиям должно быть понятно без дополнительных переводов и расшифровок. define Package/helloworld SECTION:=utils CATEGORY:=Utilities TITLE:=Helloworld -- prints a message DESCRIPTION:=\ If you can't figure out what this program does, \\\ you're probably brain-dead and need immediate \\\ medical attention. endef # Указываем, что нужно сделать при подготовке для сборки пакета # В нашем случае, необходимо скопировать исходные файлы в каталог сборки. # По умолчанию здесь PKG_SOURCE_URL и PKG_SOURCE чтобы указать адрес для загрузки из сети # Но поскольку наша программа очень проста, мы немного упрощаем define Build/Prepare mkdir -p $(PKG_BUILD_DIR) $(CP) ./src/* $(PKG_BUILD_DIR)/ endef # Нам не нужно определять директивы Build/Configure или Build/Compile # Значения по умолчанию подходят для компиляции такой простой программы # Для более сложных программ (состоящих из множества файлов) - это может быть необходимо! # Указываем, где и как установить программу. Так как у нас есть только один исполняемый # файл - helloworld, мы установим его, скопировав в каталог / bin. # Переменная $(1) указывает на корневой каталог системы OpenWrt. # Переменная $(INSTALL_DIR) - команда подготовки каталога, если он еще не существует. # Переменная $(INSTALL_BIN) даёт команду скопировать бинарный файл из его текущего местоположения # в каталог установки. define Package/helloworld/install $(INSTALL_DIR) $(1)/bin $(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld $(1)/bin/ endef # Эта строка выполнит необходимые команды для компиляции нашей программы. # Для сборки будут использованы все вышеописанные параметры. $(eval $(call BuildPackage,helloworld)) Комментарии достаточно подробны, чтобы получить базовое понимание. Более подробно на тему Makefile можно почитать тут: https://openwrt.org/ru/doc/devel/packages Для "cpp" следующий вариант: ... продолжение в процессе ... Удачи в ваших разработках/экспериментах!