这是一个快速描述,后面是详细信息。 我尝试为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 for next one)
“kernel_hdr / linux / kernel.h”(这个尝试并失败#include)
这是打破链条的#include <asm/types.h>
。这是第一个不是#include <linux/xxx.h>
而是<asm/xxx.h>
的人。文件asm / types.h存在但未找到。没有警告没有错误。它只是说
“错误:未知类型名称'__kernel_long_t'”
该类型是在破碎的系列包含中定义的。我甚至提出了一些大的语法错误,看它是否读取它。不!我认为处理内核头文件夹结构识别存在问题。我试图将内核头与uClibc常规头(... uClibc / include /)合并。无论我如何在.config文件中设置KERNEL_HEADERS =(空路径或完整路径),我都会得到完全相同的行为。我不知道如何解决这个问题。
以下是有关我的设置的详细信息:
工作站:Ubuntu 16.04 LTS
uClibc是GIT 3天前下载的最新版本
Linux内核版本4.9.0来自Xilinx git。 (我在Zynq双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构建查找所有内核头文件?