【问题标题】:cross compiler works compiling app but not kernel交叉编译器可以编译应用程序但不能编译内核
【发布时间】:2014-04-21 17:08:19
【问题描述】:

我用 ct-ng 为 arm 编译了一个交叉工具。我通过编译只是打印“hello world”的 hello.c 对其进行了测试,并将其下载到工作板上,它可以工作。 但是用它编译内核并下载到板子上,内核启动失败。根文件系统由同一个交叉工具编译。

该工具的组合是: 内核-2.26.32.61 gcc-4.8.1 glibc-2.17 binutils-2.22 gdb-7.4.1

工作内核版本是 2.26.31.2。我使用交叉工具编译内核2.6.32.61。我确信内核源代码和busybox源代码可以工作,因为通过交叉工具arm-linux-gcc 4.3.2从互联网下载并且一切正常。(我使用busybox制作root fs。)

是同一个内核版本导致的问题吗?

我检查了我在做什么,但仍然找不到。

从串行输出中,第一个错误显示“无法在虚拟地址 00000001 \n pgd = c0004000 处处理内核 NULL 指针取消引用”。

从 System.map 中,我发现“c0004000”映射到“A swapper_pg_dir”。

而且我注意到我的交叉工具编译的坏内核比工作内核小一点,只有 3664B。但我不知道实际缺少什么。

【问题讨论】:

  • 我对较新的 Linux 内核做同样的事情,它可以工作;所以我怀疑需要 Linux 补丁才能使用更新的优化。不过,我会使用 4.8.2。你知道它失败的地方吗?关注this advice 并在使用 4.8.1 编译器启动 Linux 时给出串行输出。
  • 我检查了我在做什么,但仍然找不到。从串行输出中,第一个错误显示“无法在虚拟地址 00000001 \n pgd = c0004000 处处理内核 NULL 指针取消引用”。从 System.map 中,我发现“c0004000”映射到“A swapper_pg_dir”。

标签: linux-kernel arm cross-compiling


【解决方案1】:

曾经我为 4.6 编写的内核遇到类似问题,但使用 4.8 构建。通过将 cflag -ffreestanding 添加到 KBUILD_CFLAGS 进行修复。也许这也是你的情况?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 2014-01-25
    相关资源
    最近更新 更多