如何修改 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 进行调试。(需要明确的 IP 地址,因为 gdb 无法解析路由器地址)

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

相关内容