Найти в Дзене
etrivia

Собираем OpenWrt для HLK-7628N.

Это продолжение статьи MT7628 и все, все, все. Чтобы создать своё полноценное устройство, придётся собрать свою собственную версию прошивки для модуля. Постоянно спрашивают подробную инструкцию, как это сделать. Наконец-то собрал всё в одном месте и выкладываю тут. Буду всем желающим просто давать ссылку. Помним, что это не учебник и не истина в последней инстанции. Скорее, просто заметки. Создание образа OpenWrt, наверно, не самый сложный, но точно самый пугающий шаг при создании собственного устройства. Состав этой сборки оптимизирован под моё представление об удобной разработке IoT - девайса. Но тут важно хоть как-то начать, потом, поняв, как это работает, каждый может собрать свой вариант. Во время написания данной инструкции использовались следующие версии программ. Linux Mint 22.2 cinnamon (Zara) OpenWrt v23.05.6 Версии важны, ибо постоянно происходят какие-то прямо апокалиптические изменения, разные версии одной и той же ОС вообще непохожи друг на друга. Например, в OpenWrt вер
Оглавление

Это продолжение статьи MT7628 и все, все, все.

Чтобы создать своё полноценное устройство, придётся собрать свою собственную версию прошивки для модуля. Постоянно спрашивают подробную инструкцию, как это сделать. Наконец-то собрал всё в одном месте и выкладываю тут. Буду всем желающим просто давать ссылку.

Помним, что это не учебник и не истина в последней инстанции. Скорее, просто заметки.

Создание образа OpenWrt, наверно, не самый сложный, но точно самый пугающий шаг при создании собственного устройства. Состав этой сборки оптимизирован под моё представление об удобной разработке IoT - девайса. Но тут важно хоть как-то начать, потом, поняв, как это работает, каждый может собрать свой вариант.

Во время написания данной инструкции использовались следующие версии программ.

Linux Mint 22.2 cinnamon (Zara)

OpenWrt v23.05.6

Версии важны, ибо постоянно происходят какие-то прямо апокалиптические изменения, разные версии одной и той же ОС вообще непохожи друг на друга. Например, в OpenWrt версии 20 изменились правила настройки фаервола. А в версии 23 напрочь сменился подход к управлению GPIO. Вплоть до того, что GPIO0, который и в системе был ноль, и в документации на SoC mt7628 остался ноль, теперь GPIO416... 416, чтоб его... В версии 24 теперь не работают SD карточки, совсем не работают. Сменили ядро, а про то, что изменилась работа с карточками, видимо, забыли, хотя уже четыре релиза вышло. Ждём версию 25, посмотрим, какие там сюрпризы будут. Но операционная система бесплатная, жаловаться грех. Да и разные версии не хорошие и не плохие, просто разные. Из Китая модули приходят вообще прошитые версией 14. Поэтому просто следим за версиями и используем ту, которая указана в документации.

Открываем окно терминала и поехали!

Все пути указаны из расчёта на то, что вы находитесь в корневом каталоге пользователя /home/user/. Это каталог куда вы попадаете после старта системы.

1. Настраиваем свой компьютер для работы с системой сборки.

Проверяем, что там нового есть в репозиториях.

sudo apt update

Устанавливаем инструменты для работы с GitHub (там хранятся исходники OpenWrt).

sudo apt install git

Устанавливаем инструменты, компилятор, сборщик, библиотеки, утилиты. Комплект, который понадобится для сборки:

sudo apt install g++ libncurses5-dev zlib1g-dev gawk

sudo apt install libssl-dev unzip make meson

Если вы читаете эту статью, то, скорее всего, новичок в линуксе, порекомендую сразу установить следующие программы:

Кrusader — файловый менеджер. Облегчит работу с файлами. Также в него встроен SFTP-клиент, с помощью которого будем подключаться к создаваемому устройству и работать с файлами на нём, как будто это просто ещё одна папка на нашем компьютере. Удобно.

Kate — текстовый редактор. Ну, редактор он и есть редактор, тут всё понятно.

Tftpd-hpa - TFTP сервер с помощью которого будем заливать прошивку на устройство.

Putty - терминал для подключения по SSH, Telnet и COM порты.

sudo apt install krusader kate tftpd-hpa putty

Всё это можно установить и через графическое приложение "менеджер программ". Но из командной строки удобнее и главное сильно быстрее.

2. Организация рабочего пространства

Создаём каталог куда поместим систему сборки. Обычно это что то типа /project/meteo/ где project папка с проектами, meteo название проекта.

mkdir -p ~/project/meteo

