datasheet

基于nios和μClinux的嵌入式系统设计

2008-03-21来源: 时间: 关键字:Clinux  nios  嵌入式系统  线程  串行口  quartus  bytebla

  嵌入式系统一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户应用程序四部分组成,其发展主要体现在芯片技术的进步上,以及在芯片技术限制下的算法与软件的进步上。随着芯片制造技术的发展,嵌入式系统的结构也随之发生了重大变革,从基于微处理器的嵌入式系统到基于微控制器的嵌入式系统,继而将可编程逻辑pld(programmable logic device)技术引入到嵌入式系统设计中,进而又发展到soc(system on chip),最终将pld与嵌入式处理器结合而成为sopc(system on programmable chip),使得sopc成为嵌入式系统设计的一个发展趋势。

  本文采用sopc内嵌32位的软核处理器nios,实现了一个uart串行口和以太网接口的转换器(以下简称转换器),并基于microtronix公司针对nios处理器移植的μclinux开发了应用程序.其系统结构如图l所示。

  

  

  1 基于sopc的嵌入式硬件平台构建

  不同于基于处理器或控制器及soc的嵌入式系统,基于sopc的嵌入式系统具有可配置的特点,不会包括任何专用外设,而是可根据需要灵活地在一片fpga中构造外设接口。

  基于sopc的嵌入式系统主要由1片核心芯片sopc和片外器件,以及一些相关的接口设备组成。本文所要实现的转换器采用altera公司的cyclone芯片及外围电路组成,其中外围电路包括2片512 kb的sram、l片8mb的flash、uart电子转换器和1片以太网控制器lan91c111。系统电路框图如图2所示。

  

  

  sopc芯片内嵌软核处理器nios。在sopc芯片中,除了cpu外,可配片上rom、内部定时器、uart串行口、sram、flash接口等系统部件。这些部件均以可编程逻辑部件的形式实现,芯片内部部件结构图如图3所示。cpu和所有部件通过avalon总线连接在一起。

  

  

  

  sopc芯片内系统模块和avalon总线模块均由sopcbuilder工具自动生成,利用qualtus ii集成开发环境可实现芯片内的逻辑设计及其引脚定义。经编译生成后缀为.sof的硬件映像文件,通过byteblasterii线缆下载到目标板的cyclone芯片中,或将.sof文件转换成.flash文件,下载到目标板的flash中。这样就完成了转换器的硬件设计。

  2 基于μclinux的sopc应用程序开发

  应用程序的开发可在硬件平台上直接进行,但需了解所有硬件部件的细节,并编写相应的驱动子程序,其软件设计难度及工作量大,且可移植性差。基于嵌入式操作系统的应用程序,其所有的硬件细节均对用户屏蔽。对硬件进行直接控制的底层驱动程序均封装在操作系统内,通过设备驱动程序接口来完成,用户只需在高层通过操作系统所提供的系统调用进行编程。μclinux是针对控制领域的嵌入式linux操作系统,适合如nios处理器等不具备内存管理单元(mmu)的微处理器/微控制器。基于操作系统进行开发,需将操作系统加载到硬件平台中,μclinux可以以部件的形式集成到sopc系统中。

  2.1 加载μclinux系统的步骤

  将μclinux加载到sopc目标板上时需提供一个交叉编译环境,硬件要求具有一个串口的pc工作站、基于nios处理器的sopc目标板和byteblastermv线缆等。软件需求windowsntv4.0、windows2000或windowsxp、altera nios开发包ndk 3.0中所提供的nios gnupro工具、ahera nios开发包所提供的cygwin安装,以及quartus ii可编程逻辑开发工具v2.2等。

  2.1.1 创建和装载内核映像

  创建和装载μclinux映像文件在linux developerbash环境下进行,首先需按下列步骤配置和构建内核。

  [linux developer]…μclinux/:cd linux

  [linux developer]…linux/:make xconfig

  [linux developer]…linux/:make clean

  [linux developer]…1inux/:make dep

  [linux developer]…linux/:make

  [linux developer]…μclinux/:make linux.flash

  生成的linux.flash文件即为μclinux内核映像。当sopc目标板加电,片内rom中的germs监控程序运行后,在[linux developer]…μclinux/:下键入nios-runlinux.flash,即下载linux.flash文件到目标板上,完成内核映像的加载。

  2.1.2创建和装载根文件系统

  除了装载内核外,还需装载根文件系统。μclinux采用romfs文件系统,这种文件系统相对于一般的ext2文件系统要求更少空间。

  在主机上linux的target目录表示在μclinux下的根(root)目录。当前的脚本和工具可将target目录转换成映像文件(romdisk.flash),按如下步骤创建:

  [linux developer]…μclinux/:make clean_target

  [linux developer]…μclinux/:make romfs

  然后键入以下命令:

  [linux developer]…μclinux/:nios-run romdisk.flash

  即将romdisk.flash文件下载到目标板上,完成μclinux的根文件系统的加载。

  2.1.3 加载应用程序

  用户应用程序可通过target目录加载到根文件系统中,可根据需要重建romdisk映像。应用程序在userland目录下,编译生成运行文件后拷贝到target目录树中,并根据target目录的内容创建romdisk.flash文件。新建一个应用程序,首先打开一个linuxdeveloperbash窗,在userland目录中创建一个目录app,应用程序源文件存放在此目录中,然后在userland/app/中建立一个makefile文件。

  makefile内容如下所示,其中appfile为应用程序名。

  stackslze=8192

  include../../rules.mak

  all:appfile.relocbflt

  sources=appfile.c

  install:

  $(romfsinst)appfile.reloebfh

  $(romfsdir)/bin/appfile$(execsuffix)

  clean:

  rm-f *.[iods]core appfile appfile.*elf appfile.*bflt

  运行make对应用程序进行编译并修改userland/.eonfig和/userland/makefile文件。在userland/.config文件中,增加一行config_my_app=y,在userland/makefile文件中,增加dir_$(config_my_app)+=app,进入userland子目录,运行make,即可将应用程序安装到userland/bin中,并根据userland/.config文件中相应变量的指示将应用程序二进制拷贝到target目录中。

  最后,键入以下命令重新构建romdisk映像文件(romdisk.flash),并下载到目标板上。

  [linux developer]…uclinux/:make clean_target

  [linux developer]…uclinux/:make romfs

  [linux developer]…uclinux/:nios-run romdisk.flash

  2.1.4 运行μclinux

  完成μclinux内核及文件系统的装载后,即可运行μclinux。键入g800000(800000为启动代码地址,在sopc builder中设置),μclinux自动完成初始化过程,用户输入登录用户名nios,密码μclinux,出现μclinux的提示符#,表示已进入μclinux运行环境。

  2.2 转换器应用程序的实现

  转换器应用系统主要完成网络接口和串行接口间的数据传输,所传输的数据流如图4所示。μclinux操作系统中提供了网络驱动程序和串口驱动程序,并提供了多线程的支持。

  

  

  转换器应用系统中的串口收发数据和网络口收发数据是异步进行的,可分别作为一个任务来对待,任务间是并发的,因此可采用多线程程序设计技术来实现多任务间的并发执行,系统主程序流程图如图5所示。

  

  

  在此应用系统中有4个任务,分别创建4个线程:网络接收线程、网络发送线程、串口接收线程和串口发送线程。这4个线程可并发执行.因网络速度与串口速度存在着差异,需设置相应的缓冲区来对收发数据进行缓冲。在此应用系统中设置两个环形缓冲区,如图4所示,其中nctrv_uartsd_buf用于接收网络数据,供存储从网络口接收的数据,然后串口从此缓冲区中取出数据发送。另一缓冲区uartrv_netsd_bur用于接收串口数据,然后网络口取出此缓冲区中数据发送出去。

  线程间需实现相互通信和同步,共用缓冲区既要互斥执行又要同步执行,其操作遵循生产者和消费者模型。线程间的互斥操作采用互斥锁(mu-tex)来实现。线程间的同步通过设置两个指针来实现,一个是读指针,另一个是写指针,写指针指向队头,初

  始化为0,读指针指向队尾,初始化为bufsize-1。当写数据时,比较读写指针是否相等,相同则写线程阻塞;不相等,则写入数据,然后将写指针加1。当读数据时,读指针加1,然后比较读写指针是否相等,相等则读线程阻塞;不相等,则读出数据。

  网络发送线程(流程图如图6所示)和串口接收线程(流程图如图7所示)间共用环形缓冲区uartrv_netsd_buf。串口发送线程和网络接收线程共用环形缓冲区netrv_uartsd_buf。两线程间的关系和处理类似网络发送线程和串口接收线程。

  

  

  

  

  

  3 系统测试

  完成转换器的软硬件设计后,按如图8所示,连接系统进行转换器数据的传输测试。在pc机a上运行串口收发程序,而在pc机b上运行以太网收发程序,经测试后数据传输无误。

  

 

