发 帖  
原厂入驻New
张飞60小时讲透半桥串联谐振软开关电源设计,立即学习!
HAL移植步骤
130 处理器
分享
HAL移植的主要步骤

建立适当的文件目录

ECOS本身有一个完整的文件目录,只有把新建的底层文件放在适当的文件目录下面,才能确保配置和编译工作的成功,也有助于利用ECOS本身已有的源代码,如结构体系层和变体层中的许多成熟可用的代码。由于本系统中S3C2510处理器的内核是ARM940T,因而可以把S3C2510的目录建立在ECOS库路径packages/hal/arm/arm9/下。




0
2019-6-18 07:20:05   评论 分享淘帖 邀请回答
6个回答
建立S3C2510的cdl文件

cdl文件使用cdl脚本语言描述该硬件设备(包或平台)的特性和常用指标。cdl文件实现系统在源码级的功能和指标配置,犹如一个项目管理高层对其仓库中组件特性的登记,只有登记后的包、组件和选项才能被操作系统配置工具识别和配置。

以下是S3C2510的cdl文件中的几段重要描述。

* cdl_package CYGPKG_ HAL_ARM_ ARM9_S3C2510
这是S3C2510在ecos.db中所登记的包的名字,它下面包含了该板的一些基本设置和组件,如母体体系结构(parent)、包含的头文件、编译的C文件等。
* cdl_component CYG_HAL _STARTUP
系统启动方式,有3种选择:ram启动、rom启动、romram启动。
* cdl_component CYGNUM_ HAL_CPUCLOCK
平台的系统时钟设置,以便于ECOS其他组件以此时钟为标准。该平台系统时钟的默认值设为133MHz。
* cdl_option CYGNUM_HAL_ RTC_PERIOD
ECOS内核的运行时钟单位。ECOS内核以一个tick为时钟单位,而一个tick的长度就等于该选项的设定值。

在ecos.db中登记
S3C2510的硬件包

ecos.db是关于ECOS系统的一个数据库文件(在packages目录下),它包含了硬件包管理工具和一些在组件配置库中的包。与cdl文件相比,ecos.db登记了仓库中的物品,而cdl文件则登记每种物品的特性。只有在ecos.db中登记了的包,才能被ECOS的库编译工具(configtool)选中和使用。如果要在配置工具的模板选项中(template)增加可供选择的硬件目标板,那么,需要先在ecos.db中登记其包描述,再增加其目标板描述。一般的辅助硬件(如网卡、串口等)只需要第一步的登记。因此,在ecos.db中登记S3C2510平台硬件包的基本步骤就是登记硬件平台的包描述(package CYGPKG_HAL_ARM_ ARM9_ S3C2510)和目标描述(target S3C2510)。需要注意的是,target S3C2510中所包含的3个硬件描述包CYGPKG_HAL_ARM、CYGPKG_HAL_ARM_ARM9和CYGPKG_HAL_ARM_ARM9_ S3C2510是不能缺少的,因为它们是标板的核心——主体系结构包、子体系结构包和主芯片包。另外,还可以可选地添加其他辅助硬件包(如网卡、串口等)。
2019-6-18 17:36:08 评论

举报

编写平台抽象层的有关代码

硬件平台层所需编写的代码文件的一般功能如下所示。

* include /plf_cache.h —— 平台专用cache处理 (可选)。在本系统中不需要编写,可直接调用ARM9变体层的hal_cache.h。
* include / hal_platform_ints.h —— 平台专用中断处理,定义平台中断向量号。
* include / plf_io.h —— I/O 定义和系统寄存器的宏定义。
* include ¬/ hal_platform_setup.h —— 平台启动代码。本文件主要用ARM汇编指令编写,实现平台上电后程序的启动和执行。
* src/s3c2510_misc.c —— HAL的底层标准函数,包括时钟平台初始化、时钟延时函数、中断使能、中断屏蔽、中断响应等。
* src/ hal_diag.c —— 硬件抽象层诊断输出函数,包含ECOS系统中printf打印的硬件设备驱动程序。
* misc/ redboot_primary_ ram.ecm —— 基于RAM启动方式的redboot最小配置文件。
* misc/redboot_primary_ rom.ecm —— 基于ROM启动方式的redboot最小配置文件。
2019-6-18 17:36:27 评论

举报

硬件启动过程