Переходим в созданный каталог.

cd ~/project/meteo

3. Получение исходного кода

Клонируем систему сборки OpenWrt нужной версии на свой компьютер.

git clone https://github.com/openwrt/openwrt.git -b v23.05.6

Будет создан каталог /project/meteo/openwrt/ переходим в него.

cd openwrt

4. Получение и обновление пакетов (feeds)

Да именно так с точкой в начале.

./scripts/feeds update -a

./scripts/feeds install -a

Всё должно пройти гладко. Если выскочат предупреждения (warning) то попробуйте очистить временные файлы

rm -rf tmp/

И снова повторяем две предыдущие команды update/install. В итоге никаких предупреждений быть не должно!

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

5. Настройка периферии.

Открываем в текстовом редакторе файл дерева устройств

openwrt/target/linux/ramips/dts/mt7628an_hilink_hlk-7628n.dts

и добавляем следущее:

Включаем третий UART. Ишем строчки:

&uart1 {

status = "okay";

};

и после них добавляем

&uart2 {

status = "okay";

};

uart2 это третий потому, что счёт идёт с нулевого.

Добавляем поддержку SD-карты:

&sdhci {

status = "okay";

mediatek,cd-low;

};

Включаем I2C:

&i2c {

status = "okay";

};

По умолчанию ножки интерфейса I2C отданы под обычные GPIO. Нужно это отменить. А ножки интерфейсов i2s и wled_an наоборот отдать. Для этого ищем:

&state_default {
gpio {
groups = "i2c";
function = "gpio";
};

};

и cтрочку groups = "i2c"; заменяем на groups = "i2s", "wled_an";

Должно получится так:

&state_default {
gpio {
groups = "i2s", "wled_an";
function = "gpio";
};

};

6. Конфигурируем систему

Запускаем меню конфигурирования системы.

make menuconfig

Появится вот такое окно.

Меню конфигурирования системы.
Меню конфигурирования системы.

Мышка в этом окне работать не будет, поэтому перемещение по меню стрелками, вход в пункты меню Enter, а отмечать выбранные пункты клавишей пробел. Выбранным считается пункт меню перед которым появилась звёздочка <*> или (X) или [*]. После первого нажатия на пробел появляется значёк <M>, после второго нужный <*>. Если напротив нужного пункта меню стоит значок _*_ значит это библиотека которая нужна для какого то из уже выбранных пакетов и она уже подключена автоматически. Оставляем как есть. Не забываем после выбора нажимать кнопку <Save>.

Выбираем устройство для которого создаём прошивку.

Target System (MediaTek Ralink MIPS)

Subtarget (MT76x8 based boards)

Target Profile (HILINK HLK-7628N)

С этими настройками будет собрана прошивка именно для модуля HLK-7628N. Если вы зальёте её в другое устройство или роутер, то скорее всего убьёте это устройство.

Теперь начинаем долгое и нудное перемещение по огромному меню, выбирая нужные настройки, пакеты, библиотеки.

Global build settings

  • Kernel build options
[*] /dev/mem virtual device support

Base system

<*> blockd (Block device automounting)
<*> block-mount (Block device mounting and checking)
<*> wireless-tools (Tools for manipulating Linux Wireless Extensions)

Administration

<*> htop (Interactive processes viewer)

Kernel modules

  • USB Support
<*> kmod-usb-core (Support for USB)
<*> kmod-usb-ohci (Support for OHCI controllers)
<*> kmod-usb-storage (USB Storage support)
<*> kmod-usb-storage-extras (Extra drivers for usb-storage)
<*> kmod-usb2 (Support for USB2 controllers)
  • Filesystems
<*> kmod-fs-ext4 ()
<*> kmod-fs-vfat ()

  • Other modules
