如何修改 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 將 cmake 與 ninja 一起使用

  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
  • 改為-Osin-Og跳過CMAKE_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 進行偵錯。 (需要明確的IP位址,因為gdb無法解析路由器位址)

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

相關內容