重新编译OpenWRT-需要哪些“ make”命令来包含所有更改,同时节省未受影响文件的时间

时间:2019-02-06 23:30:16

标签: makefile compilation openwrt

我正在研究对OpenWRT进行各种源更改对路由器的影响。

我已使用git将相关发行版的标签克隆到新的本地分支。我计划修改一下代码,看看是否喜欢任何更改-如果愿意,我稍后会为它们做正式的补丁。编译愉快。但是在进行编译测试修改时,我不清楚如何最小化make要做的工作,以进行任何更改后重新编译。

我知道make旨在通过检测需要下载的文件与已下载/存在的文件以及已更改的文件与未更改的文件来最大程度地减少重新编译。但是我不知道要在编译后为下一次编译而发出的make命令(make clean / make distclean / other)要进行清理,而又不包括前一次运行中过时的工件。

示例:

  • 我运行make menuconfig,设置基本选择(此时无济于事),然后依次选择make downloadmake -j6 -V=sc -d --trace(我知道过度杀伤,可能是重复的,但是没关系)
  • 如果构建成功,我将在输出目录中获得一个.squashfs文件。是的!
  • 我现在想修改git目录中的补丁。或者,也许更改build_dir中某些由上一次运行下载/创建的已下载工具/ python文件中的几行。

    例如make下载并创建~/openwrt/build_dir/target-arm_cortex-a9_musl_eabi/hostapd-wpad-mini中的文件,我编辑它们而不是添加补丁,因为它对于临时测试更简单。

    (我同意我可以为后者添加补丁,并允许他们重新下载,但是在临时重新编译进行测试时,如果 make 保留先前下载的版本,并根据修改后的版本进行构建,而不会强迫它们进行更新,则对我而言,它更简单+更快。可以再次下载或必须为其创建补丁。)
  • 我现在要重新编译。但我想确保make会注意到我对脚本,下载的工具和下载的数据文件(如果有)的更改,并为我构建了一个包含这些内容的新版本,而无需重新下载未更改的文件,删除已修改的文件(因此我每次都必须通过补丁对其进行更改),并且肯定会覆盖现有的输出文件。

我不确定make通常会删除和检查哪些内容,或者它是如何专门为OpenWRT配置的,所以我希望这个问题按要求有效。

我应该发出什么命令来确保我的新版本包括更改,但已下载所有已经找到的文件“视为理所当然”,但如果已对其进行了编辑,则将基于它们重建任何内容?

1 个答案:

答案 0 :(得分:0)

对于编辑源文件的简单示例,我再次运行make。构建过程不需要再次下载文件,但是会重新编译更新的源。要验证是否已构建更新,请确保已更新软件包:例如,hostapd-wpad-mini的软件包应位于~/openwrt/bin/packages/[arch]/base中。 为了节省时间,您可以只将该软件包重新安装到设备上,而不必重新刷新整个映像。您可能需要强制重新安装(opkg --force-reinstall install [package-path]),因为软件包版本不会更改。

被警告:wpad,hostapd,wpa_supplicant是同一代码库的所有不同构建配置,但是对于每种配置,该代码都提取到~/openwrt/build_dir中的单独目录中。修改一种配置的源将不会更新另一种。 (您对hostapd所做的更改实际上不会内置到wpa_supplicant配置中。)为确保您进行了彻底的测试,请使用~/openwrt/package/network/services/hostapd/patches中的补丁更新代码,以便将其应用于所有变体。如果您创建补丁程序的更新,则可以强制清除和重建您感兴趣的软件包:make package/[package-name]/{clean,compile} V=s。这样不会重建南瓜图像,但是如上所述,您可以只安装更新的软件包。

在更改程序包配置时,我总是清理程序包,对其进行更新(./scripts/feeds update [repo-name])并重新生成它。如果软件包的依赖关系发生变化,则需要完整的make make。