実験用に OpenWrt パッケージを変更する方法

実験用に OpenWrt パッケージを変更する方法

OpenWrt のドキュメントでは、開発や実験のためにパッケージに素早く変更を加える方法があまり明確ではありません。標準の OpenWrt リポジトリからパッケージを変更する方法についてのステップバイステップの説明はありますか?

答え1

注記:OpenWRT リリース23.05.2ipq806xアーキテクチャ、パッケージが odhcpd-ipv6only例として使用されます。

  1. SDK を解凍する
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. feeds.conf を作成します:
cp feeds.config.default feeds.config

ビルドを高速化するために、feeds.config を最小限に変更します。

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. フィードの更新
./scripts/feeds update -a
  1. ビルドを構成する
./scripts/feeds install odhcpd-ipv6only
  1. .config を更新する
make menuconfig
  • 「ネットワーク」odhcpd-ipv6onlyが選択されていることを確認してください
  1. 建てる

注意: odhcpd-ipv6only を選択した場合でも、パッケージ名は odhcpd のままです。

make -j $(nproc) package/odhcpd/compile
  1. ビルドが成功したら、ダウンロードしたアーカイブからパッケージ ソースのコピーを作成します。

    注意: OpenWrt ビルド プロセスには、ソース コードが変更されないようにする保護機能があります。変更するにはコピーが必要です。

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. 環境変数を設定しSTAGING_DIRて更新するPATH
export STAGING_DIR=~/sdk/staging_dir
PATH=$STAGING_DIR/host/bin:$PATH
  1. パッケージ フォルダーの内容を調べて、ビルド方法のヒントを得ます。
ls ~/sdk/build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/odhcpd-ipv6only/odhcpd-2023-10-24-d8118f6e

odhcpdはninjaでcmakeを使用していることがわかります。

  1. 成功したビルド フォルダーから CMakeCache.txt を複製し、必要な調整を行います。
cp ~/sdk/build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/odhcpd-ipv6only/odhcpd-2023-10-24-d8118f6e/CMakeCache.txt .
  1. CMakeCache.txtを編集する
  • すべての出現箇所を置換
sdk/build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/odhcpd-ipv6only

src
  • また、以下の出現箇所もすべて置き換えます
odhcpd-2023-10-24-d8118f6e

odhcpd
  • 次のライブラリパスをCMAKE_EXE_LINKER_FLAGS:STRING定義に追加します

注: このエントリがネイティブ OpenWrt ビルド プロセス中にどのようにして追加されるかは不明です。アイデアをお持ちの方は、コメントしてください。

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

次のようになります:

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
  • コンパイラの最適化をスキップするには-Osに変更します-OgCMAKE_C_FLAGS:STRING
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. 構築してみる
cmake .
ninja -v

うまくいけば成功です。

  1. srcフォルダ内のCコードを変更する

  2. 再構築

ninja -v
  1. ビルドしたバイナリをrowterにコピーする
scp odhcpd router:/tmp
  1. リモートデバッグを使用する

a) ルーター上でgdbserverを起動する

gdbserver :1234 /tmp/odhcpd

b) ビルド クライアントから gdbserver に接続してデバッグします。(gdb はルーター アドレスを解決できないため、明示的な IP アドレスが必要です)

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

関連情報