为旧内核设置 buildroot

Posted

技术标签:

【中文标题】为旧内核设置 buildroot【英文标题】:Setup buildroot for old kernels 【发布时间】:2012-03-10 01:26:28 【问题描述】:

我正在尝试设置 buildroot 以交叉编译自定义应用程序。

/ # uname -a
Linux Venus 2.6.12.6-VENUS #323634 Wed May 25 13:40:36 CST 2011 mips unknown

到目前为止,我在 buildroot 中选择了内核版本 2.6.12.6。现在我遇到了make 命令失败并大喊规则headers_install 未知的问题。

这是完整的输出:

~/buildroot-2011.11$ make
(cd /root/buildroot-2011.11/output/toolchain/linux-2.6.12.6; \
         /usr/bin/make -j2 ARCH=mips \
                HOSTCC="/usr/bin/gcc" HOSTCFLAGS="" \
                HOSTCXX="/usr/bin/g++" \
                INSTALL_HDR_PATH=/root/buildroot-2011.11/output/toolchain/linux headers_install; \
        )
make[1]: Entering directory `/root/buildroot-2011.11/output/toolchain/linux-2.6.12.6'
Makefile:485: .config: Datei oder Verzeichnis nicht gefunden
make[1]: *** Keine Regel, um »headers_install« zu erstellen.  Schluss.
make[1]: Leaving directory `/root/buildroot-2011.11/output/toolchain/linux-2.6.12.6'
make: *** [/root/buildroot-2011.11/output/toolchain/linux/.configured] Fehler 2

我认为问题在于这个旧内核的 makefile 中没有这个选项。

我的下一个尝试是通过替换旧内核来使用新内核 3.2.6 的 Makefile 和脚本目录。

这是输出:

# make
(cd /root/buildroot-2011.11/output/toolchain/linux-2.6.12.6; \
         /usr/bin/make -j2 ARCH=mips \
                HOSTCC="/usr/bin/gcc" HOSTCFLAGS="" \
                HOSTCXX="/usr/bin/g++" \
                INSTALL_HDR_PATH=/root/buildroot-2011.11/output/toolchain/linux headers_install; \
        )
make[1]: Entering directory `/root/buildroot-2011.11/output/toolchain/linux-2.6.12.6'
  CHK     include/linux/version.h
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/unifdef
Makefile:1059: *** Headers not exportable for the mips architecture.  Schluss.
make[1]: Leaving directory `/root/buildroot-2011.11/output/toolchain/linux-2.6.12.6'
make: *** [/root/buildroot-2011.11/output/toolchain/linux/.configured] Fehler 2

不知道我现在可以尝试什么。我该怎么办?

【问题讨论】:

最简单的方法可能是切换到旧版本的 Buildroot。 您好 ekire,我遇到了同样的问题,我需要基于内核 2.6.10 构建 mipsel 工具链。你设法绕过这个问题吗?我会很感激任何信息... 不,我刚刚放弃了那个项目。我换成了 RaspberryPi。 【参考方案1】:

所有构建交叉编译工具链的现代工具都依赖于实现headers_install 目标的内核。因此,正如 Shawn 所建议的,您可以尝试使用较旧的 Buildroot 版本,但我认为我们已经使用 headers_install 很长时间了,所以您必须回到过去,并面临许多其他问题。

升级内核怎么样?

【讨论】:

“你可以尝试使用旧的 Buildroot 版本” -- Buildroot 的早期版本(例如 20070706)没有构建 Linux 内核的能力;它就像它的名字所暗示的那样:构建一个根文件系统。 Buildroot-20080424可以编译Linux内核,但只能回到2.6.20。 “升级内核怎么样?” - 对于具有专有 IP 硬件(如基带无线电、视频)的嵌入式系统的一般情况,此建议是行不通的-over-IP、网络处理器等。这些系统通常与专有固件和其他二进制 blob 一起出售,这些二进制 blob 需要大量供应商支持才能升级内核。【参考方案2】:

如果你用buildroot从头开始使用工具链,你可以自定义工具链的头文件,然后自定义内核来匹配工具链,这样就可以了。

【讨论】:

【参考方案3】:

您必须在文件中将 headers_install 替换为 install

package/linux-fusion/linux-fusion.mk

有线

$(TARGET_CONFIGURE_OPTS) $(MAKE) $(LINUX_FUSION_MAKE_OPTS) INSTALL_MOD_PATH=$(STAGING_DIR) -C $(@D) headers_install

找到here。

【讨论】:

以上是关于为旧内核设置 buildroot的主要内容,如果未能解决你的问题,请参考以下文章

UITextView 以编程方式调整大小,但随后设置为旧的故事板值。

设置win11右键菜单为旧版模式

设置win11右键菜单为旧版模式

设置win11右键菜单为旧版模式

S3保存旧网址,更改回形针配置,将新网址设置为旧网址

为旧版 SDK 部署 iOS 应用程序时,如何对其进行测试?