Продолжение предыдущего псто.
Напомню, что если мы используем, например RB951Ui-2HnD, то можно его просто прошивать образом прямо с сайта LEDE и не париться. Но у модификации RB951G-2HnD с гигабитными портами после такой операции "отвалится" Ethernet. Нужно патчить модуль "mach-rb95x.c" и пересобирать заново.
Есличто, сам патч вот:
[Код патча]--- target/linux/ar71xx/files/arch/mips/ath7 9/mach-rb95x.c 2017-12-19 15:04:38.622596336 +0300
+++ target/linux/ar71xx/files/arch/mips/ath7 9/mach-rb95x.c 2017-12-19 15:04:54.938713022 +0300
@@ -261,6 +261,7 @@
return;
ath79_setup_ar934x_eth_cfg(AR934X_ETH_CF G_RGMII_GMAC0 |
+ AR934X_ETH_CFG_RXD_DELAY |
AR934X_ETH_CFG_SW_ONLY_MODE);
ath79_register_mdio(0, 0x0);
@@ -271,6 +272,7 @@
ath79_init_mac(ath79_eth0_data.mac_addr, ath79_mac_base, 0);
ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
ath79_eth0_data.phy_mask = BIT(0);
+ ath79_eth0_pll_data.pll_1000 = 0x6f000000;
ath79_register_eth(0);
К слову сказать, LEDE по сравнению с OpenWRT собирается просто волшебно, с первого раза и практически без танцев с бубном. Видно, что разработчики проделали огромный труд по вылизыванию кода и допиливанию автоматизации процедур компиляции. Примерная последовательность действий будет такой.
- Установить все необходимые пакеты и их зависимости. Для Debian/Ubuntu это:
subversion g++ zlib1g-dev build-essential git python rsync man-db libncurses5-dev gawk gettext unzip file libssl-dev wget
- Скачиваем исходные коды. Если хотим собирать snapshot, то произносим заклинание
git clone https://git.lede-project.org/source.git lede
Где последний параметр указывает на директорию-корень дерева.
Если же мы хотим собирать стабильный релиз, то скачиваем вот этот архив (стабильный релиз на момент написания этого псто) и распаковываем куда-нибудь в удобное нам место. Информацию об актуальных релизах можно посмотреть здесь. - Если мы хотим дополнительно собрать какие-нибудь пакеты, которых нет в официальном репозитарии LEDE, то самое время скачать их исходный код и прописать в файле "feeds.conf.default" путь к соответствующей папке. Например:
src-link chandongle /mnt/somewhere/Chan_Dongle/asterisk13-chan-dongle/asterisk-chan-dongle-master
- Переходим в корневую папку дерева с исходниками и обновляем список того, чего мы хотим собирать:
cd /mnt/somewhere/lede ./scripts/feeds update -a ./scripts/feeds install -a
- Применяем патч(и). Например:
patch -u -p0 < Ethernet.patch
- Самое сложное и самое геморройное. Формируем конфиг для make-а с указанием того, какие пакеты мы хотим собирать. Тут придется провести полчаса-час за разглядыванием менюшек, которые рисует команда
make menuconfig
Особенно сурово придётся помудохаться, если размер встроенной флешки в целевом устройстве сильно ограничен (4 мегабайта и меньше). В случае же с микротиками такой проблемы нет: в 128 мегабайт влезет всё что угодно. Так, я абсолютно не экономил место, включил в комплект Asterisk, IPsec, Midnight Commander, OpenVPN, Joe, драйвера для всех возможных модемов и кучу прочего хлама. В результате получился образ размером 12 мегабайт.
Опять же, в примере с микротиком в графе "Target System" выбираем "Atheros AR7xxx/AR9xxx", в графе "Subtarget" выставляем "Mikrotik devices with NAND/NOR flash", в "Target Profile" указываем "MikroTik RouterBoard (>= 128 MB NAND)". Остальные пункты — по усмотрению в зависимости от конкретной поставленной задачи. Позволю себе только дать два совета.
а) Не отключайте IPv6, даже если он вам не нужен. Сетевые утилиты из-за этого могут "глючить".
б) Флаг "M" (собрать как модуль) не имеет практического смысла когда делаешь образ исключительно для себя-любимого. Выбирайте либо "*" (встроен), либо ничего. - Не забываем сохранить выработанную конфигурацию. Также можно заколхозить несколько разных конфигураций и сохранить их под разными именами. Например, для дома, для работы, для друга Васи и т.д. с разным набором пакетов.
- Подсовываем сборщику нужную конфигурацию в виде файла ".config" в корне дерева с исходниками.
- Запускаем make без параметров. Если свободных ядер процессора много и их не жалко, то можно "make -j N", где N — число ядер плюс один. Разработчики честно предупреждают, что при многопоточной сборке возможно возникновение странных ошибок. И если так произойдет, то в первую очередь нужно попробовать сделать то же самое ещё раз в один поток. Но конкретно у меня с LEDE (в отличие от OpenWRT) не наблюдалось вообще никаких проблем ни разу. Всё компилировалось с первого раза в 5 потоков, что стабильный релиз, что snapshot.
- Выждав некоторое время в зависимости от мощности CPU, получим бинарники в подкаталоге "bin/targets/ar71xx/mikrotik" (для моего примера). Дальше зашиваем их во флешку устройства, как было рассказано в предыдущем посте.
Как-то так. Кто дочитал до этого места, тот молодец.