话说阿圆第一次见到别人用八位机也跑了Linux简直觉得不可思议!八位机怎样可能跑Linux嘛!不过这个挑战真的被一位大神做到了!他就是来自Google的软件工程师Dmitry Grinberg。
仅用ATmega1284P+普通PC的内存条+SD卡即可以做到将Kernel 2.6.34跑起来!不仅能够跑起来,假如你有时间等待,大神还可以把带X的ubuntu给你启动了!牛!大家感受下来自大神的蔑视!
那么今天 ,阿圆就带大家来看下大神是怎样在八位机上玩转Linux的。
大神选用的八位机是来自Atmel的ATmega1284P(AVR统治的年代还有好多好玩的东西,包括在AVR上运行的Java虚拟机,怀念啊)。选好MCU后就主要克服以下几个大问题了!
这就是今天的主角啦!
磁盘空间相对来说比较好处理,使用一个SD卡就足够了!做过嵌入式开发的同学们应该知道小的uImage压缩后也就1M多,假如SD卡有512M的话,甚至还可以放得下一个老版本的Ubuntu。尽管ATMega1284P支持SPI,不过大神没有搞定,自己使用GPIO模拟出了SPI总线来读取SD卡,速度也达到了200KB/s,也是够吊了!
这个问题比刚才磁盘空间的限制要难少量,Linux需要的内存都是以M为单位的,想想TP-LINK的一个路由器才不过8M的RAM,真是抠到家了。不过这对大神来说也是小菜。大神使用的是PC机使用的内存条,即SDRAM,很古老。ATmega1284P每62ms产生一次中断,每次花费1.5ms刷新RAM的内容,为了简单起见,都是按字节访问。
事实上,这个问题才是成败的关键,不得不佩服,大神为了实现32-bit的CPU和 MMU(内存管理单元),竟然直接撸了一个ARM模拟器(什么时候阿圆也可以想撸就撸?)!这样就相当于有了一个32bit的ARM CPU,只需从SD卡拿指令,执行即可以了,大神的思路就是吊!
日志的输出是使用最普通的串口实现日志的输出啦,大神还给SD卡的读写加了两个LED,用来指示SD卡的读写。最后加了一个按钮用来在串口输出当前CPU的频率,ATmega1284P被超频到了24MHz.
要问ATmega1284P能有多快,嗯想想也知道快不起来,应该问ATmega1284P有多慢,试验证实从上电开始到控制台输出,需要2个小时!是的2个小时!假如是启动Ubuntu的话需要4个小时,假如要启动到X桌面的话,那就不知道要多长时间了!
假如你也想用AVR自己动手做一个的话,大神也分享了uARM的所有源代码及硬件电路原理图(阿圆认为,可能做得了,也等不了吧!尽管这可能是地球上最便宜,最容易制作的Linux开发板了!)
好啦,最后上一段大神玩弄八位机Linux的视频,大家膜拜下~
今天阿圆的分享就到这里啦,谢谢大家~