Grundlegendes Tutorial zur Einführung und Kompilierung von OpenWrt

Über OpenWrt

OpenWRT ist ein hochmodulares und hochautomatisiertes eingebettetes Linux-System mit leistungsstarken Netzwerkkomponenten und Skalierbarkeit und wird häufig in industriellen Steuerungsgeräten, Telefonen, kleinen Robotern, Smart Homes, Routern und VOIP-Geräten verwendet. Gleichzeitig bietet es auch mehr als 100 kompilierte Software, und die Zahl steigt weiter, und das OpenWrt SDK vereinfacht den Prozess der Softwareentwicklung.

Im Gegensatz zu vielen anderen Distributionen für Router ist OpenWRT ein voll ausgestattetes, leicht modifizierbares Router-Betriebssystem, das von Grund auf neu geschrieben wurde. In der Praxis bedeutet dies, dass Sie die gewünschten Funktionen ohne zusätzlichen Aufwand nutzen können und die Unterstützung für diese Funktionen linux kernelweitaus neuer ist als bei den meisten Distributionen.

Vorteile von OpenWrt

Wenn Sie über ein gewisses Verständnis von Linux-Systemen verfügen und Embedded Linux erlernen oder damit in Berührung kommen möchten, ist OpenWRT sehr gut geeignet. Darüber hinaus unterstützt OpenWRT verschiedene Prozessorarchitekturen, egal ob ARM, X86, PowerPC oder MIPS. Es verfügt über bis zu 3.000 Arten von Softwarepaketen, darunter Toolchain (Toolchain), Kernel (Linux-Kernel), Softwarepaket (Pakete) und Root-Dateisystem (rootfs), sodass Benutzer nur ein einfaches make benötigen Befehle können einfach und schnell ausgeführt werden Passen Sie ein eingebettetes System mit bestimmten Funktionen an, um Firmware zu erstellen.

Im Allgemeinen muss der Entwicklungsprozess von eingebettetem Linux, unabhängig davon, ob es sich um einen ARM-, PowerPC- oder MIPS-Prozessor handelt, den folgenden Entwicklungsprozess durchlaufen:

  1. Erstellen Sie eine Linux-Cross-Compilation-Umgebung.
  2. Bootloader erstellen;
  3. Portierung des Linux-Kernels;
  4. Erstellen Sie Rootfs (Root-Dateisystem);
  5. Installieren Sie den Treiber;
  6. Software installieren;

Nachdem Sie sich mit dem grundlegenden Entwicklungsprozess dieser eingebetteten Linux-Geräte vertraut gemacht haben, sind Sie nicht mehr auf [ MIPS ]-Prozessoren und drahtlose Router beschränkt. Sie können versuchen, eingebettetes Linux auf andere Prozessoren oder nicht-drahtlose Routersysteme zu übertragen, Ihre eigene Anwendungssoftware anzupassen, und Erstellen eines vollständigen eingebetteten Produkts.

Kompilieren Sie die OpenWrt-Präambel

Der Kompilierungsprozess von OpenWrt ähnelt einem Repeater, mit Ausnahme der Auswahl von Systemkomponenten besteht fast jede Kompilierung aus dem Kopieren und Einfügen desselben Befehls. Und verstehen Sie die Funktion jedes Befehls und den Zeitpunkt seiner Ausführung, um die bei der Kompilierung aufgetretenen Probleme besser zu lösen und die Firmware reibungsloser zu kompilieren.

Kompilieren Sie das OpenWrt-Basis-Tutorial

1. Bereiten Sie die Kompilierungsumgebung vor

Installieren Sie zunächst das Ubuntu 64bit-System, Ubuntu 20.04 LTS x64 wird empfohlen.
Nicht rootuser verwenden!

adduser openwrt
usermod -a -G sudo openwrt
su openwrt

2. Kompilierungsabhängigkeiten installieren

Geben Sie die Befehlszeile des Terminals ein sudo apt-get updateund geben Sie dann ein

sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 python2.7 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib antlr3 gperf wget curl swig rsync

3. Ziehen Sie den Quellcode

1: LED-Quellcode-Git-Klon https://github.com/coolsnowwolf/lede

2: Offizieller Quellcode-Git-Klon https://git.openwrt.org/openwrt/openwrt.git

