ecos文件系统

合集下载

eCos文件系统

eCos文件系统

int (*fo_getinfo) (struct CYG_FILE_TAG *fp, int key, char *buf, int len );
第 3 页 共 19 页

作者:tito
int (*fo_setinfo) (struct CYG_FILE_TAG *fp, int key, char *buf, int len ); };
const char *name, cyg_file *fte );
第 1 页 共 19 页

int (*chdir) ( cyg_mtab_entry *mte, cyg_dir dir, const char *name, cyg_dir *dir_out );
不透明的句柄,它应该封装成在一个文件系统内对一个特定目录的引用。比如它可能是一个 指向描述目录的数据结构的指针或指向一个目录的路径的指针。
使用一个安装表入口指针和一个目录指针来指定当前目录。
__externC cyg_mtab_entry *cdir_mtab_entry; __externC cyg_dir cdir_dir;
int (*stat) ( cyg_mtab_entry *mte, cyg_dir dir, const char *name, struct stat *buf);
int (*getinfo) ( cyg_mtab_entry *mte, cyg_dir dir, const char *name, int key, char *buf, int len );
/*一次可读写多个数据块,目前为 1 */
off_t
uio_offset; /* offset into file this uio corresponds to */

ecos内存管理

ecos内存管理
该函数产生一个可进行固定大小内存分配的定长内存池。堆大小不一定是整个可用内存的大小。定长内存池在速度上要优于变长的。新产生的内存池可以通过句柄对其进行访问。
2、删除内存池
void cyg_mempool_fix_delete(内存池句柄)
该函数删除定长内存池。不要删除正在使用的内存池,否则会引起系统错误。
7、检查是否有线程正等待分配内存
cyg_bool_t cyg_mempool_var_waiting(句柄)
8、取得内存池信息
void cyg_mempool_var_get_info(句柄,要返回的信息结构指针)
注意不定长分配内存时为了避免小碎片影响系统性能,应限定可变内存申请的最小值为一个比较大的数信箱和线程所需内存块
static char memvar[CYGNUM_LWIP_VARMEMPOOL_SIZE];//可变长内存池实体
static cyg_mempool_var var_mempool;//内存池结构体变量,详见kapidata.h.
#include "arch/sys_arch.h"
#include "lwip/sys.h"
#include "lwip/def.h"
#define tick_to_msec(tick) ((u16_t)((tick)*10+1))
#define msec_to_tick(msec) ((cyg_tick_count_t)(msec+9)/10)
***********************
1、创建内存池
void cyg_mempool_fix_create(堆起址,堆大小,内存块大小,返回的内存池句柄,固定内存池结构体)

eCos驱动程序分析

eCos驱动程序分析

1 e o 驱 动 分 析 Os
虽然 e o 的 内 存 和 u l u Cs Ci x一 样 是 平 板 式 管 理 , n 应
Cy Er No e g o s t o f e g o a de a d e y g r y —i — e —e n i g( y —i —h n l —t h n l ,e g—
b r y _ i t 2 *ln,c g u n 3 o ); u ,e g un 3 e y _ it2 p s
Cy Er No e g o r a ( y —i — a d e a d e v i * b f g r y i —b e d e g o h n l —th n l , od u,

构 。这两个结构在 pe ae/o cm n cretic d/ ak g si/o mo /urn/ l e nu
dva. e tb h中声 明
t p d f tu t{ y e e r e s
Cy — r g Er No (*wrt ) … … ) i ( e ; Cy — r g Er No (*r a )( … ); ed …
ps o 是指定读写开始 的位置 。
C g ErNo c g o g t e n i c g o h n l—th n l,e g— y — r y —i— e — o f g( y —i — a de a de y
un 3 e i t 2 k y,v i *b f y _ i t 2 *ln ; od u ,e g u n 3 e )
抽象层等。
e g u n 3 *l n y u n 3 o ) y _ i t2 e ,c g i t 2 p s ;

cg o y _i

linux-ecos

linux-ecos

Linux下建立ecos开发环境本文链接:/s/blog_574d08530100f5rf.html在装好后的Linux系统(此处使用的是Fedora 10)后,开始准备建立ecos 的开发环境1.下载安装tcl/tk工具(linux是fedora10的可以省略这一步,其他系统就不清楚了)方法见我的博客《tcl/tk的安装》,或者google搜索相关的方法也可以地址:/s/blog_574d08530100f5n4.html2.根据ECOS网站/getstart.html的页面说面:Developers wishing to use the pre-built eCos host tools on a Linux host must first ensure that they have libstdc++ v3 (/usr/lib/libstdc++.so.5) installed.先安装:libstdc++ v3以root身份登录超级终端,输入以下命令行yum install compat-libstdc++-33(因为我是Fedora)3.libstdc++ v3 安装完成后,输入以下命令行cd /opt(opt文件夹是我准备放安装ecos开发环境的文件夹)wget --passive-ftpftp:///pub/ecos/ecos-install.tcl(输入这条命令后,可能会出现wget:unable to resolve hostaddress''这样的反馈信息,这说明你的虚拟机没有连上你要下载ecos的站点,多试几次就可以了)成功后继续输入命令sh ecos-install.tcl (现在知道为什么要安装tcl/tk了吧)4.连接成功后,会出现如下图,你准备下载的ECOS站点(总共有25个推荐的站点,一个一个试吧,总有一个站点是你能够下载安装的。

我选的是【20】因为看起来像是台湾的站点)5.接下来是选择交叉编译工具,我用的板子是STM3210E,根据ECOS站点说明,使用的是arm-eabi,于是我就输入了1,然后再输入q。

