在8位Micro上运行Linux? (2012年)

2020-12-23 03:58:13

2012年4月3日,太平洋夏令时间凌晨1点:上传了新的源代码档案。在RAM&上使用FPM模式加速模拟器(6.5KHz-> 10KHz)更改了icache配置,更新了移植指南,包括内核映像&新的较小的ramdisk,新的全图 2012年3月29日,太平洋夏令时间下午7点:上传了新的源代码档案。它具有固定的Makefile,现在包括移植指南,可帮助您将其移植到其他板卡/ CPU

通常,新手会在微控制器论坛上询问他们是否可以在微不足道的8位微型微处理器上运行Linux。结果通常是笑声。在Linux论坛中,常见的问题是询问Linux的最低规格是多少。常见的答案是,它需要32位体系结构,一个MMU和至少一兆字节的RAM以适合内核。该项目旨在(并成功)粉碎这些概念。您在右侧看到的开发板基于ATmega1284p。我也用ATmega644a取得了成功,并取得了同样的成功。该主板没有其他处理器,并且可以启动Linux 2.6.34。实际上,它甚至可以显示完整的Ubuntu堆栈,包括(如果有时间的话)X和gnome。

是的,的确,完整的Linux安装需要兆字节或RAM以及带有MMU的32位CPU。这个项目具有所有这些。首先让我们对RAM进行寻址。如您所见,板上有一个老式的30针SIMM内存模块。这些已用于基于80286的PC。它与ATmega接口,我编写了代码以在规范内对其进行访问和刷新(SDRAM需要不断刷新以避免丢失数据)。有多快?刷新中断每62毫秒发生一次,占用1.5毫秒,因此占用了不到3%的CPU。为了便于编程,一次访问一个字节访问RAM。这导致每秒大约300 KB的最大带宽。

随着对RAM要求的降低,我们有两个要处理。存储不是很难解决的问题。 SD卡很容易与使用SPI对话,而我的项目做到了这一点。 1GB SD卡可以正常工作,尽管512Mb对于该特定文件系统(Ubuntu Jaunty)而言已足够。 ATmega确实有一个硬件SPI模块,但是无论出于什么原因,它都无法正常工作,所以我在接口上做些麻烦。它仍然非常快-大约每秒200千字节。这也给项目增加了一个很好的感觉-可以在任何具有足够引脚的微控制器上完成-无需使用硬件模块。

剩下的就是那讨厌的32位CPU和MMU要求。那么AVR没有MMU,而是8位的。为了克服这一障碍,我编写了一个ARM仿真器。 ARM是我最熟悉的体系结构,它非常简单,可以轻松编写一个仿真器。为什么要写一个而不是移植一个?好吧,移植别人的代码很无聊,再加上我看到的所有仿真器都不是以易于移植到8位设备的方式编写的。因素之一:AVR编译器坚持将ints设置为16位,这样的内容就简单到"(1<< 20)"会给您带来麻烦,产生零。相反,您需要执行"(1UL<< 20)"。不用说拖曳其他人的未知代码库,寻找所有假定为int且可能失败的地方将是一场灾难。另外,我希望有机会编写一个不错的模块化ARM仿真器。所以我做了。

板与现实世界的通信是通过串行端口进行的。目前,它连接到运行minicom的PC上的串行端口,但是可以替代地将键盘和字符LCD连接到板上,使其完全独立。板上也有两个LED。它们发出SD卡访问信号。一读,一写。板上也有一个按钮。按住一秒钟,它将在串行端口上吐出仿真CPU的当前有效速度。 AVR的主频为24MHz(比其现有的20MHz略有超频)

uARM当然不是速度恶魔。引导到bash提示符(" init = / bin / bash"内核命令行)大约需要2个小时。然后再花4个小时来启动整个Ubuntu(" exec init"然后登录)。启动X需要更长的时间。有效的仿真CPU速度约为6.5KHz,这与您期望仿真32位CPU的速度相当。 8位微控制器上的MMU。奇怪的是,一旦启动,该系统就可以使用了。您可以输入命令并在一分钟内得到答复。也就是说,实际上您可以使用它。例如,我今天用它来格式化SD卡。这绝对不是最快的,但我认为它可能是最便宜,最慢,最容易组装,零件数量最少和最低端的Linux PC。该板是用电线手工焊接的,甚至不需要印刷电路板。

Warning: Can only detect less than 5000 characters

原始视频分为几个部分,因为拍摄时我不得不几次更换相机电池。 然后,我将它们拼接在一起,制作了一个长达3个半小时的巨大视频。 视频的原始版本? 在这里,您去了。然后我将有趣的部分剪掉,将它们加速3倍(以适应youtube视频长度限制),然后将您看到的视频嵌入到左侧。 视频中有一个时钟,显示自实时开始以来经过的时间。