3: Tianling-Quellcode git clone -b Zweig, den Sie ziehen möchten --single-branch https://github.com/immortalwrt/immortalwrt

Git-Klon (was die Bedeutung von Klonen und Ziehen darstellt) ist die Open-Source-Adresse des Quellcodes

4. Feeds aktualisieren und herunterladen (am Beispiel des Lede-Quellcodes)

Fügen Sie eine Feed-Quelle eines Drittanbieters hinzu

Feeds hinzufügen:

src-git kenzok https://github.com/kenzok8/openwrt-packages
src-git small https://github.com/kenzok8/small

Suchen Sie die Datei lede/feeds.conf.default

Kopieren Sie die beiden obigen Absätze hinein und speichern Sie sie

Feeds ist ein erweitertes Softwarepaket, das unabhängig vom OpenWrt-Quellcode ist und daher separat abgerufen und aktualisiert werden muss.

Terminal cd führt zum Aufrufen des Quellcodeverzeichnisses:

./scripts/feeds update -a (更新feeds源)
./scripts/feeds install -a (安装feeds源)
# 为了保险建议打两遍和一样就没问题了

5. Einstellungen der Konfigurationsdatei

make menuconfig

Fügen Sie hier eine Bildbeschreibung ein

Grafische Konfigurationsoberfläche

OpenWrt Configuration【OpenWrt配置】

Target System (x86)> 目标系统(x86)

Subtarget (x86_64)> 子目标(x86_64)

Target Profile (Generic)>目标配置文件(通用)

Target Images —> 保存目标镜像的格式

Enable experimental features by default —> 默认情况下启用实验功能

Global build settings —> 全局构建设置

Advanced configuration options (for developers) ---- 高级配置选项(适用于开发人员)

Build the OpenWrt Image Builder 构建OpenWrt图像生成器

Build the OpenWrt SDK构建OpenWrt SDK

Package the OpenWrt-based Toolchain打包基于OpenWrt的工具链

Image configuration —>图像配置

Base system —> 基本系统

Administration —> 管理

Boot Loaders —>引导加载程序

Development —> 开发

Extra packages —> 额外包

Firmware —>固件

Fonts —>字体

Kernel modules —> 内核模块

Languages —>语言

Libraries —> 图书馆

LuCI —> LuCI 软件包

Mail —>邮件

Multimedia —>多媒体

Network —>网络

Sound —> 声音

Utilities —>实用程序

Xorg —>Xorg

Wählen Sie die CPU-Architektur Ihres Routers aus.
Es wird empfohlen, nur die Architektur für die erste Kompilierung auszuwählen und nichts anderes übrig zu lassen, damit die Erfolgsquote bei der Kompilierung höher ist. Wenn Sie die Komponenten nicht anpassen möchten, geben Sie make defconfig ein, wodurch die Kompilierungsumgebung erkannt und eine Standardkonfigurationsdatei für die Kompilierung generiert wird.

6. Laden Sie die dl-Bibliothek (Abhängigkeitsbibliothek) herunter

#下载dl库(国内请尽量全局科学上网)
make -j8 download V=s 

j8 stellt die Anzahl Ihrer CPU-Threads dar, 8=8 Threads

Aber es scheint eine Obergrenze zu geben. Die tatsächliche Geschwindigkeit von mehr als 5 Threads unterscheidet sich nicht wesentlich. Bei einem guten (wissenschaftlichen) Netzwerk kann der Download grundsätzlich innerhalb von 5 Minuten abgeschlossen sein.

find dl -size -1024c -exec ls -l {
    
    } ;

Mit diesem Befehl können unvollständig heruntergeladene Dateien aufgelistet werden (nach meiner Erfahrung beim Kompilieren werden Dateien, die kleiner als 1 KB sind, unvollständig heruntergeladen). Wenn solche Dateien vorhanden sind, können Sie den Befehl find dl -size -1024c -exec rm -f {} ; verwenden Löschen Sie sie und führen Sie dann „make download“ erneut aus, um sie herunterzuladen, und überprüfen Sie sie wiederholt, um sicherzustellen, dass alle Dateien vollständig sind. Dies kann die Erfolgsrate der Kompilierung erheblich verbessern und Zeitverschwendung vermeiden. (Dieser Absatz kann nicht ausgeführt werden)