eCos用户指南之手动配置_翻译

eCos用户指南之手动配置_翻译
这段允许配置工具重载各种包形成配置。大多数信息不应该被编辑。如果需
要增加一个新包或者删除一个已存在的包应该用合适的工具,例如:
$ ecosconfig remove CYGPKG_LIBM
有 两 个 地 方 可 以 编 辑 。 配 置 有 个 名 字 , 这 里 是 eCos ; 有 一 个 描 述
跟着头段的段定义配置的整体。一个典型的例子是:
# ---- toplevel -------------------------------------------------------# This section defines the toplevel configuration object. The only # values that can be changed are the name of the configuration and # the description field. It is not possible to modify the target, # the template or the set of packages simply by editing the lines # below because these changes have wide-ranging effects. Instead # the appropriate tools should be used to make such modifications.
eCos User Guide(Chapter 28.manual Configuration)
eCos 用户指南之手动配置_翻译
翻译:JARI TOOL
1. 编辑一个 eCos 存档文件
eCos 配置信息存放在一个存档文件(savefile)中,典型的是 ecos.ecc, 这个文件既可以通过 GUI 界面配置工具产生,也可以通过命令行 ecosconfig 配 置工具产生。这个文件通常存在于编译树(build tree)的顶层。它是一个文本 文件,允许通过文本编辑器、其它程序或脚本来编辑各种配置选项,也可以在 GUI 配置工具里编辑。

eCos在 STM32移植

eCos在 STM32移植

eCos操作系统在STM32平台的移植一、为何stm32平台选用eCos操作系统1、在对eCos有一点了解的大多数工程师眼中,eCos可能被定位于像ucosII一样级别的嵌入式OS,换句话说,eCos的应用场合应该是类似ARM7、Cortex-M处理器之类的CPU中;2、像ARM7和Cortex-M处理器之类的CPU中,使用的OS大多数是ucosII,而这个OS是收费的,不能商用,相反,eCos是开源免费使用的。

3、对于ARM9以上的高端处理器,工程师更宁愿使用linux、VxWorks、Windows CE、uclinux等OS,而不愿意使用免费但资源匮乏的eCos;二、redboot的移植要在stm32上运行ecos系统,首先要让redboot启动起来,然后再去引导ecos的运行。

下面介绍在stm32开发板上移植redboot并让其从CPU内部flash启动。

1、redboot的作用redboot是ecos的一部分,具体的说,它是ecos系统的一个最小实现,主要用作bootloader,用于引导OS的启动。

可以引导的OS不仅仅是ecos本身,还包括像linux 等其它操作系统。

说起bootloader,很多人可能马上就联想到了u-boot,是的,你现在可以把redboot 视为像u-boot一样的东西。

2、为什么要从CPU内部ROM启动之所以移植的redboot从CPU内部flash启动而不是从内部RAM或者外部SRAM 启动,主要是移植步骤最简单,几乎不需要做任何的修改就可以运行起来。

3、移植redboot到stm32开发板1)、搭建好ecos开发环境的。

2)、打开ecos图形配置工具configtool,如下图所示。

下图中,左边窗口为ecos的配置项窗口,右边窗口从上到下分别为:冲突提示窗口、配置项属性窗口、配置项说明窗口。

