当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]SOPC 系统建立及uClinux 移植实现

摘要:本文通过具体实现一个可以运行uClinux操作系统的最小SOPC系统,较为完整地介绍了构建SOPC系统以及构建NiosII软核处理器的方法及步骤,并详细描述了uCLinux操作系统在该SOPC系统上的移植方法。此外,还进行了基于NiosII处理器uClinux操作系统下应用程序的开发,以从总体上完成实用性的验证。

引言随着大规模集成电路技术的进步和制造工艺水平的提高,嵌入式系统的开发变得日益复杂。传统的嵌入式系统设计方法已经不能适应当前嵌入式系统设计的需要。单个芯片容量的增大、功能的增加、体积的减小使得设计变得更加便利,同时也为嵌入式系统设计开发开辟了新的天地,即出现了可编程片上系统(SystemOnProgrammableChip,SOPC)技术。SOPC技术大大促进了软硬件协同设计及计算机系统设计自动化的发展,并具有可裁剪、可扩充、可升级的灵活设计方式及在系统可编程功能。

通常,嵌入式系统的软件部分主要基于实时操作系统(简称RTOS),在特定的RTOS之上开发应用软件。通过屏蔽掉许多底层硬件细节的方法,可以使得程序开发人员改进软件功能、提高设计效率、降低开发难度,同时使得程序调试方便、移植简单、容易维护,大大缩短了开发周期。uClinux是一种广泛应用于嵌入式设备中的实时操作系统,针对微控制器领域而设计。它的特点是较好的稳定性、出色的网络功能和高效的文件系统支持等。最大特征就是不使用内存管理单元模块(MMU:MemoryManagementUnit),很适合那些没有MMU的处理器。如把uClinux操作系统移植于SOPC系统,便可以使得此类系统大大缩短软硬件开发的时间,并可进一步增强整体功能。

1SOPC硬件系统的建立1。1硬件系统架构不同于许多基于微处理器的嵌入式系统,基于SOPC的嵌入式系统具有可配置的特点,可根据需要灵活地在一片FPGA中构造外设接口。本文构建的最小系统可运行uClinux,采用Altera公司的CycloneⅡ芯片EP2C35及相关外围电路组成。其中,外围电路包括1片16MB的DDRSDRAM、l片16MB的Flash、RS232、串行配置芯片EPCS64以及供电系统。系统体系架构如图1所示。

1。2SOPC硬件开发NiosⅡ系列嵌入式处理器是一款采用流水线技术、单指令流的RISCCPU,广泛应用于嵌入式系统。NiosⅡ包括3种内核:快速的F(最高性能的优化)内核、经济的E(最小逻辑占用的优化)内核以及标准的S(平衡于性能和尺寸)内核,每种内核根据不同的性能而优化。NiosⅡ嵌入式CPU支持32位指令集、32位数据线宽度、32个通用寄存器、32个外部中断源、2GB寻址空间,包含高达256个用户自定义的CPU定制指令。NI0SⅡCPU的所有数据、程序都是通过Avalon总线传输的,通过使用Altera的QuartusⅡ软件以及SOPCBuilder工具可以轻松地将NiosⅡ内核嵌入到系统里。

SOPC硬件开发主要使用QuartusⅡ和SOPCBuilder。由于本系统中使用到DDRSDRAM,所以在系统开发前必须安装与QuartusⅡ版本相兼容的Megacore程序以提供DDRSDRAMIP核。硬件设计主要工作有以下两步:(1)定制NiosⅡ处理器软核。用SOPCBuilder软件从NiosⅡ处理器内核和NiosⅡ开发套件提供的外设列表中选取合适的CPU、存储器以及各外围器件(如片内存储器、PIO、定时器、UART、片外存储器接口等),并定制和配置它们的功能、分配外设地址及中断号、设定复位地址、最后生成系统。用户也可以添加用户自身定制指令逻辑到NiosⅡ内核以加速CPU性能,或添加用户外设以减轻CPU的任务。定制好的NiosⅡ处理器软核如图2所示。

(2)建立完善顶层模块。使用SOPCBuilder生成NiosⅡ系统后,将其集成到整个QuartusⅡ工程中。根据需要在工程中加入NiosⅡ系统以外的逻辑,用户也可以集成自身定制的硬件模块到SOPC设计之中,或集成从Altera或第3方IP供应商得到的其它现成的知识产权设计模块。顶层模块主要包括DDRSDRAM模块、FLASH模块、UART模块以及PIO模块。

2裁剪和移植uClinux操作系统本系统使用的是Microtronix公司负责维护和发行的NiosⅡuClinux版本。该版本uClinux是2。6。11的内核,目前在NiosⅡ上运行最为稳定。在NiosⅡ上实现uClinux操作系统环境主要包括两个部分,一是针对NiosⅡ处理器移植的uClinux内核,二是建立一个包含基本系统工具和应用程序的根文件系统。

