如何为我设计的CPU制作Linux操作系统?

如何为我设计的CPU制作Linux操作系统?,linux,linux-kernel,linux-device-driver,linux-capabilities,Linux,Linux Kernel,Linux Device Driver,Linux Capabilities,体系结构的背景信息:我刚刚为CPU设计了一组指令,我将把它放在FPGA中,但我希望它能够与Linux(一个简单的Linux系统)兼容,但我刚刚开始做这个,对此我不太了解,我确信Linux可以在我的CPU中使用。我认为AVR也支持Linux,但我不知道这是不是真的,但如果这是真的,我认为我的CPU也可以。 我的CPU是16位的,它有以下寄存器: 斧头 BX CX DX 前 外汇 这可以支持多达256个(16位寄存器),我也只放了几个寄存器,因为我不知道它是否会给我的FPGA中的VGA驱

体系结构的背景信息:我刚刚为CPU设计了一组指令,我将把它放在FPGA中,但我希望它能够与Linux(一个简单的Linux系统)兼容,但我刚刚开始做这个,对此我不太了解,我确信Linux可以在我的CPU中使用。我认为AVR也支持Linux,但我不知道这是不是真的,但如果这是真的,我认为我的CPU也可以。 我的CPU是16位的,它有以下寄存器:

  • 斧头

  • BX

  • CX

  • DX

  • 外汇

  • 这可以支持多达256个(16位寄存器),我也只放了几个寄存器,因为我不知道它是否会给我的FPGA中的VGA驱动程序提供空间,我认为寄存器文件中可以容纳更多的8个寄存器。我的FPGA板有一个旋风IV。 程序计数器 我的CPU(PC)是16位。 我的CPU使用指向两个寄存器的指针(ARP、BRP)处理数据,并将寄存器的值带到两个输出,这两个输出可用于输入ALU的值(A、B)。为了在寄存器中保存数据,我还使用了两个指针(CRP、DRP),这些指针指向将存储值的寄存器,指令中说,如果指针将用于保存值,否则,值将错误地保存在两个寄存器中。 我不知道这些信息是否有助于让您了解我是否能够在设计中使用Linux。 非常感谢你!☺

    问题:是否可以将Linux移植到16位体系结构

    编辑:经过近3年的嵌入式系统经验,我发现这个问题是多么无知。我无法提供此问题的答案,因为此问题被标记为不接受答案。但我将试图解释为什么将Linux本机移植到16位CPU几乎是不可能的

    • 真正的Linux需要MMU才能工作,尽管有些uClinux不需要MMU。MMU需要为用户空间程序提供自己的内存地址空间,而不受其他程序的干扰

    • 16位地址空间太有限,甚至无法运行所需的内容。正如我所看到的较小的Linux安装需要8MB,这远远超出了16位地址空间(64KB)

    • Linux内核需要Binutils和GCC来编译

    • 移植GCC将非常困难和棘手,因为GCC是针对32位体系结构设计的

    • 我在前面提到,这几乎是不可能的,但是,您可以进行仿真,并且在外部硬件的帮助下,您可以仿真另一个体系结构。但那是作弊,不是吗?

    • 最后,如果您真的想在自定义CPU上运行Linux,请从RISCV开始。它支持GCC和所有必需的工具,加上RISCV就是未来


    如果您确实想在自定义CPU中运行操作系统,可以将其移植到LCC编译器。运行RTOS。这是一种更现实的方法。但是,这仍然是一个挑战。

    你运气不好。Linux需要32位系统才能运行。

    您的体系结构有编译器吗?即使你有,linux也很可能永远不会在其中构建,因为它依赖于一些gcc特性。所以如果你的cpu没有mmu,linux就不能工作。还有更多。你最好从一个hello world的例子开始。@AlexHoppus这不是真的。Linux也在无MMU的CPU上运行。16位,但它不能:-)真正的Linux需要一个MMU。在没有MMU的CPU上运行的并不是真正的Linux,只是一个苍白的模仿者,您至少需要阅读然后再研究一下