首先看一下嵌入式文件系统在嵌入式系统设计中所处的地位。
---> 由底层到应用高层
|0 hardware | 1 bootloader | 2 parameters | 3 kernel | 4 file sysmtem | 5 application |
可见,文件系统是应用的承载体。那么,对一个项目而言,需求设计是最为重要的。确定了需求,才能确定hardware,也才能确定采用合适的kernel,也才能确定采用哪种合适的文件系统,如何组织安排。当决定kernel之后,bootloader基本确定;当决定了文件系统后,parameters才确定。所以,要想建立比较合适的嵌入式文件系统,应该遵循如下步骤:
1、仔细分析项目需求,列出明细。
2、根据需求确定硬件选型。
3、根据硬件选型和需求确定文件系统的类型和内容。
4、根据硬件选型和文件系统来确定内核的配置。
5、最后选择合适的引导加载方式,设定好命令行参数。
6、调试通过。
嵌入式文件系统的制作和裁减并不困难,难得是如何充分考虑到产品的需求,空间效率和时间效率。真是应了一句话:做出来和做的好所需要的技术和能力是不可同日而语的。那么,在平时,就要多利用几种方式,多实践,比较不同方式的优缺点。从实践中了解了,才能在以后的项目中合理的选择。
就一般而言,嵌入式文件系统还是采用层次式的设计方案。一层为根文件系统,一般为只读;二层及以上为用户文件系统,为可读写。针对存储介质是Nor Flash还是Nand Flash,要选择不同的类型。因为嵌入式的最大特点是专用性,文件系统的设计也充分的体现了这一点。不少文件系统为了体现最大优势,往往是以特定存储介质为载体,这样更容易定制,一般不会以通用性为目标的。比如,cramfs,yaffs/yaffs2适合在Nand flash上,jffs/jffs2适合在Nor Flash上,等等。各种文件系统都有优点和缺点,在不同的项目需求中,要选择最适合的文件系统。这样,才能做成一个成功的产品。
最近几天,已经做好了根文件系统,尝试了ramdisk(ext2),cramfs,jffs/jffs2,对MTD有了些了解。随后的目标仍然是建立一个稳定高效的嵌入式平台,尝试不同情况下的定制需求。对嵌入式文件系统涉及到的理论知识也要总结整理一下了。
附记:
《构建嵌入式Linux系统》这本书实践性非常强,虽然有些系统组件的版本已经比较低了,但是仍然具有很高的参考价值。重新翻阅,收获比06年时多了些,可能也有一部分实践经验了吧。
上面的思考还是基于《构建嵌入式Linux系统》建立目标板Linux系统这一节,书中讲述更为全面,很多思想对自己都很有帮助。现在因为产品的最终需求还不是非常明确,所以做的工作就主要是反复实验。用这种方式探索根文件系统的建立过程,以后可以用这个经验为目标板建立完整的根文件系统。