【问题标题】:Compile the Linux kernel using LLVM使用 LLVM 编译 Linux 内核
【发布时间】:2016-06-05 07:02:18
【问题描述】:

我们希望将 Linux 移植到 FPGA 上的单核 RISCV 处理器。同时,Linux 内核将通过 LLVM pass 检测。

我的疑问是: 1. riscv-llvm 工具链是否可以用来编译Linux内核? 2. riscv-llvm 工具链现在是否支持添加自定义pass?

【问题讨论】:

  • 最新版本的 Linux 内核可能可以由 llvm 构建(有项目 llvm.linuxfoundation.org 启用此功能;某些模块/选项前一段时间无法编译)。您的项目中使用的 linux 内核和 llvm 的版本是什么?您可以将自定义通行证添加到任何 llvm,并且有用于 riscv 的 llvm 的源代码。
  • 我们要使用 Linux kernel-2.6.33。我是编译 linux 内核的完整初学者。你能给我一些关于这个过程的教程或建议吗?
  • Rambo,是否有适用于 RISC-V 的 linux 内核 2.6.33?我认为只有版本 github.com/riscv/riscv-linux 不是 2.6 而是 3.14 / 4.1。你不能只编译那个旧内核;需要移植到 RISC-V,这不是初学者的任务。
  • 为什么是 2.6.33?它甚至不是 LTS(2.6.32 直到 2016 年 2 月),它已经 6 岁了。
  • 非常感谢您的友好回复。一开始,我们想在FPGA上实现我的基于RISCV处理器的设计。现在,我们决定基于 gem5 模拟器来做。我有硬件背景(VLSI 设计)。现在,我想实现一个计算机架构项目(包括操作系统、模拟器、编译器......)。所以我必须面对很多挑战。我最初的实验使用的是 Linux kernel-2.6.33,所以我选择了它。听说是如何用 LLVM 编译 Linux 内核,并编写一个 pass 来生成间接跳转/调用指令的目标地址。

标签: llvm riscv


【解决方案1】:

选择的 Linux 版本有两个问题,2.6.33。

第一个问题是这个版本从未被 RISC-V 团队移植到 RISC-V。他们在https://github.com/riscv/riscv-linux 中有 3.14 和 4.1。因此,要在 RISC-V 处理器中启动它,您应该重复所有架构相关部分的移植(arch/ 内核目录)。这是非常复杂的任务,即使有目标 CPU 的移植版本。您可以从 3.14 向后移植某些部分,但 2.6.33 和 3.14 不同,它们之间有几年的演变。 (PORTING 不仅仅是编译,它是编写 30 个文件而没有任何错误或长时间调试的任务。)

第二个问题是 LLVM 只能完全构建具有来自 http://llvm.linuxfoundation.org/ 项目的补丁的现代 Linux 内核版本。在内核的某些部分中使用了不受支持(并且在 clang/llvm 中永远不会支持)的 GCC 扩展。部分构建是可能的,但不能使用 clang 构建旧版 Linux 的两三个组件。

所以,我真的推荐你使用 RISCV 团队的 linux 内核版本,更新的(4.1)更好。

【讨论】:

    猜你喜欢
    • 2013-10-05
    • 1970-01-01
    • 2017-03-09
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 2018-04-19
    相关资源
    最近更新 更多