关键字:Clinux  nios  嵌入式系统  线程  串行口  quartus  bytebla

编辑:ssb 引用地址:http://www.eeworld.com.cn/afdz/2008/0321/article_575.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于嵌入式系统arm2210开发板的移动机器人人机界面设计
下一篇:G.726语音编解码器在SoPC中的实现

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

如何将μClinux移植到ARM7体系微处理器S3C4510B上

    Linux是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将μClinux移植到基于S3C4510B处理器目标板上的方法与过程。首先介绍了S3C4510B处理器和μClinux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上Bootloader的设计实现以及μClinux内核的移植方法,最后对在这种基于μClinux的嵌入式系统环境下如何开发应用程序做了简单说明。    1引言    ARM(AdvancedRISCMachines),既可以认为是一个公司的名字,也可以认为是对一微处理器的通称,还可以认为是一种技术的名字。 
发表于 2018-02-07
如何将μClinux移植到ARM7体系微处理器S3C4510B上

基于ARM与μClinux的RTU嵌入式设计

  在电力系统变电所以及电气化铁道牵引变电所远动控制系统中,远程数据采集与监控终端(RTU)是关键设备,实现遥控、遥测、遥信等功能。   采用工业控制计算机,扩展测控硬件接口电路,是RTU设计常见的方法,但是这种方法设计的RTU成本高、体积大、耗电大。采用80C196等单片机设计RTU,由于单片机的运算处理和硬件扩展等能力较低,影响RTU的性能。而基于arm处理器设计的RTU,硬件上具有成本低、体积小、耗电省、处理能力强等优点;软件上由于采用μClinux操作系统,有许多优秀的应用程序成果可以利用。正是由于这些优势,采用arm和μClinux设计RTU已经成为一个热点[1]。   1 RTU硬件电路设计
