【发布时间】:2018-10-05 11:39:57
【问题描述】:
有关架构的背景信息:我刚刚为要放入 FPGA 的 CPU 设计了一组指令,但我希望能够与 Linux(一个简单的 Linux 系统)兼容,但我刚开始,我对此不太了解,我确信 Linux 可以在我的 CPU 中服务。我认为 AVR 也支持 Linux,但我不知道这是不是真的,但如果这是真的,我认为我的 CPU 也可以。 我的 CPU 是 16 位的,它有以下寄存器:
-
斧头
-
BX
-
客户体验
-
DX
-
前
-
外汇
这最多可以支持 256 个(16 位寄存器),我也只放了几个寄存器,因为我不知道它是否会给我的 FPGA 中的 VGA 驱动程序空间,认为更多的 8 个寄存器可以容纳注册文件。我的 FPGA 板有一个 Cyclone IV。 程序计数器 或我的 CPU 的(PC)是 16 位。 我的 CPU 使用指向两个寄存器的指针(ARP、BRP)处理数据,并将寄存器的值传递给可用于放置 ALU 的值(A、B)的两个输出。为了将数据保存在寄存器中,我也使用了两个指针(CRP,DRP),这些指针指向将存储值的寄存器,指令说明是否要使用指针来保存值,否则,值会被错误地保存在两个寄存器中。 我不知道这些信息是否有助于让您了解我是否能够在我的设计中使用 Linux。 太感谢了! ☺
问题:是否可以将 Linux 移植到 16 位架构?
编辑:在获得嵌入式系统近 3 年的经验之后,我看到这个问题是多么无知。我无法提供这个问题的答案,因为这个问题被标记为不接受答案。但我将尝试解释为什么将 Linux 原生移植到 16 位 CPU 几乎是不可能的。
-
Real Linux 需要 MMU 才能工作,尽管 uClinux 不需要 MMU。 MMU 需要为用户空间程序提供自己的内存地址空间,而不受其他程序的干扰。
-
16 位地址空间太有限,甚至无法运行所需的内容。因为我见过的较小的 Linux 安装需要 8MB,这与 16 位地址空间(64 KB)相差甚远。
-
Linux 内核需要 Binutils 和 GCC 才能编译!
-
移植 GCC 会非常棘手和棘手,因为 GCC 旨在针对 32 位架构。
-
我之前提到这几乎是不可能的,但是您可以进行仿真,并且在外部硬件的帮助下,您可以仿真另一种架构。但那是作弊,不是吗? http://dmitry.gr/index.php?r=05.Projects&proj=07.%20Linux%20on%208bit
-
最后,如果您真的想在自定义 CPU 上运行 Linux,请从 RISCV 开始。它支持 GCC 和所有必需的工具,再加上 RISCV 就是未来!
如果您真的想在自定义 CPU 中运行操作系统,可以将其移植到 LCC 编译器。运行实时操作系统。这是一种更现实的方法。但是,这仍然是一个具有挑战性的任务。
【问题讨论】:
-
你的架构有编译器吗?即使你有,也很可能永远不会在其中构建 linux,因为它依赖于一些 gcc 特性
-
另外,如果你的 cpu 没有 mmu,linux 将无法工作。还有更多。您最好从一个 hello world 示例开始。
-
@AlexHoppus 这不是真的。 Linux 也可以在无 MMU 的 CPU 上运行。然而 16 位,它不这样做:-)
-
Real Linux 需要一个 MMU。在 MMU-less CPU 上运行的并不是真正的 Linux,只是一个苍白的模仿
-
您至少需要阅读Operating Systems: Three Easy Pieces,然后查看osdev.org
标签: linux linux-kernel linux-device-driver linux-capabilities