2。1建立uClinux内核该项工作主要需在NiosIIIDE环境中利用MicrotronixDevice栏中选择uClinux内核上传的位置(FLASH)以及内核运行的位置(SDRAM),完成生成内核的配置。回到NiosIIIDE主窗口界面后,在ProjectNavigator窗口中可以看到uClinux_kernel工程已经建立好。此时在uClinux_kernel上点击右键选择ConfigureKernel,进入uClinux内核配置界面,并根据硬件系统进行uClinux内核配置。需配置的主要选项及相关描述如下:(1)Processertypeandfeature--->Platform。项选择AlteraCycloneDevelopmentBoardSupport;(2)DeviceDrivers--->ATA/ATAPI/MFM/RLLsupport选项关掉,我们所建立的NiosII系统没有外部IDE接口外设;(3)DeviceDrivers--->Characterdevices--->NiosPIObuttonssupport选项关掉,因为系统中没有buttonsPIO,若选择则会编译出错;(4)DeviceDrivers->Characterdevices--->Serialdrivers--->AlteraJTAGUARTsupport选项选中,为控制台选择JTAG下载方式;(5)DeviceDrivers->Characterdevices--->Serialdrivers--->Niosserialsupport选项选中,通过RS232串口与系统进行通信交流;(6)其余配置不需要改变。

配置完成后予以保存并回到NiosIIIDE主窗口界面。在ProjectNavigator窗口中右键点击uClinux_kernel选择BuildProject编译内核。编译完成后,在ProjectNavigator窗口中展开uClinux_kernel工程。可以看到,在uClinux_kernel的目录中,已经生成了vmlinux。bin文件。在该文件上点击右键选择Upload即可启动烧写程序,将生成的内核二进制文件vmlinux。bin写入Flash芯片中。

2。2建立uClinux文件系统uClinux文件系统的建立与uClinux内核的建立方法类似,也是在NiosIIIDE环境中利用MicrotronixInstallMinimal按钮,只选择必须的工具和应用程序。这种情况下生成的基本文件系统仅为872K,很适合资源紧凑的开发平台。[!--empirenews.page--]

为了精简系统,选择InstallMinimal,点击Finish完成基本文件系统的配置。回到NiosIIIDE的主窗口界面,编译工程。编译完成之后,在uClinux_fs工程的目录列表中可以看到romfs。bin文件已经生成。与处理内核文件相同,再将romfs。bin文件写入Flash中。至此,uClinux的内核和文件系统都已经存在于目标硬件系统(开发板)中的Flash芯片上了。NiosII处理器复位之后就能从Flash中引导启动,进入uClinux操作系统。

2。3运行并登陆uClinux操作系统进入Quartus的编程窗口,将编译生成的。sof文件下载到硬件系统(开发板)上。通过超级终端或DNW程序可以看到,uClinux的启动信息已经从DNW窗口输出,并等待与用户通信。输入ls命令可以看到配置uClinux_fs时所选择的基本工具和应用程序。至此,已经成功定制并登陆到uClinux系统中。DNW软件输出的uClinux系统启动信息如图3所示。

3建立并执行用户应用程序3。1建立用户应用程序利用MicrotronixNiosⅡ完成uClinux应用程序工程的创建后,在ProjectNavigator窗口中可以看到一个空的工程。可新建。c文件及makefile文件向工程中添加用户程序代码,也可导入已建立好的。c文件及makefile文件。这里选用较为通用的新建方法为例进行介绍。

首先在工程中建立。c文件,输入程序代码:#includemain(){printf("MyfirstNios2uClinuxProgram!n");}当建立makefile文件、输入对应的编译、控制信息代码并编译完成后,即可在工程中看到所生成的NiosIILinux可执行文件。exe文件。

 

3。2下载并运行用户应用程序有多种方法将NiosIIuClinux可执行文件。exe文件传输到uClinux系统中并运行,一般首选ftp和NFS方法。鉴于本例没有包含网络系统,所以选用修改文件系统内容的方法完成下载和运行任务。

先将编译好的。exe文件拷贝到uClinux_fs工程的targetbin目录下(可以根据自己的习惯选择其它),重新编译uClinux_fs工程。完成后将编译新生成的romfs。bin文件写入Flash芯片中,启动登陆uClinux操作系统,进入/bin目录。可以看到,拷贝到文件系统中的。exe程序已经出现在/bin目录中。执行后则在DNW窗口得到程序执行的结果,例如打印输出:MyfirstNios2uClinuxProgram!其效果示于图4。

4结束语嵌入式系统设计是一门综合性很强的学科,其相关研究内容和技术具有高度融合的特点。基于新颖、高效、业已成熟的基本器件及开发环境,SOPC使得测量和控制领域中直接面向应用的研究更加现实、可行。依托于“强电磁场环境模拟与防护技术”国防科技重点实验室,本文构建了一个SOPC系统,定制了NiosII处理器软核,进而完成了uClinux操作系统的剪裁与移植和应用程序的基本开发、调试工作,并投入到了后续实验之中。此外,这种方式不仅有助于大大缩短嵌入式系统的软硬件开发时间,又为一般实验条件下的相关控制系统提供了可行的设计思路和实现方法,并可望具有一定的学术价值和广阔的应用领域。

5本文创新点

构建了可移植uClinux的最小SOPC系统,并成功完成了uClinux的移植工作,缩短了SOPC系统的开发周期、拓展了uClinux的应用领域。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