<*> kmod-sdhci-mt7620 (MT7620 SDCI{MMC/SD Card Support}
<*> kmod-sdhci-mt7620 (MT7620 SDCI)

  • I2C support
<*> kmod-i2c core (I2C support)
<*> kmod-i2c-mt7628 (MT7628/88 I2C Controller)

Libraries

<*> cJSON (Ultralightweight JSON parser in ANSI C)
<*> libcap (Linux capabilities library library)
<*> libgpiod (Library for interacting with Linux's GPIO character device)
  • Networking
<*> libuhttpd-openssl (libuhttpd (openssl))

Mail

<*> mailsend (A command-line mail sender (with SSL))

Network

<*> netcat (A feature-rich network debugging and exploration tool.)
<*> snmpd (Open source SNMP implementation (daemon))
  • SSH
<*> openssh-sftp-server (OpenSSH SFTP server)
  • Web Servers/Proxies
<*> uhttpd (uHTTPd - tiny, single threaded HTTP server)

Utilities

<*> io (Raw memory i/o utility)

<*> mc (Midnight Commander - a powerful visual file manager)

<*> i2c-tools (I2C tools for Linux)

<*> gpiod-tools (Tools for interacting with GPIO pins)

  • Disc
<*> fdisk (manipulate disk partition table)
  • Filesystem
<*> e2fsprogs (Ext2/3/4 filesystem utilities)
  • Encryption
<*> px5g-mbedtls (X.509 certificate generator (using mbedtls))
  • Terminal
<*> minicom (Terminal emulation program)
  • Boot Loaders
<*> uboot-envtools (read/modify U-Boot bootloader environment)
  • Editors
<*> nano-full (GNU nano text editor (all features, Unicode))

Теперь удаляем лишнее. В основном то что связанно с функциями роутера и поддержкой IPv6.

Global build settings

  • Kernel build options
[ ] Enable IPv4 multicast routing
[ ] Enable IPv6 multicast routing

Base system

[* ] Customize busybox options -> Networking Utilities

[ ] Enable IPv6 support

Kernel modules

  • Netfilter Extensions
< > kmod-nf-ipt6 (Ip6tables core)

Libraries

  • Firewall
< > libip6tc(IPv6 firewall - shared libiptc library)

Network

< > odhcp6c (Embedded DHCPv6-client for OpenWrt)
< > odhcpd (OpenWrt DHCPv6(-PD)/RA Server & Relay and DHCPv4 server)
< > odhcpd-ipv6only (OpenWrt DHCPv6(-PD)/RA Server & Relay)

Сохраняем настройки и выходим. <Save><Exit>

7. Добавляем свои файлы в прошивку.

Есть возможность добавить в прошивку свои файлы. Для этого в каталоге openwrt нужно создать папку files.

mkdir files

В данный момент нет необходимости туда что то добавлять, но можно закинуть в неё какой-нибудь html файл, чтобы встроенному веб серверу было хоть что то показать. Создаём каталог www и помещаем в него index.html.

mkdir files/www

echo "Hello world!" > files/www/index.html

8. Запускаем сборку.

Команда для сборки системы.

make -j5

Где 5 это количество ядер процессора плюс единица.

Первая сборка занимает от 20 минут до пары часов в зависимости от крутизны вашего компьютера. Кстати, это единственная задача из тех, что я видел, где все ядра процессора временами оказываются загруженными на 100%. Повторная сборка занимает гораздо меньше времени.

Во время сборки глядя в монитор стараемся не дышать и вспоминаем все свои грехи.

Если всё пройдёт удачно, в каталоге

/openwrt/bin/targets/ramips/mt76x8/

появится файл

openwrt-ramips-mt76x8-hilink_hlk-7628n-squashfs-sysupgrade.bin

Это и есть готовая прошивка которую будем заливать в наше устройство. Лайфхак, переименуйте этот файл во что то вменяемое, чтобы не набирать длиннющее имя при прошивке. Например в firmware.bin.

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

make clean

P.S.

Точно следуйте инструкции. Возможно, вам покажется, вот тут совсем чуть-чуть изменю, добавлю или уберу лишний пакет, ничего страшного не случится… Поверьте, с большой вероятностью случится!

Для написания этой статьи специально на новый SSD была установлена чистая операционная система, всё проверено и должно работать.

Если сборка всё-таки вылетает с ошибкой, не надо паниковать, отчаиваться, кричать: «Да в гробу я видел эту вашу OpenWrt, жил без неё и дальше проживу». Попробуйте запустить сборку командой make -j1 V=s, будет выведен огромный лог, по последним строчкам которого можно попытаться понять, в чём проблема. Если лог не поможет, можно попытаться собрать минимальную конфигурацию с указанием только устройства. Потом, постепенно добавляя нужные настройки и пакеты, попытаться понять, из-за чего именно происходит сбой.

Удачи! Она вам точно понадобится :)

P.P.S.

Неожиданно статья вызвала скажем так "весьма бурное" :) обсуждение в профильном чатике. Но звучат и замечания сильно по делу. Поэтому статья постепенно дорабатывается и улучшается.

В телеграме есть тематический чат по модулям HLK-7688 и всему, что с этим связано. /HLK-7688/ обсуждение.

Обсуждение этой статьи в комментариях и нашем телеграм-чате. etrivia.

Не забываем про магазин :) Электронные мелочи.

#openwrt #hlk-7628n #mt7628 #hlk-7688