3)、设定ecos代码仓库(Repository)位置在ecos图形配置工具configtool界面中,点击Build->Repository,如下图所示。

三种开源嵌入式操作系统的比较

三种开源嵌入式操作系统的比较

;i●■三种开源嵌入式操作系统的比较苟军年(兰州交通大学自动化与电气工程学院甘肃兰州730070)信息科掌【捕要】嵌入式操作系统的性能和选择是大多数嵌入式系统开发都要面临的问题。

比较3种开源嵌入式操作系统嵌入式L i nu x、Q N x和ecos,分析3种开源操作系统的主要性能,并根据分析结果指出各自的适用领域.【关键词】嵌入式操作系统RT O S嵌入式系统中图分类号:TP316.2文献标识码:A文章编号i1671--7597(2008)1110061--01一、三种开曩E O S介绍(一)嵌入式L i M U X.L i n ux是一个类似于U ni x的操作系统,它已经是最为流行的一款开放源代码的操作系统。

嵌入式L i nux由于其源代码公开,人们可以任意修改来满足自己的应用。

像大多数自由软件一样,L i nux遵从G PL,因此使用它无须为每例应用交纳许可证费。

Li nux下的应用软件大量可用,其中大部分都遵从GPL,是开放源代码和免费的。

稳定是L i nu x本身具备的一个很大优点。

内核精悍,运行所需资源少,支持的硬件数量庞大等都是Li nux所具备的.(二)O N X∞。

Q N)【O S是由0N X软件系统有限公司开发的一套实时操作系统,它是一个实时的、可扩展的操作系统,部分遵循了PO S I X( Por t abl e O per a t i ng S ys t em I nt er f ace of U ni x)相关标准,可以提供一个很小的微内核及一些可选择的配合进程。

其内核仅提供4种服务:进程调度、进程阃通信、底层网络通信和中断处理。

(三)e C os。

e C os(e m be dde d C onf i gur a bl e oper a t i ng syst em),即嵌入式可配置操作系统。

它是一个源代码开放的可配置、可移植、面向深度嵌入式应用的实时操作系统。

其最大特点是配置灵活,采用模块化设计,包括内核、c语言库和底层运行包在内的核心部分由不同的组件构成。

eCos在基于ARM7硬件平台上的应用

eCos在基于ARM7硬件平台上的应用

