Краткая история
Мне стало интересно, как можно скомпилировать код на языке Си для OpenWRT на мой роутер.
В интернете инструкции имеются, но расплывчатые и то им уже по 6-8 лет. Поэтому, в этой статье собрана актуальная информация по компиляции.
Требования
-
WSL (с Ubuntu 22.04+)
(либо VDS/VPS, если по какой-то причине нет возможности установить WSL)
Ищем OpenWRT-SDK
Но, самое важное, стоит учесть, что в зависимости от target platform, скомпилированная вами программа может не подойти всем роутерам одновременно. Это означает, что если вы компилируете из под openwrt-sdk для ath79, то для роутера на платформе (к примеру) arm либо at91 ваша программа работать не будет.
И так, для начала определим target platform. Сделать это можно двумя способами.
-
Посмотрим в веб-интерфейсе openwrt

-
Подключаемся к роутеру по ssh и вводим:
cat /etc/openwrt_release
Определили, дальше ищем OpenWRT-SDK под эту платформу.
По ссылке: https://downloads.openwrt.org/releases/
Как искать?
-
После перехода по ссылке, ищем версию OpenWRT установленную на нашем роутере. У меня это была 23.05.3
-
Жмем targets
-
Исходя из target platform смотрим какая у вас архитектура, у меня это ath79, я ищу её и перехожу по ней
-
Дальше обращаемся снова к target platform, во второй части написан тип, у меня это generic, переходим к нему
-
Переходим в самый низ и находим надпись: Supplementary Files
-
Ищем openwrt-sdk-….

-
Нажимаем по найденному openwrt-sdk ПКМ и копируем ссылку
Установка OpenWRT-SDK
-
Переходим к WSL (
cmd.exe -> wsl) -
Скачаем OpenWRT-SDK. Для этого используем
wget linkи вместо слова link вставляем ссылку просто тыкнув ПКМ. К примеру, должно получится так:wget https://downloads.openwrt.org/releases/23.05.4/targets/ath79/generic/openwrt-sdk-23.05.4-ath79-generic_gcc-12.3.0_musl.Linux-x86_64.tar.xz -
Распакуйте SDK. Для этого используем
tar -xvf filenameи вместо filename вставьте название файла который скачали. Пример:tar -xvf openwrt-sdk-23.05.4-ath79-generic_gcc-12.3.0_musl.Linux-x86_64.tar.xzp.s. распаковка может занять какое-то время, примерно 2-7 минут -
Переходим в распакованную директорию SDK. Используем
cd filename.
Пример:cd openwrt-sdk-23.05.4-ath79-generic_gcc-12.3.0_musl.Linux-x86_64 -
Добавляем пути к компилятору в переменную PATH:
export STAGING_DIR=$PWD/staging_direxport $PATH=$PWD/staging_dir/toolchain-mips_24kc_gcc-12.3.0_musl/binp.s. я подозреваю, что пути могут немного отличаться, будьте внимательны
p.s.s $PWD это переменная в линуксе, которая содержит абсолютный путь -
Проверим, что всё сделано правильно:
mips-openwrt-linux-gcc --version
Выведет такую информацию
Компилируем код
-
Не забудьте выйти из папки компилятора:
cd .. -
Создаем файл
hello.cиспользуя:> hello.c -
Откройте его через vi или nano (либо иной другой редактор).
Если это создает сложности, можете перейти в проводнике Windows по пути:C:\Users\UserNameи найтиhello.cтам, дальше открыв любым удобным редактором -
Вставляем:
#include <stdio.h>
int main()
{
printf("Hello, World!\n");
return 0;
} -
Сохраняем
-
Компилируем:
mips-openwrt-linux-gcc -o hello hello.c -
Готово
Проверяем Hello World на OpenWRT
Нам нужно любым способом доставить полученный hello (бинарный файл) на наш роутер.
Самый удобный вариант как по мне это использование sFTP через FileZilla
Перед этим, надо установить сервер openssh-sftp. Весит он ~68 Килобайт.
Хватает ли у вас места? Смотрим через df -h на строке overlayfs:/overlay (у меня 1.1 Мегабайта свободно)
Вводим opkg update и после обновления пакетов вводим opkg install openssh-sftp-server
Скачиваем FileZilla. В ней Файл -> Менеджер Сайтов -> Новый сайтВ поле Хост вводим IP через который входим по ssh, Пользователь по умолчанию root, а пароль, думаю тут понятно. Далее соединяемся и попадаем в корень /root

Теперь переносим файл hello в этот корень.
Возвращаемся к ssh роутера и даем права на выполнение: chmod +x hello
Вводим ./hello
ссылка на оригинал статьи https://habr.com/ru/articles/835024/



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