Описание действия для основной статьи по сборке тестового пакета для роутеров RTU.
Сборка будет производиться на операционной системе Ubuntu 16.04 LTS 64bit, но для остальных ОС на базе Linux принципы очень похожи.
Для ОС 32bit необходимо собирать ImageBuilder для 32bit архитектуры и только после этого собирать кросс-компилятор на 32bit операционной системе. Это достаточно сложные процедуры. Поэтому мы рекомендуем использовать виртуальную среду, в которой можно установить и запустить 64bit Linux систему.
SDK для роутеров аппаратной версии V4 (или с прошивкой версии 3.X.X и выше) доступно по ссылке:
SDK для роутеров аппаратной версии V2 доступно по ссылке:
Все операции будут производиться исключительно через командную консоль (Терминал)!!!
1. Обновление репозиториев и пакетов
Сначала обновим репозитории и пакеты:
sudo apt update sudo apt dist-upgrade
Перезагружаемся для надежности (не обязательно):
sudo reboot
После перезагрузки повторяем команду:
sudo apt update
И устанавливаем все необходимые пакеты (subversion, git, g++, libncurses5-dev, zlib1g-dev, libssl-dev, gawk, unzip, build-essential):
sudo apt install subversion git g++ libncurses5-dev zlib1g-dev gawk libssl-dev unzip build-essential
2. Скачивание и настройка SDK
Создаем папку, где будем работать с SDK (Мы должны находиться в своей домашней папке, в которой лежат папки Документы, Изображения и т.д.):
mkdir TELEOFIS_SDK
Переходим в неё:
cd TELEOFIS_SDK/
Скачиваем SDK:
wget https://github.com/teleofis/TELEOFIS-RTU968/blob/main/SDK/OpenWrt-SDK-mxs_gcc-4.8-linaro_uClibc-0.9.33.2_eabi.Linux-x86_64.tar.bz2
3. Распаковка SDK
Распаковываем архив:
bzcat OpenWrt-SDK-mxs_gcc-4.8-linaro_uClibc-0.9.33.2_eabi.Linux-x86_64.tar.bz2 | tar -xvf -
Переходим в директорию SDK:
cd OpenWrt-SDK-mxs_gcc-4.8-linaro_uClibc-0.9.33.2_eabi.Linux-x86_64/
4. Создание и сборка пакета Helloworld
Создаем директорию для пакета Helloworld:
mkdir -p package/helloworld
Переходим в папку для пакета:
cd package/helloworld/
Скачиваем исходные коды:
wget https://github.com/teleofis/TELEOFIS-RTU968/raw/main/SDK/helloworld.tar
Распаковываем в эту же папку:
tar -xvf helloworld.tar
Возвращаемся в папку SDK:
cd ../..
Пробуем запустить сборку:
make menuconfig
Если появились ошибки, стираем возможные конфиги сборок:
ВНИМАНИЕ: Кроме всего прочего будет удалена ваша конфигурация сборки (.config), ваш набор инструментов (toolchain) и все прочие исходные коды. Используйте с осторожностью!
make distclean
Проверяем конфигурацию:
make defconfig
Заново подаем команду на запуск сборки:
make menuconfig
Заходим в меню и ставим в Ulilities галку напротив helloworld:
5. Запуск сборки
Запускаем сборку:
make V=s
Увидим процесс сборки пакета.
Скомпилированный пакет будет лежать по пути:
bin/mxs/packages/base/helloworld_123_321_mxs.ipk
Полный путь от корня:
/home/user/TELEOFIS_SDK/OpenWrt-SDK-mxs_gcc-4.8-linaro_uClibc-0.9.33.2_eabi.Linux-x86_64/bin/mxs/packages/base/helloworld_123_321_mxs.ipk
6. Пересборка пакета
Во время разработки часто необходимо пересобирать пакет заново, чтобы не чистить целиком конфигурацию компилятора, можно воспользоваться командами:
Очистим папку от скомпилированного пакета:
make package/helloworld/clean V=s
Соберем его заново:
make V=s
7. Копирование и установка пакета на роутер RTU
Копируем пакет на роутер RTU (например, через SCP):
scp bin/mxs/packages/base/helloworld_123-321_mxs.ipk root@192.168.88.1:/tmp/
Роутер должен быть подключен к ПК кабелем Ethernet либо быть доступным по сети.
Далее работаем уже непосредственно на роутере RTU:
Устанавливаем пакет:
opkg install /tmp/helloworld_123-321_mxs.ipk
Проверяем работоспособность пакета:
helloworld_oneshot
Увидим ответ от нашей программы:
helloworld: Hi! This is oneshot HELLO
8. Работа с демон-версией пакета Helloworld
Запускаем helloworld демон:
/etc/init.d/helloworld start
За деятельностью демона можно проследить командой:
logread -f | grep helloworld
Остановить helloworld демон можно так же, как и запустить:
/etc/init.d/helloworld stop
9. Возможные проблемы
Как правило, большинство проблем при сборке (чего-то не хватает, не видятся новые пакеты и т.д.) обусловлены либо ошибками в коде, либо отсутствием необходимых пакетов на Вашем ПК (например, с Ubuntu).
При возникновении проблем попробуйте:
make distclean && make menuconfig