发表于 2015-03-13
基于ARM与μClinux的RTU嵌入式设计

基于ADSP—BF533的μClinux嵌入式系统移植与开发

Blackfin处理器是基于由美国模拟器件公司(ADI)和Intel公司联合开发的微信号架构(MSA)的首款第4代DSP产品,它是ADI公司16 位产品的一个大系列。这一新产品是专为通信和互联网应用而设计的通用DSP芯片,适合处理广泛用于互联网中的大量图像、声音、文本和数据流,也可应用于汽车电子可视系统、宽带无线系统、消费类多媒体电子、数字摄像机、多通道VoIP、安全和监督、机顶盒和视频电话会议等方面。本文所用到的ADSP一 BF533是Blackfin系列处理器的典型代表。 l μClinux简介    μClinux从Linux 2.0/2.4内核派生而来,沿袭主流Linux的绝大部分特性
发表于 2014-10-31
基于ADSP—BF533的μClinux嵌入式系统移植与开发

μClinux嵌入式系统移植与开发方法

μCLinux是专门针对没有MMU的CPU,并且为嵌入式系统做了许多小型化的工作。适用于没有虚拟内存或内存管理单元(MMU)的处理器。由于μClinux在标准的Linux基础上进行了适当的裁剪和优化,形成了一个高度优化的、代码紧凑的嵌入式Linux。虽然它的体积很小,但μClinux仍然保留了Linux的大多数的优点:稳定、良好的移植性、优秀的网络功能、完备的对各种文件系统的支持、以及标准丰富的API等。 嵌入式系统的开发与一般的应用开发最大的差别在于,前者需要建立特殊的硬件环境,而后者一般基于特定的操作系统或分布式平台。后者的平台已经对硬件或网络媒质做了抽象,从而不需要由系统开发者来完成这些工作。而在嵌入式系统开发中,这也
发表于 2013-12-27

ColdFire单片机在 Clinux上的应用

的时序处理单元(eTPU)。该功能特别适用于网络通信安全的产品。它也是其V2 ColdFire内核结构。 MCF547X系列和MCF548X系列产品的主要特点是使用第四代增强型ColdFire内核(V4e)。它们特别适用于工具自动化、流程控制、机器人、医疗仪器等。 除了上述处理器外,飞思卡尔ColdFire系列还包括最早得到使用的MCF5272处理器,集成了以太网媒体接入控制器(MAC)和网络应用软件的MCF5282处理器,以及集成外设和增强型乘法累加器的MCF5249处理器等。 CLinux应用程序开发 目前所使用的ColdFire编程环境主要有两种,下面以MCF5249开发板为例,介绍 CLinux的运行与运用
发表于 2013-11-08

基于μCLinux的USB驱动程序实现

  0 引 言   μClinux是针对嵌入式控制领域的操作系统,它继承了Linux内核的绝大部分特性,专为没有内存管理单元MMU的嵌入式微处理器而设计。它内核小,效率高,源代码开放,包含了完整的TCP/IP网络协议。ADSP-BF533是ADI公司Blackfin系列的高速数字信号处理器芯片。 Blackfin系列是ADI与Intel联合开发的体现高性能体系结构的首款第四代DSP产品,16位定点DSP内核,新型指令结构,支持C/C++编程,主频达600 MHz,内核电压1.2 V,具有动态电源管理能力,功耗低,扩展能力强,被广泛应用于各种信号处理。   这里使用基于Blackfin ADSP-BF533微处理器
发表于 2013-09-06
基于μCLinux的USB驱动程序实现

小广播

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 视频监控 智能卡 防盗报警 智能管理 处理器 传感器 其他技术 综合资讯 安防论坛

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved
pt type="text/javascript" src="//v3.jiathis.com/code/jia.js?uid=2113614" charset="utf-8">