ecos 在基于AR M 7硬件平台上的应用北京航空航天大学钱问发满庆丰耿春明摘要简单介绍e Cos 的体系结构!详细论述e Cos 的可配置机制的实现原理!重点介绍e Cos 在以AT 9l M 55800为核心的AR M 7硬件平台上的移植步骤!结合本系统简要介绍内核的配置方法"最后给出了基于e Cos 应用软件的编写方法"关键词e Cos 可配置机制AR M 7移植硬件平台e Cos (Embedded Confi g urabl e O p erati n g S y st e m >最初是由C yg nus Sol uti ons 公司为面向嵌入式领域而开发的源码公开\具有很强的可移植性和可配置性的9适合于深度嵌入式开发的实时操作系统o 现在e Cos 主要由e Cos-Centri c 公司和e Cos 开源社区共同开发维护o e Cos 的特性9特别是它的可配置性9能有效缩短嵌入式产品的开发周期并降低成本o1eCos 的体系结构及可配置性1.1eCos 体系结构e Cos 采用模块化设计9将不同功能的软件分成不同的组件9使其分别位于系统的不同层次o 这种层次结构实现了e Cos 的可配置性\可移植性\兼容性和可扩展性o 图l 是e Cos 系统的层次结构框图o 硬件抽象层(HAL >使其上层次结构不必关心具体的硬件结构9因此只需对HAL 进行修改就可以使整个e Cos 的应用移植到新的硬件平台上o图1eCos 的层次结构框图内核是e Cos 的一个核心组件9也是系统的一个可选组件9一些较为复杂的应用需要内核的支持o 内核提供了多个可供选择的调度算法9可以很好地支持多任务处理o e Cos 内核提供了一组丰富的同步源语9完全能满足各种嵌入式应用的需求o 内核还负责对中断和例外进行处理9它的中断滞后处理机制保证了系统的实时性o 此外9内核还具有内存分配机制和定时机制9并提供多线程GDB 调试支持o 内核为上层软件和应用软件提供了丰富的AP I 接口函数oRedBoot 是一个无内核的系统引导程序9是e Cos 的一个特殊应用o RedBoot 可以加载e Cos 应用程序9并提供D ebu g 支持9是开发e Cos 系统时非常有用的工具o 设备驱动程序负责对硬件设备进行控制和管理9并完成设备数据的读/写操作o 设备驱动程序自身也采用层次结构9上层驱动程序(相当于一个虚设备>可以调用下层驱动程序(物理设备>o 驱动程序为上层软件提供标准的AP I 函数9应用程序可以使用这些AP I 函数对设备进行访问oe Cos 包含的网络支持包支持完整的TCP /I P 网络协议栈o e Cos 还提供了标准库(ANS I C 库和数学库>\兼容层(POS I X 兼容和uI TRON 兼容>\文件系统等o 作为一种开放软件9e Cos 还可以很方便地容纳第三方软件o1.2可配置性原理e Cos 的一个主要特性就是其可配置特性o 可配置性最终是靠代码中的条件编译来完成的9条件编译是编程语言的特点9并不是e Cos 的原创o 当一个软件工程中的条件编译项的数目和复杂性达到一定程度时9其中有一些条件编译项就会因为存在逻辑上的依赖关系而使条件编译产生冲突o 而如何发现并有效解决这种冲突才是e Cos 可配置性的特点9如图Z 所示9其可配置特性的实现主要由图2可配置机制组件定义语言CDL (C o m p onent D efi n iti on L an g ua g e )\组件仓库ecos .db \图形配置工具confi g too l 三者共同完成O!1"组件定义语言CDL CDL 是e Cos 组件框架中的一个关键部分9e Cos 所有模块的程序包中都包含一个CDL 脚本对该包进行描述并提供配置选项O 以本系统中的串口驱动程序包为例9在该包对应的CDL 中定义了一个名为CYGPKG _I O _SER I AL _AR M _AT 9l 的cdl _p acka g e O 在这个cdl _p acka g e 中详细列出了该包的一些属性9如该包必须在工程已经包含了硬件抽象层包CYGPKG _HAL _AR M _AT 9l 和上层串口I O 包CYGPKG _I O _SER I AL 的情况下才会被使能O 另外9串口的一些常用特性9如波特率\设备名\缓冲区大小等配置选项也是必不可少的O 在一些复杂的CDL 中还会包含对该包中的源程序进行编译时的一些编译选项O 在进行配置的时候9该包还会产生一个包含了各个可配置参数数值的头文件O 当其他包使用由CYGPKG _I O _SER I AL _AR M _AT 9l 包提供的可配置参数时9这个新产生的头文件就会被相关的源文件通过#i ncl ude 语法包含O !2"组件仓库ecos .dbecos .db 是一个包含了所有可用程序包和配置模版的文本文件O 在该文件中9需要注册所有的CDL 包O 在注册时以p acka g e 关键字提供相应包的名称\CDL 脚本文件的文件路径以及对该包的一个简单描述O 在ecos .db 中还会以tar g et 关键字生成配置模版9从而提供目标平台的一些基本组成结构9使目标平台包括所需要的已经注册了的CDL 配置包O !3"图形配置工具confi 9t oo lconfi g t ool 是利用MFC 编写的W i ndo Ws 程序9是e Cos 可配置性的执行者9也可以理解成是CDL 脚本的解释器O 一方面它读取ecos .db 文件中的目标平台和已注册的配置包信息9根据配置包的路径找到相应的CDL 脚本9然后根据脚本中给出的属性向程序员提供图形化的配置信息;另一方面9它还可以接受用户的输入9包括单选按钮\复选框\下拉列表\文本输入等O 当用户保存一个配置时9confi g t ool 会根据CDL 语言的提示生成相应的头文件9也会将指定的头文件从配置包中复制到配置文件所在的工作目录O 无论是生成的头文件还是拷贝的头文件9都会在编译时被源程序所引用O 对于内核源程序9confi g t ool 又可以理解成编译器O 当用户的配置选项被保存并且对工程进行编译时9confi g t ool 会在后台调用真正的编译器GCC 9根据配置包CDL 中的编译选项控制GCC 对所有需要的内核源文件进行编译并生成库文件和对应的链接脚本O 当然confi g t ool 只是对e Cos 内核进行编译9用户的应用程序只需在编译时和由confi g t ool 编译生成的库文件进行链接就可以得到最终的可执行映像文件O2系统硬件框架本系统是一个以AR M 7为核心构成的测控系统9通过对传感器的脉冲信号进行处理而得到待测物料的流量9并通过控制给料器的给料速度达到流量控制的目的O 对于一个有实用价值的测控系统9必须具有人机交互\闭环控制\数据通信和存储等功能O 本课题所研制的流量测控系统的硬件框图如图S 所示O图3流量测控系统硬件框图图S 中9处理器为AR M 7内核的工业级芯片AT 9l M 558009其强大的功能保证了系统的实时性和稳定性的要求O Z MB 的F l ash SST S9VFl 60用来保存程序代码\测量所需的一些参数以及测量结果的简单统计信息O 在工业生产中9经常需要对一次测量中的数据进行历史再现9以便对一些事故或故障进行排查O 本系统通过采用l MB 的大容量RA M 来实现这一功能C 除了用来作为程序运行时的内存外9RA M 还用来实时保存每一时刻的测量数据O USB 总线的通信口用来和现场计算机进行通信9以实现一些更加完善的处理9如数据打印\结果分析\实时数据的硬盘保存等O 分辨率为SZ 0>Z 40的LCD 用来作为系统的显示终端配合4>5的键盘来完成系统的人机交互操作O 对变频器的控制和对温度信号的采集通过485总线完成O 6路脉冲信号是本系统测量功能的核心9通过对这6路脉冲进行处理可以得到流量相关的所有信息O 4~Z 0mA 电流信号用来控制给料系统9以实现闭环控制O 由于在工业环境中使用9对于一些长线连接必须采取隔离措施O 本系统对测量脉冲\485通信信号和4~Z 0mA 电流信号都采取了光电隔离措施O3eCos 在系统上的移植与应用软件编写3.1eCos 内核的移植由于e Cos 内核采用了可配置的模块化设计思想9因此只要修改硬件抽象层HAL的代码和CDL脚本并且在ecos.db中注册就可以应用于新的目标系统HAL又可以细分为S个层次①体系结构抽象层e Cos是可以应用于多种体系结构平台上的操作系统如AR M M I PS PO WERPC等在e Cos发布时已经将这些体系结构层的移植包一同发布了出来本系统的体系结构抽象层是AR M7体系结构抽象层②变体抽象层对于同一种体系结构的处理器各生产厂家会有不同的系列和型号如A t m el的AT9l系列Phili p s的LPC系列等虽然它们都采用AR M7体系结构但是不同的寄存器配置模式和中断处理方法也会影响到e Cos的移植本系统所使用的处理器AT9l M55800使用较为普遍在e Cos开源社区已经有移植好的AT9l M55800变体抽象层的代码和CDL 脚本只需作系统启动后对I O口的赋值情况等少许的改动即可完成对变体抽象层的移植③平台抽象层平台抽象层是对目标系统的整个硬件平台进行抽象包括平台的启动芯片配置定时I O寄存器及中断寄存等等系统需要进行的移植工作主要是平台抽象层的移植而平台抽象层中最重要的是F l ash驱动包和内存布局文件的移植主要的步骤为①安装AT9l M55800变体抽象层包从e Cos开源社区下载好的变体抽象层包在一个名为eb55的文件夹中在这个文件夹中还有cdl i ncl ude src等子文件夹分别包含了CDL脚本头文件源文件由于e Cos的软件包有严格的层次结构所以在安装软件包时应遵循这一结构以便于维护AT9l M55800属于AR M7的一个变体同AT9l系列的其他CP U处于同一层次所以变体抽象层软件包文件夹eb55的具体路径应为hal ar m at9l eb55接下来还应在ecos.db中注册变体抽象层包以p acka g e 关键字注册名为CYGPKG_HAL_AR M_AT9l_EB55的包这个名字必须和包中CDL文件hal_ar m_at9l_eb55.cdl中的所定义的包名完全一致在包名后面的花括号中登记hal_ar m_at9l_eb55.cdl文件的路径及文件名以及对该包的简单文字说明②编写F l ash的底层驱动软件包以便能够操作目标系统的F l ash存储器由于本系统在前期调试和代码固化时利用了RedBoot而RedBoot通过F l ash驱动程序操作目标F l ash所以必须先移植好F l ash驱动程序才能进行更进一步的开发工作首先需要编写底层驱动程序源文件不同的F l ash 的块空间大小以及写操作一般是不一样的本系统所用的F l ash SST S9VFl60是Z MB的l6位NOR F l ash共有5l Z0XZ00个块空间其块大小为4K0Xl000写操作的命令码符合J EDEC标准这些特点与A t m el公司AT49系列F l ash比较类似因此F l ash驱动程序可以从e Cos发布时自带的AT49系列F l ash的驱动程序修改得到最重要的地方是修改描述F l ash特性的结构体fl ash_dev_i n-f o_t变量中成员bl ock_siZe和bl ock_count的值使其分别为0Xl000和0XZ00接下来需要编写与F l ash底层驱动对应CDL脚本使配置工具confi g t ool能够正确配置编译F l ash驱动程序这个CDL文件完全可以参照AT49驱动包中的CDL 文件编写以cdl_p acka g e关键字定义名为CYGPKG_DEVS_F l ash_SST_S9VFl60的包在命令体中给出具体的配置参数由于底层驱动包必须结合上层驱动才能工作所以在命令体中用acti ve_if CYGPKG_I O_F l ash命令告诉confi g t ool必须在上层驱动包CYGPKG_I O_F l ash 已经被包含的情况下底层驱动包才会使能最后需要在ecos.db中注册底层驱动软件包具体做法和变体抽象层包的注册方法相同③修改内存布局文件使confi g t ool能够正确定位程序在系统存储器中的位置e Cos提供S种不同的运行方式即ROM方式RA M方式ROMRA M方式每种模式都有两个相应的布局文件如RA M方式的m lt_ar m_at9l_eb55_ra m.l di和m lt_ar m_at9l_eb55_ra m.h%.l di 和常见的AR M开发环境ADS中scatt ered链接方式下的%.scf文件的作用类似即用来对不同段分别指定不同的链接地址在%.l di中需要修改ME MORY和SECT I ONS两部分对于代码在RA M中运行的内核及应用程序需要根据系统RA M的实际情况修改内存布局文件中相关参数的值本系统具有l MB的RA M但有一半用来存放测量数据根据系统实际的硬件情况其起始地址为0X0Z000000大小为0X80000所以这个内存块定义为ra m OR I G I N=0X0Z000000LENGTH= 0X80000处理器内部集成了8KB SRA M其起始地址为0大小为0XZ000所以这个内存块定义为sra m OR I G I N =0X00000000LENGTH=0XZ000这样系统的ME MO-RY部分就由名为ra m和sra m的两个内存块构成系统比较重要的两处SECT I ONS部分的修改为SECT I ON_fi Xed_vect ors sra m0XZ0L MA_E@_V MA和SEC-T I ON_r o m_vect ors ra m0X0Z008000L MA_E@_V MA第一处表示fi Xed_vect ors段分配在从0XZ0开始的sra m中且L MA_E@_V MA指定其加载地址等于虚拟地址由于RedBoot运行时需要占用从0X0Z000000开始的一定空间的RA M所以第二处使程序代码从0X0Z008000开始的ra m中运行%.l di文件修改完毕后需要相应地修改%.h文件中的宏如#defi ne CYG ME M_REG I ON_ra m0X0Z000000④在组件仓库ecos.db中为以关键字t ar g et添加名为F l o W55的新目标平台在这个目标平台中还必须用关键字p acka g es 包括AR M 7体系结构层包和AT 9l M 55800变体抽象层包,同时为了实现调试还必须包括串口驱动包和F l ash 驱动包及其上层驱动包 除了这些被包含的软件包外,根据不同的选择confi g t ool 还会为目标平台包添加一些默认的包,如内核包 数学库包等 另外,还应加入一些对该平台的简单描述3.2内核的配置移植完成以后,一个最基本的目标平台就产生了 在confi g t ool 中可以看到T e m p l at es 菜单的硬件平台列表中新增了F l o W55目标平台模版,以def ault 方式打开这个模版 各个软件包的CDL 脚本中都给出了默认的配置值,有些值需要根据具体的应用要求重新配置 本系统一些重要的配置情况如下①由于系统线程数量较少<小于l 0>,所以选择效率更高的位图调度器B it m a p schedul er ,并将线程数nu mbers of p ri orit y l evels 限定为l 6,以提高任务切换的速度 当点击位图调度器的单选按钮时,confi g t ool 会检测到一个配置冲突 由于时间片轮转是默认使能的,而时间片轮转仅仅对应于多级队列调度器,所以出现配置冲突 Confi g t ool 会给出一个推荐的解决冲突的方法,即禁止时间片轮转,按照这个推荐的解决方法可以安全地解决这个冲突 这个地方可以充分体现出e Cos 强大的可配置性②由于配合RedBoot 一起使用,所以内核配置为RA M 启动方式 这样,系统上电后程序将由RedBoot 复制到RA M 中运行,以提高速度③系统的晶振频率为l6MH Z ,经PLL 倍频后为SZ MH Z ,所以需将C lock s p eed 配置为SZ000000~RTC 是系统的时钟节拍发生器,本系统的时钟节拍时间选为Z0m s ,所以也需要对RTC 相关项进行配置 具体参数为R eal-ti m e clock nu m erator 配置为Z000000000,R eal-ti m e clock deno m i nator 配置为l00,R eal-ti m e clock p eri od 配置为Z0000其余的配置选项使用默认的配置值即可 完成配置工作后,对内核进行编译可以产生内核库文件和链接脚本以及相关头文件 这些生成的文件再同应用程序一起编译 链接,生成最终的可执行映像文件图4应用软件结构3.3基于eCos 操作系统的应用软件的编写e Cos 是一个单进程多线程的操作系统,多个线程在宏观上可以认为是并发运行的,而且各线程之间耦合低,便于软件的编写和维护 针对这一特点,本系统的软件结构如图4所示本系统主要有两种程序运行方式,分别称为方式A 和方式B 方式A 中,硬件中断产生后,相应的I SR <I n-t err u p t S er vi ce Routi ne >程序运行,由于I SR 中是禁止中断的,所以在I SR 中只进行最简单的操作,I SR 退出后内核调用相应的DSR <D ef erred S er vi ce Routi ne > DSR 中中断是使能的,所以可以进行一些稍复杂的处理,如简单的数据运算 内核调用<发送信号量和邮箱等> 在得到相应的信号量或消息邮箱后,相应的线程进入就绪态被内核调度运行 本系统中对键盘的处理就是基于这种方式 按键产生硬件中断 I SR 执行,接着在DSR 中进行相应的运算得到具体的键值后以消息邮箱的方式通知并唤醒键盘处理线程,键盘处理线程在完成任务后进入休眠直到再次有按键发生而被唤醒 方式B 中,各线程只是周期性地被内核调度运行,如测量数据显示线程,在显示一次数据后调用延时函数进入休眠,直到延时完毕后再次进入就绪态被内核调用根据测控系统的实际情况,具体的线程编写如下 方式A 为流量计算线程 温度测量线程 键盘处理线程 USB 通信处理线程 方式B 为测量数据显示和曲线绘制线程 流量控制线程 初始标定线程4结论经过实践,本系统运行稳定,实时性能良好 由于e Cos 的强大可配置性使得系统的软硬件可维护性强,在进行硬件改动或应用要求改动后可方便地进行升级参考文献l M assa A J .嵌入式可配置实时操作系统e Cos 软件开发M .颜若麟,等译.北京 北京航空航天大学出版社,Z 006. Z 蒋句平.嵌入式可配置实时操作系统e Cos 开发与应用 M .北京 机械工业出版社,Z 004.S 王京起,等.嵌入式可配置实时操作系统e COS 技术及实现机制 M .北京 电子工业出版社,Z 005.4 马忠梅,等.AT 9l 系列AR M 核微控制器结构与开发 M .北京 北京航空航天大学出版社,Z 00S .5 Red Hat I nc &e Cos Centric L t d .e Cos U ser s Gui de .Z 00S .6 聂慧萍.新型固体科里奥利流量计测控系统研究 D .北京 北京航空航天大学,Z 005.钱问发<硕士研究生> 主要研究方向为工业测控网络与嵌入式系统应用;满庆丰<教授>.耿春明<副教授> 主要研究方向为工业测控网络与现场总线.嵌入式系统应用等<收稿日期:Z 006-l l-l 5>。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

eCos学习笔记之文件系统架构
2006-08-01 12:16
文件系统架构:
文件系统表是一个描述每个文件系统入口的数组,每一个驻留的文件系统应该输出一个表项使用FSTAB_ENTRY()宏。

struct cyg_fstab_entry //packages/io/fileio/v2_0/include/fileio.h,文件系统表项
{
const char *name; // filesystem name
CYG_ADDRWORD data; // private data value
cyg_uint32 syncmode; // synchronization mode//文件系统锁协议
int (*mount) ( cyg_fstab_entry *fste, cyg_mtab_entry *mte ); int (*umount) ( cyg_mtab_entry *mte );
int (*open) ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
int mode, cyg_file *fte );
int (*unlink) ( cyg_mtab_entry *mte, cyg_dir dir, const char *name );
int (*mkdir) ( cyg_mtab_entry *mte, cyg_dir dir, const char *name );
int (*rmdir) ( cyg_mtab_entry *mte, cyg_dir dir, const char *name );
int (*rename) ( cyg_mtab_entry *mte, cyg_dir dir1, const char *name1,
cyg_dir dir2, const char *name2 );
int (*link) ( cyg_mtab_entry *mte, cyg_dir dir1, const char *name1,
cyg_dir dir2, const char *name2, int type ); int (*opendir) ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
cyg_file *fte ); //读方式打开一个目录
int (*chdir) ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
cyg_dir *dir_out );
int (*stat) ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
struct stat *buf);
int (*getinfo) ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
int key, char *buf, int len );
int (*setinfo) ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
int key, char *buf, int len );
}; //除了mount()和umount()以外,所有函数都带有三个参数,指向mount表入口的指针,目录指针,和目录相关的文件名
mount表记录真实活动的文件系统,mount表项有两个来源。

