OpenWrt 文档对于如何快速更改软件包以进行开发或实验的说明非常模糊。是否有关于如何从标准 OpenWrt 存储库修改软件包的分步说明?
答案1
笔记:以OpenWRT 版本23.05.2
、ipq806x
架构和软件包
odhcpd-ipv6only
为例。
- 解压 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
- 创建 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
- 更新动态
./scripts/feeds update -a
- 配置构建
./scripts/feeds install odhcpd-ipv6only
- 更新 .config
make menuconfig
- “网络”确保选择了 odhcpd-ipv6only
- 建造
注意:即使选择了 odhcpd-ipv6only,包名称仍然是 odhcpd
make -j $(nproc) package/odhcpd/compile
如果构建成功,则从下载的档案中创建包源的副本。
注意: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
- 设置
STAGING_DIR
环境变量并更新PATH
export STAGING_DIR=~/sdk/staging_dir
PATH=$STAGING_DIR/host/bin:$PATH
- 检查包文件夹的内容以获取有关如何构建它的线索。
ls ~/sdk/build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/odhcpd-ipv6only/odhcpd-2023-10-24-d8118f6e
你可以推断出 odhcpd 使用 ninja 的 cmake
- 从成功构建文件夹克隆 CMakeCache.txt 并对其进行必要的调整。
cp ~/sdk/build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/odhcpd-ipv6only/odhcpd-2023-10-24-d8118f6e/CMakeCache.txt .
- 编辑 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
为-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
- 尝试构建
cmake .
ninja -v
希望它能够成功。
更改 src 文件夹中的 C 代码
重建
ninja -v
- 将构建的二进制文件复制到 rowter
scp odhcpd router:/tmp
- 使用远程调试
a) 在路由器上启动 gdbserver
gdbserver :1234 /tmp/odhcpd
b) 从构建客户端连接到 gdbserver 进行调试。(需要明确的 IP 地址,因为 gdb 无法解析路由器地址)
~/sdk/scripts/remote-gdb 192.168.0.1:1234 ~/src/odhcpd/odhcpd