Краткая история
Мне стало интересно, как можно скомпилировать код на языке Си для 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.xz
p.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_dir
export $PATH=$PWD/staging_dir/toolchain-mips_24kc_gcc-12.3.0_musl/bin
p.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
Комментарии (7)
freemorger
09.08.2024 14:00+7Вместо WSL можно просто винду снести и линукс поставить. Я так давно сделал. Впрочем, выбор каждого
salieff
09.08.2024 14:00Очень мудрено описана простейшая история про то, как на хостовом линуксе, с помощью кросс-тулчейна, собрать бинарь, по scp закинуть его на целевой линукс, и там запустить.
Три короткие, очевидные, консольные команды.
Хотя, зашоренному кругозору пользователей WSL, похоже, любое действие, отличное от тыкания F5 в Visual Studio, кажется непостижимой магией :-Dalelam
09.08.2024 14:00+1Не нашел тут ничего мудрённого. Главное расписано - как родной сдк искать и как начать с ним работать. Про всл очень душно вышло. Я например с 2012 года на убунту. Между 2015 и 2020 прилично времени на openWRT потратил и "собирание бинарей в тулчейне хоста и закидывание их на таржет", поэтому пришлось по ссылке перейти, чтобы узнать,что такое WSL. По-моему как раз в контексте тулчейнов openWRT нормальная тема для тех кому это эпизодически нужно и кто софтом рабочим к винде привязан.
coodi
Как все сложно. Раньше у них был гайд, как собирать и удаленно отлаживать приложение на роутере через эклипс. И это работало
coodi
https://web.archive.org/web/20170829085303/https://downloads.openwrt.org/docs/eclipse.pdf
VadimBoev Автор
полезно, спасибо
AndreyFr
Че ж тут сложного. Это просто первые подготовительные шаги.