2

这是一个快速描述,然后是详细信息。我尝试为 ARM EABI 交叉编译 uClibc。我有自己编译的 Linux 内核,并提取了头文件。我把它放在一个文件夹里。在 uClibc ".config" 文件中,我将变量 KERNEL_HEADERS= 设置为正确的文件夹。事实上,在编译过程中,会找到某个点的头文件。这是一个在中途发现并中断的示例:编译文件

“libc/inet/if_index.c”

该文件将在每个文件中生成一系列链式包含,如下所示:

“libc/inet/netlinkaccess.h”(这会执行以下 linux 标头的#include)

“kernel_hdr/linux/rtnetlink.h”(这个#include下一个)

“kernel_hdr/linux/netlink.h”(这个#include 用于下一个)

“kernel_hdr/linux/kernel.h”(这个尝试并失败了#include)

这就是#include <asm/types.h>破坏链条的原因。这是第一个不是#include <linux/xxx.h>but的<asm/xxx.h>。文件 asm/types.h 存在但未找到。没有警告没有错误。它只是说

“错误:未知类型名称'__kernel_long_t'”

该类型在损坏的系列包含中定义。我什至放了一些很大的语法错误,看看它是否能读懂。没有!我认为处理内核标题文件夹结构识别存在问题。我尝试将内核头文件与 uClibc 常规头文件 (...uClibc/include/) 合并。无论我如何在 .config 文件中设置 KERNEL_HEADERS= (空路径或完整路径),我都会得到完全相同的行为。我不知道如何解决这个问题。

以下是有关我的设置的更多详细信息:

工作站:Ubuntu 16.04 LTS

uClibc 是 3 天前从 GIT 下载的最新版本

来自 Xilinx git 的 Linux 内核版本 4.9.0。(我在 Zynq Dual Cortex A9 上工作)

GCC ARM EABI 来自 Xilinx SDK 2017.1。

使用该工具链,我成功编译了自定义 FSBL(第一阶段引导加载程序)、自定义 Linux 内核(我跳过 u-boot,FSBL 直接加载内核)、设备树并打包整个东西,它在硬件上运行到 rootfs . 我现在正在构建一个自定义 rootfs(busybox 成功,dropbear 等),唯一的失败是我无法编译的这个 uClibc,因为它在某些头文件中找不到一些包含,尽管它们存在。

要构建 uClibc,我从 uClibc 文件夹中使用:

make menuconfig

make clean

make CROSS=arm-linux-gnueabi-

如何让 uClibc 构建找到所有内核头文件?

4

0 回答 0