文件系统使用MTAB_ENTRY()宏输出静态表项,运行时使用mount()安装。

两种类型的入口都可以用umount()卸载。

struct cyg_mtab_entry //packages/io/fileio/v2_0/include/fileio.h,mount 表项
{
const char *name; // name of mount point
const char *fsname; // name of implementing filesystem
const char *devname; // name of hardware device
CYG_ADDRWORD data; // private data value
cyg_bool valid; // Valid entry?
cyg_fstab_entry *fs; // pointer to fstab entry
cyg_dir root; // root directory pointer };
一旦一个文件被打开,就由一个文件对象表示,从一个可用文件对象数组中分配。

struct CYG_FILE_TAG //packages/io/fileio/v2_0/include/fileio.h,文件表项
{
cyg_uint32 f_flag; /* file
state */
cyg_uint16 f_ucount; /* use
count */
cyg_uint16 f_type; /* descriptor
type */ //可能的取值有CYG_FILE_TYPE_FILE,
CYG_FILE_TYPE_SOCKET or CYG_FILE_TYPE_DEVICE
cyg_uint32 f_syncmode; /* synchronization protocol */
struct CYG_FILEOPS_TAG *f_ops; /* file
operations */ //文件I/O操作表指针
off_t f_offset; /* current
offset */
CYG_ADDRWORD f_data; /* file or
socket */
CYG_ADDRWORD f_xops; /* extra type specific ops */
cyg_mtab_entry *f_mte; /* mount table
entry */
};
struct CYG_FILEOPS_TAG //packages/io/fileio/v2_0/include/fileio.h,文
件I/O操作表
{
int (*fo_read) (struct CYG_FILE_TAG *fp, struct
CYG_UIO_TAG *uio);
int (*fo_write) (struct CYG_FILE_TAG *fp, struct
CYG_UIO_TAG *uio);
int (*fo_lseek) (struct CYG_FILE_TAG *fp, off_t *pos, int whence );
int (*fo_ioctl) (struct CYG_FILE_TAG *fp, CYG_ADDRWORD com,
CYG_ADDRWORD data);
int (*fo_select) (struct CYG_FILE_TAG *fp, int which, CYG_ADDRWORD info);
int (*fo_fsync) (struct CYG_FILE_TAG *fp, int
mode );
int (*fo_close) (struct CYG_FILE_TAG *fp);
int (*fo_fstat) (struct CYG_FILE_TAG *fp, struct stat *buf );
int (*fo_getinfo) (struct CYG_FILE_TAG *fp, int key, char *buf, int len );
int (*fo_setinfo) (struct CYG_FILE_TAG *fp, int key, char *buf, int len );
};
文件系统mount过程
首先,搜寻mount表,找到一个name域为NULL的表项,用作新的mount点,然后搜寻文件系统表,找到名字匹配fsname的表项。

如果成功,初始化mount表项,调用文件系统的mount()操作。

如果成功,mount表项标记为有效,fs域被初始化。

文件系统umount过程
搜寻mount表,找到表项的name域与name参数匹配的表项。

找到匹配后,调用文件系统的umount(),如果成功,通过设置valid域为false无效mount表项,name域设为NULL。

相关文档
最新文档