7. Kompilieren Sie die Firmware

make -j1 V=s

-j1: Mit einem einzelnen Thread kompilieren. Anfänger empfehlen die Single-Thread-Kompilierung, erstens, weil metaphysische Probleme eine hohe Erfolgsquote haben können, und zweitens, weil es bequem ist, Fehlerprotokolle anzuzeigen.
V=s: Detaillierte Protokolle ausgeben, um Fehler zu finden, wenn die Kompilierung fehlschlägt. Darüber hinaus kann so getan werden, als würde der Vollbildcode ausgeführt. Die Ausführung dauert mehrere Stunden und die Vortäuschung ist langlebiger. (auch oben erwähnt)

Ausgabepfad nach Abschluss der Kompilierung:bin/targets

8. Bei Bedarf neu konfigurieren

rm -rf ./tmp && rm -rf .config
make menuconfig
make -j(((((nproc) + 1)) V=s   #(多线程编译失败后自动进入单线程编译,失败则输出详细日志)

9. Kompilieren und ersetzen Sie die Firmware anderer CPU-Architekturen (empfohlener Vorgang)

Beseitigen Sie alte Build-Artefakte

make clean

Nach einem umfangreichen Update des Quellcodes oder einem Kernel-Update ausführen, um die Kompilierungsqualität sicherzustellen. Diese Aktion löscht Dateien in den Verzeichnissen /bin und /build_dir.

Löschen Sie alte Kompilierungsprodukte, Cross-Compilation-Tools, Toolketten und andere Verzeichnisse

make dirclean

Es muss vor dem Kompilieren ausgeführt werden, um die Architektur zu ändern. Dieser Vorgang löscht Dateien in den Verzeichnissen /bin und /build_dir (make clean) sowie Dateien in /staging_dir, /toolchain, /tmp und /logs.

Bereinigen Sie andere Dateien als den OpenWrt-Quellcode (optional)

make distclean

Sofern Sie keine Entwicklung durchführen und planen, in ein Remote-Warehouse wie GitHub zu pushen, ist dies nahezu nutzlos. Dieser Vorgang entspricht dem Ausführen von dirclean sowie dem Löschen von /dl, /feeds-Verzeichnis und .config-Datei.

Wiederherstellen des OpenWrt-Quellcodes im Ausgangszustand (optional)

git clean -xdf

Wenn der Quellcode geändert wird oder längere Zeit nicht kompiliert wurde, wird er verwendet.

Temporäre Dateien löschen

rm -rf tmp

Löschen Sie einige temporäre Dateien, die nach der Ausführung von make menuconfig generiert wurden, einschließlich der Abrufinformationen einiger Softwarepakete. Nach dem Löschen werden die Softwarepakete im Paketverzeichnis neu geladen. Wenn es nicht gelöscht wird, werden einige neu hinzugefügte Softwarepakete nicht angezeigt.

Löschen Sie die Kompilierungskonfigurationsdatei

rm -f .config

Wenn einige Komponenten ohne Löschung abgewählt werden, werden ihre abhängigen Komponenten nicht automatisch gelöscht. Daher wird empfohlen, sie zu löschen, wenn Komponenten angepasst werden müssen.

Für alle Vorgänge sind keine Root-Benutzer erforderlich

Das ist alles für das heutige Tutorial, und ich werde später über die personalisierte Anpassung sprechen.

Die kompilierte Netzwerkplatte ist verfügbar und kann direkt verwendet werden. Download-Adresse: https://pan.wwang.pw

Hinweis: Die Softwarepakete im Paketverzeichnis werden nach dem Löschen neu geladen. Wenn es nicht gelöscht wird, werden einige neu hinzugefügte Softwarepakete nicht angezeigt.

Löschen Sie die Kompilierungskonfigurationsdatei

rm -f .config

Wenn einige Komponenten ohne Löschung abgewählt werden, werden ihre abhängigen Komponenten nicht automatisch gelöscht. Daher wird empfohlen, sie zu löschen, wenn Komponenten angepasst werden müssen.

Für alle Vorgänge sind keine Root-Benutzer erforderlich

Das ist alles für das heutige Tutorial, und ich werde später über die personalisierte Anpassung sprechen.

Supongo que te gusta

Origin blog.csdn.net/u010674953/article/details/129280724
Recomendado
Clasificación