【问题标题】:How can I generate kernel headers for an "unknown" embedded ARM system?如何为“未知”嵌入式 ARM 系统生成内核头文件?
【发布时间】:2014-02-12 21:56:19
【问题描述】:

我有一个(旧的)嵌入式系统,我想为其编译程序。我没有工具链,所以我想创建一个。

嵌入式系统有一个“ARM926EJ-S rev 5 (v5l)”CPU,“cat /proc/version”表示它运行“Linux 版本 2.6.20.7”和 GCC 4.0.2。

我听说我必须在构建过程中包含内核头文件。我从 kernel.org 下载 Linux 内核版本 2.6.20,解压缩所有文件并运行“make headers_install ARCH=arm INSTALL_HDR_PATH=~/headers”。这是正确的方法还是我需要特定内核的头文件?

【问题讨论】:

    标签: linux-kernel cross-compiling embedded-linux


    【解决方案1】:

    解压内核。

    make mrproper

    make ARCH=${arch} headers_check

    例如make ARCH=arm headers_check

    make ARCH=${CLFS_ARCH} INSTALL_HDR_PATH=dest headers_install

    这是从内核获取头文件的步骤。

    内核头文件的目的是 -->C 库和编译的程序需要与内核交互 即对于可用的系统调用及其编号、常量定义、数据结构等。 因此编译C库需要内核头文件,很多应用程序也需要它们。

    do I need the header files of the specific kernel?

    kernel-to-userspace ABI 向后兼容

    --> 1) 使用内核headers older than the running kernel will work without problem 使用工具链生成的二进制文件,但won't be able 使用new system calls, data structures, 等。

    -->2) 使用内核头文件newer 的工具链生成的二进制文件 如果他们不使用 最近的功能,否则他们will break

    --->3)使用latest内核头是not necessary,除非访问 需要新的内核功能

    所以在你的情况下内核版本是"Linux version 2.6.20.7"

    您可以使用来自 kernel.org 的 Linux 内核版本 2.6.202.6.21 的内核头文件。

    在这种情况下不会产生任何问题。

    【讨论】:

    【解决方案2】:

    如果您使用标头构建 libc,那应该没问题

    您也应该事先运行make ARCH=arm headers_check

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多