So ändern Sie ein OpenWrt-Paket für Experimente

So ändern Sie ein OpenWrt-Paket für Experimente

Die OpenWrt-Dokumentation ist sehr unklar, was die schnellen Änderungen an einem Paket für die Entwicklung oder zum Experimentieren angeht. Gibt es schrittweise Anleitungen zum Ändern eines Pakets aus dem Standard-OpenWrt-Repository?

Antwort1

NOTIZ:Als Beispiel werden OpenWRT-Release 23.05.2, ipq806x-Architektur und -Paket verwendet.odhcpd-ipv6only

  1. SDK entpacken
cd ~/
tar xf openwrt-sdk-23.05.2-ipq806x-generic_gcc-12.3.0_musl_eabi.Linux-x86_64.tar.xz
mv openwrt-sdk-23.05.2-ipq806x-generic_gcc-12.3.0_musl_eabi.Linux-x86_64 sdk
cd ~/sdk
  1. Erstellen Sie feeds.conf:
cp feeds.config.default feeds.config

Ändern Sie feeds.config auf das Minimum, um den Build zu beschleunigen:

src-git-full base https://git.openwrt.org/openwrt/openwrt.git;openwrt-23.05
src-git packages https://git.openwrt.org/feed/packages.git^8e3a1824645f5e73ec44c897ac0755c53fb4a1f8
  1. Feeds aktualisieren
./scripts/feeds update -a
  1. Build konfigurieren
./scripts/feeds install odhcpd-ipv6only
  1. Aktualisieren Sie die .config-Datei
make menuconfig
  • "Netzwerk" Stellen Sie sicher, dass odhcpd-ipv6only ausgewählt ist
  1. Bauen

HINWEIS: Auch wenn odhcpd-ipv6only ausgewählt wurde, lautet der Paketname immer noch odhcpd

make -j $(nproc) package/odhcpd/compile
  1. Wenn der Build erfolgreich ist, erstellen Sie eine Kopie der Paketquelle aus dem heruntergeladenen Archiv.

    HINWEIS: Im OpenWrt-Build-Prozess gibt es Sicherheitsvorkehrungen, die verhindern, dass der Quellcode geändert wird. Um Änderungen daran vornehmen zu können, ist eine Kopie erforderlich.

mkdir ~/src
cd ~/src/
tar xf ~/sdk/dl/odhcpd-2023-10-24-d8118f6e.tar.xz
mv odhcpd-2023-10-24-d8118f6e odhcpd # just to shorten the name
cd odhcpd
  1. Setzen Sie STAGING_DIRdie Umgebungsvariable und aktualisieren Sie diePATH
export STAGING_DIR=~/sdk/staging_dir
PATH=$STAGING_DIR/host/bin:$PATH
  1. Untersuchen Sie den Inhalt des Paketordners, um einen Hinweis darauf zu erhalten, wie er erstellt wird.
ls ~/sdk/build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/odhcpd-ipv6only/odhcpd-2023-10-24-d8118f6e

Sie können daraus schließen, dass odhcpd cmake mit Ninja verwendet

  1. Klonen Sie CMakeCache.txt aus dem erfolgreichen Build-Ordner und nehmen Sie die erforderlichen Anpassungen daran vor.
cp ~/sdk/build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/odhcpd-ipv6only/odhcpd-2023-10-24-d8118f6e/CMakeCache.txt .
  1. CMakeCache.txt bearbeiten
  • Ersetzen Sie alle Vorkommen von
sdk/build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/odhcpd-ipv6only

mit

src
  • Ersetzen Sie auch alle Vorkommen von
odhcpd-2023-10-24-d8118f6e

mit

odhcpd
  • CMAKE_EXE_LINKER_FLAGS:STRINGFügen Sie der Definition den folgenden Bibliothekspfad hinzu

HINWEIS: Es ist ein Rätsel, wie dieser Eintrag während des nativen OpenWrt-Build-Prozesses hinzugefügt wird. Wenn jemand eine Idee hat, kommentieren Sie bitte.

-L/home/user/sdk/staging_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/usr/lib

Es sollte ungefähr so ​​aussehen:

CMAKE_EXE_LINKER_FLAGS:STRING=-L/home/user/sdk/staging_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/usr/lib -DPIC -fpic -specs=/home/user/sdk/include/hardened-ld-pie.specs -znow -zrelro
  • Ändern Sie -Osin -Og, CMAKE_C_FLAGS:STRINGum die Compileroptimierung zu überspringen
CMAKE_C_FLAGS:STRING=-Og -pipe -g3 -fno-caller-saves -fno-plt -fhonour-copts -mfloat-abi=hard -Wformat -Werror=format-security -DPIC -fpic -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro
  1. Versuchen Sie zu bauen
cmake .
ninja -v

Hoffentlich war es ein Erfolg.

  1. Nehmen Sie Änderungen am C-Code im src-Ordner vor

  2. Neuaufbau

ninja -v
  1. Kopieren Sie die erstellte Binärdatei in den Rowter
scp odhcpd router:/tmp
  1. Verwenden des Remotedebuggings

a) Starten Sie gdbserver auf dem Router

gdbserver :1234 /tmp/odhcpd

b) Stellen Sie vom Build-Client aus eine Verbindung zum gdbserver her, um zu debuggen. (Eine explizite IP-Adresse ist erforderlich, da gdb die Routeradresse nicht auflösen kann.)

~/sdk/scripts/remote-gdb 192.168.0.1:1234 ~/src/odhcpd/odhcpd

verwandte Informationen