编写硬件启动的初始化过程是HAL移植的一个难点。当硬件重新上电后,系统的程序指针会自动指向地址0(通常地址0存放着bootloader代码段)。在ECOS操作系统中,程序首先会运行vectors.S文件(该文件存在于hal/arm/arch/src/目录下),它定义了reset_vector、start等各种启动标号。接着调用S3C2510平台层的hal_platform_ setup.h文件中的宏platform_setup1和arm9变体层arm9_misc.c文件中的函数 hal_hardware_init。

hal_platform_setup.h定义了宏platform_setup1以供vectors.S调用。该宏定义了目标板上SDRAM和FLASH的初始化启动,其中包括了它们的取数方式和内存大小。然后根据不同的启动方式执行程序。对于RAM启动方式,无需进行程序段与数据段的搬移,系统已认为SDRAM的起始地址即为程序的起始地址;对于ROM启动方式,需要搬移数据段,而程序段无需搬移;对于ROMRAM启动方式,程序段与数据段都需要进行搬移,然后再把程序起始地址映射为SDRAM的起始地址。

在程序搬移完成后,系统会进行其他硬件的初始化过程,包括系统时钟、系统CACHE、监控串口等基本硬件设备。
2019-6-18 17:36:37 评论

举报

内存布局文件编写

平台的内存布局文件在include/pkgconf目录下。通常,每个平台包括了RAM、ROM和ROMRAM 3种不同启动方式的内存布局文件集。每种启动方式的内存布局文件集都由3个类型的描述文件组成:.h文件包含内存域的C宏定义;.ldi文件定义内存域和内存段位置的链接脚本文件;.mlt文件包括由MLT工具产生的对内存布局的描述。当需要手动修改内存布局时,只有.h和.ldi文件可以被修改,.mlt文件只能由MLT工具生成。

下面以S3C2510的ram启动方式内存布局为例,主要说明mlt_arm_s3c2510_ram.h和mlt_arm_s3c2510_ram.ldi的程序结构。
由于S3C2510的开发板有两个16MB的SDRAM,因而要定义两个内存域ram1和ram2。系统设置寄存器在初始化时已经把内存段重新映射,因而两个SDRAM的基地址就是0x0和0x40000000,两个内存域的大小是16MB,分配方式都是可读写的内存段。

在mlt_arm_s3c2510_ram.ldi中分为两大部分。首先是MEMORY部分,它定义了在RAM启动方式下所需要的内存域,以及该内存域的起始地址和长度。MEMORY部分的内容必须与mlt_arm_s3c2510_ ram.h中定义的宏一致。其次是SECTIONS部分,它定义了RAM启动方式下所规定的内存段,这些内存段的定义与系统内存管理功能有关。在SECTION_XXX后带有相应的参数,这些参数包括了内存段所属的内存域、起始地址(或者是对齐方式)、虚拟内存地址(VMA)和加载内存地址(LMA)。

以SECTION_fixed_vectors (ram1, 0x200, LMA_EQ_VMA)为例,它表示fixed_vectors段属于ram1内存域,起始地址为0x200,加载内存地址等于虚拟内存地址。LMA_EQ_VMA同时也可以解释为该内存段不需要在程序运行后重新分配加载。
2019-6-18 17:36:45 评论

举报

调试结果

S3C2510目标板上带有1块4MB的FLASH和2块16MB的SDRAM。

利用ECOS的自带编译工具configtool对新建的S3C2510目标板进行编译,生成ECOS的库文件。然后把库目录下的install目录内容复制到应用工程目录下,使ECOS库包含到应用工程中。然后把该工程的.elf文件利用EMBEST公司开发的IDE仿真器直接下载到目标板的SDRAM中。此时的ECOS操作系统应为RAM启动方式。

通过IDE对程序的调试与测试结果表明,本文提出的S3C2510移植方案使ECOS操作系统在目标板中运行正常稳定。该操作系统支持多个工作线程的应用程序。S3C2510的串口、网口均能与pc机正常传输数据。
2019-6-18 17:36:50 评论

举报

结语

ECOS是一款非常年轻的嵌入式操作系统,1997年才正式推广使用。现阶段有关ECOS开发的参考资料和专门从事人员仍然很少,造成了ECOS产品研发周期和开发成本的增加。因此,本文提出的ECOS操作系统的驱动底层代码编写方法对于使用ECOS开发产品具有相当重要的指导意义。
2019-6-18 17:36:52 评论

举报

只有小组成员才能发言,加入小组>>

111个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /10 下一条

快速回复 返回顶部 返回列表