MCU Flash中的只读文件系统
来源:互联网 发布:安卓淘宝客户端下载 编辑:程序博客网 时间:2024/06/16 03:14
ROM文件系统
ROM文件系统(ROMFS)是一个由eLua构建的微型的,只读的文件系统,它与C库集成在一起,所以你可以使用标准的POSIX(fopen/fclose/fwrite...)来操作它。它也可以直接通过Lua的io模块来控制。这个文件系统中的文件是eLua二进制镜像中的一部分,所以镜像构建以后它们不能被修改。因为同样的原因,在镜像构建后你不能增加或删除镜像文件。ROMFS不支持子目录。
为了最大化的在不同平台上得以操作的灵活性,ROMFS与构建系统结合在一起。因此,当eLua运行在开发板上时,你可以选择ROMFS中的内容。此外,你可以指定文件系统中所拥有的应用(代替单独的文件),因为相比一个简单的Lua程序来说,更需要一个实际的应用。
使用ROMFS
为了使用ROMFS,在构建eLua前,你得把文件拷贝到rom/文件夹下。记住一个ROMFS文件的最大名字字符数目为14个字符。包括后缀名和文件名之间的点号。确保这些文件名都来自rom/目录下的文件。然后编辑主要的构建脚本(SConstruct)来增加一个新的应用或者修改已经存在的。所有被包含进ROMFS中的应用被定义在Sconstrcut中的romfs数组里。每个应用会在romfs数组里列出它相关的文件。正如下面的代码所示,注意其中有些应用不止需要一个文件。
romfs = { 'bisect' : [ 'bisect.lua' ], 'hangman' : [ 'hangman.lua' ], 'lhttpd' : [ 'index.pht', 'lhttpd.lua', 'test.lua' ], 'pong' : [ 'pong.lua', 'LM3S.lua' ], 'led' : [ 'led.lua' ], 'piano' : [ 'piano.lua' ], 'pwmled' : [ 'pwmled.lua' ], 'tvbgone' : [ 'tvbgone.lua', 'codes.bin' ], 'hello' : [ 'hello.lua' ], 'info' : [ 'info.lua' ], 'morse' : [ 'morse.lua' ], 'dualpwm' : [ 'dualpwm.lua' ], 'adcscope' : [ 'adcscope.lua' ], 'life' : [ 'life.lua' ]}
此后,你需要解决应用到开发板的映射关系。这些关系被定义在Sconstrcut中的另一个数组里,叫做file_list。此数组定义如下,不需要说明文件格式。
file_list = { 'SAM7-EX256' : [ 'bisect', 'hangman' , 'led', 'piano', 'hello', 'info', 'morse' ], 'EK-LM3S8962' : [ 'bisect', 'hangman', 'lhttpd', 'pong', 'led', 'piano', 'pwmled', 'tvbgone', 'hello', 'info', 'morse', 'adcscope' ], 'EK-LM3S6965' : [ 'bisect', 'hangman', 'lhttpd', 'pong', 'led', 'piano', 'pwmled', 'tvbgone', 'hello', 'info', 'morse', 'adcscope' ], 'STR9-COMSTICK' : [ 'bisect', 'hangman', 'led', 'hello', 'info' ], 'PC' : [ 'bisect', 'hello', 'info', 'life' ], 'LPC-H2888' : [ 'bisect', 'hangman', 'led', 'hello', 'info' ], 'MOD711' : [ 'bisect', 'hangman', 'led', 'hello', 'info', 'dualpwm' ], 'STM3210E-EVAL' : [ 'bisect', 'hello', 'info' ], 'ATEVK1100' : [ 'bisect', 'hangman', 'led', 'hello', 'info' ], 'ET-STM32' : [ 'hello', 'hangman', 'info', 'bisect' ], 'EAGLE-100' : [ 'bisect', 'hangman', 'lhttpd', 'led', 'hello', 'info' ] }
然后剩下的工作就是构建eLua了。作为构建过程的一部分,mkfs.py会被调用。此文件会读取romfs下的内容并且输出一个C头文件,此头文件包含了文件系统的二进制描述。使用C代码来操作ROMFS,当你某个时候想使用此文件,在文件名加上前缀/rom/。比如你想打开ROMFS中的一个a.txt文件,你可以这样写:
f = fopen( "/rom/a.txt", "rb" )
如果你想执行一个来自ROMFS中的文件,你可以在shell中输入下面的语句,
eLua# lua /rom/bisect.lua
或者这样也可以执行文件:
> dofile "/rom/bisect.lua"
ROMFS模式
从0.7版本开始,ROMFS可以使用3种不同的方法被加载进二进制镜像文件中:
- 逐字:这是默认方式。所有文件直接被拷贝到ROMFS中,没有经过任何处理。
- 压缩:使用LuaSrcDiet(在eLua中)压缩Lua源代码。这样的话通过不同的转换可以减少Lua源文件的大小。所有来自ROMFS的文件都经过了LuaSrcDiet的处理,并且结果会被写进eLua二进制镜像文件中。这个选项可以产生不错的压缩,唯一的不好是压缩后的lua文件没有那么容易读了。然后,在很多实际操作中,这不算是一个问题。
- 编译:预先编译Lua源文件成二进制。所有lua源文件都经过Lua编译器的操作,结果也会被写入eLua二进制镜像中。这个选型可能减少或者增加ROMFS镜像的大小。但是它最重要的好处是提升了速度(因为eLua首先不需要编译Lua源代码成二进制),而且还减少了RAM的消耗(lua解释器不时会吃掉大量的内存,反过来会造成堆栈溢出而很难发现错误)。
水平有限,若有错误,给出指正。
- MCU Flash中的只读文件系统
- 各变量在MCU中的存放位置ram or flash
- MCu 内部flash操作--读
- mcu的片内flash
- U盘只读文件系统
- 只读文件系统 squashFS
- Ubuntu硬盘只读文件系统
- MCU中的软复位
- Flash文件系统
- Linux文件系统变成只读以后
- 去除文件系统、只读等属性
- CentOS 6.4 文件系统只读故障
- linux xxx/xx: 只读文件系统
- MCU数据处理中的一些心得
- Ubuntu下U盘变成只读,提示“只读文件系统”或“只读文件系统”的问题
- MCU
- c# 中的只读属性
- linux 服务器忽然变成只读文件系统
- Linux shell脚本,Linux下的西红柿时间管理法 II
- dedecms(织梦)标签
- linux 对终端进行读写
- dedecms
- 静态页面和动态页面
- MCU Flash中的只读文件系统
- dedecms标签
- 输出1000以内的水仙花数
- java经典算法_022你用递归算年龄
- 银行系统
- tty与console以及terminal的区别
- JDBC数据库连接池
- Keystone角色配置
- 机房收费系统的退卡和结账