我如何为我设计的 CPU 制作 Linux OS?
How I could make a Linux OS for a CPU that I designed?
关于架构的背景信息:我刚刚为我要放入 FPGA 的 CPU 设计了一组指令,但我希望能够与 [=85] 兼容=](一个简单的 Linux 系统)但是我刚开始使用这个,我对此了解不多,我确定 Linux 可以在我的 CPU 中使用。我认为 AVR 也支持 Linux,但我不知道这是不是真的,但如果这是真的,我想我的 CPU 也可以。
我的CPU是16位的,它有以下寄存器:
斧
BX
CX
DX
EX
外汇
这个最多可以支持256个(16位寄存器),我也只放了几个寄存器因为不知道会不会给我space我FPGA里的VGA驱动,觉得寄存器文件中可以容纳 8 个以上的寄存器。我的 FPGA 板有一个 Cyclone IV。
程序计数器
或者我的 CPU 的 (PC) 是 16 位。
我的 CPU 使用指向两个寄存器的指针(ARP,BRP)处理数据,并将寄存器的值带到可用于放置 ALU 的值(A,B)的两个输出。为了将数据保存在寄存器中,我也使用了两个指针(CRP、DRP),我指向将存储值的寄存器,指令说明是否要使用指针来保存值,否则,值将被错误地保存在两个寄存器中。
我不知道这些信息是否有用,可以让您了解我是否能够在我的设计中使用 Linux。
太感谢了! ☺
问题:是否可以将 Linux 移植到 16 位架构?
编辑:在获得了将近 3 年的嵌入式系统经验之后,我发现这个问题是多么无知。我无法提供这个问题的答案,因为这个问题被标记为不接受答案。但我会尝试解释为什么将 Linux 本地移植到 16 位 CPU 几乎是不可能的。
真正的Linux需要MMU才能工作,虽然uClinux不需要MMU。 MMU 需要为用户space 程序提供自己的内存地址space,而不会受到其他程序的干扰。
16 位地址 space 太有限了,甚至连 运行 都需要。由于我见过的较小 Linux 安装需要 8MB,这与 16 位地址 space(64 KB)相去甚远。
Linux内核需要Binutils和GCC来编译!
移植 GCC 会非常棘手和棘手,因为 GCC 是为 32 位架构设计的。
我之前提到这几乎是不可能的,但是,您可以进行仿真,并且在外部硬件的帮助下,您可以仿真另一种架构。但那是作弊,不是吗?
http://dmitry.gr/index.php?r=05.Projects&proj=07.%20Linux%20on%208bit
最后,如果您真的想 运行 Linux 自定义 CPU,请从 RISCV 开始。它支持 GCC 和所有必需的工具,再加上 RISCV 就是未来!
如果您真的想在您的自定义 CPU 中 运行 一个 OS,您可以将它移植到 LCC 编译器。 运行转发OS。这是一种更现实的做法。但是,这仍然是一个具有挑战性的问题。
你运气不好。 Linux 需要 32 位系统才能 运行。
关于架构的背景信息:我刚刚为我要放入 FPGA 的 CPU 设计了一组指令,但我希望能够与 [=85] 兼容=](一个简单的 Linux 系统)但是我刚开始使用这个,我对此了解不多,我确定 Linux 可以在我的 CPU 中使用。我认为 AVR 也支持 Linux,但我不知道这是不是真的,但如果这是真的,我想我的 CPU 也可以。 我的CPU是16位的,它有以下寄存器:
斧
BX
CX
DX
EX
外汇
这个最多可以支持256个(16位寄存器),我也只放了几个寄存器因为不知道会不会给我space我FPGA里的VGA驱动,觉得寄存器文件中可以容纳 8 个以上的寄存器。我的 FPGA 板有一个 Cyclone IV。 程序计数器 或者我的 CPU 的 (PC) 是 16 位。 我的 CPU 使用指向两个寄存器的指针(ARP,BRP)处理数据,并将寄存器的值带到可用于放置 ALU 的值(A,B)的两个输出。为了将数据保存在寄存器中,我也使用了两个指针(CRP、DRP),我指向将存储值的寄存器,指令说明是否要使用指针来保存值,否则,值将被错误地保存在两个寄存器中。 我不知道这些信息是否有用,可以让您了解我是否能够在我的设计中使用 Linux。 太感谢了! ☺
问题:是否可以将 Linux 移植到 16 位架构?
编辑:在获得了将近 3 年的嵌入式系统经验之后,我发现这个问题是多么无知。我无法提供这个问题的答案,因为这个问题被标记为不接受答案。但我会尝试解释为什么将 Linux 本地移植到 16 位 CPU 几乎是不可能的。
真正的Linux需要MMU才能工作,虽然uClinux不需要MMU。 MMU 需要为用户space 程序提供自己的内存地址space,而不会受到其他程序的干扰。
16 位地址 space 太有限了,甚至连 运行 都需要。由于我见过的较小 Linux 安装需要 8MB,这与 16 位地址 space(64 KB)相去甚远。
Linux内核需要Binutils和GCC来编译!
移植 GCC 会非常棘手和棘手,因为 GCC 是为 32 位架构设计的。
我之前提到这几乎是不可能的,但是,您可以进行仿真,并且在外部硬件的帮助下,您可以仿真另一种架构。但那是作弊,不是吗? http://dmitry.gr/index.php?r=05.Projects&proj=07.%20Linux%20on%208bit
最后,如果您真的想 运行 Linux 自定义 CPU,请从 RISCV 开始。它支持 GCC 和所有必需的工具,再加上 RISCV 就是未来!
如果您真的想在您的自定义 CPU 中 运行 一个 OS,您可以将它移植到 LCC 编译器。 运行转发OS。这是一种更现实的做法。但是,这仍然是一个具有挑战性的问题。
你运气不好。 Linux 需要 32 位系统才能 运行。