本帖最后由 Xplain 于 2014-6-2 23:08 编辑
一直想好好研究下linux的移植与驱动,所以想自己做块能跑linux的板,自己移植,自己写驱动.本来想做arm9的,但是发现arm9最少得打6层板,主要元件都是PGA的,对个人来说费用高,不好焊,不好调试.所以想用STM32F103+PSRAM的方式,在psram中跑uclinux.因为我见过arm7+psram跑uclinux的实际项目(该cpu没有内部flash,专门用于外扩flash和ram),cpu跑50M左右,还是很不错的,想想STM32F103是cortex-m3的核,比arm7效率高,cpu可以跑到72M,如果跑uclinux效果应该比arm7好多了.
结果板子做出来了,uclinux也移植上去了,移植了一部分驱动,但是效果却让我大跌眼镜,我最想用linux的一个原因就是因为它的网络功能,结果ping localhost都要10几ms,而用uip在内部flash中跑,ping 另一台主机< 1ms.在uclinux中挂载yaffs,写一个8M的文件要几十秒,而uboot下只要几秒的时间(uboot在内部flash中跑).
所以我个人认为stm32f103+psram的方式不适合跑uclinux,uclinux比ucos等其他os要复杂的多,如它从app接收一个socket包,到过底层网络芯片发送出去,中间要使用的cpu指令要比ucos等小型的os要多很多(没具体研究,个人猜测),而且stm32f103这款cpu不像项目中用的arm7,本来就不设计用来在外部ram中跑的,你硬要在外部ram中跑,有点像强奸人家一样,效果肯定会大打折扣.
所以建议准备用类似方案的童鞋,能参考一下我失败的经验.建议想跑linux,还是带mmu,带cache好,带mmu的话,app瞎搞ram还有segment fault,有cache和没cache的区别还是很大的,用while循环跑个led灯,开cache和关cache效果就出来了. |