uClinux在Nios II嵌入式平台上的移植研究

发布者:MysticEssence最新更新时间:2009-02-18 来源: 微计算机信息关键字:嵌入式系统  uClinux  移植  NiosII微处理器 手机看文章 扫描二维码
随时随地手机看文章

1. Nios II嵌入式处理器

      Nios II是运行在FPGA上的五级流水线、单指令的RISC处理器,它专门针对Altera的可编程逻辑器件及片上可编程的设计思想做了相应的优化。作为一种可配置的精减的RISC处理器,它可以与用户自定义逻辑结合构成SOPC系统,并下载到Altera的可编程器件中。32位的Nios II软核,结合外部闪存以及大容量存储器,可以构成一个功能强大的32位嵌入式处理器系统。此外,利用Altera提供的IDE(Integrated development environment)开发工具 可以方便的在调试模式下调试处理器,提高开发的速度。

      作者使用Cyclone II版Nios II应用开发板Nios-DEVKIT-2C35 作为移植实现的平台,开发板主要包括Cyclone II EP2C35器件、EPM7128AE CPLD配置控制逻辑、存储器、串行配置连接器、FPGA和CPLD的JTAG接口等。

2. 移植

2.1. uClinux嵌入式操作系统

      uClinux是Linux的一个嵌入式版本,它经过小型化改造,形成了一个高度优化、代码紧凑的嵌入式Linux,并保留了Linux的大多数优点。最新的2.6版本在内核主体中加入了提高中断性能和调度响应时间的改进,其中有三个最显著的改进:采用可抢占内核、更加有效的调度算法以及同步性的提高 。

2.1.1. uClinux操作系统的移植

      uClinux源代码绝大部分都是使用的C语言,只有那些直接与处理其硬件相关的代码如开关CPU中断等操作才采用汇编语言编写,因此uClinux具有很好的移植性。一般来说,uClinux的移植大致分为三类:

      1) 结构层次的移植。如果待移植的处理器结构不同于任何已经支持的处理器结构,则需要修改linux/arch目录下的相关处理器结构的文件。uClinux内核代码的大部分是独立于处理器和其体系结构的,但是其最底层的代码也是特定于各个系统的。他们的中断处理上下文、内存维护、任务上下文和初始化过程都是独特的。对一个新型的体系,其下层程序可以模仿与其相似的体系程序编写。

      2) 平台层次的移植。待移植处理器是某种uClinux已支持体系的分支处理器,即如果待移植的处理器是基于Nios II内核的,而Nios II内核已经被uClinux支持,则需要在相关体系结构目录platform下建立相应目录并编写相应代码,这些代码主要是跟踪程序(实现用户程序到内核函数的接口等功能)、中断控制调度程序和内存初始化程序等。

      3) 板级移植。如果所用处理器(如Cyclone II版本系列)已经被uClinux支持的话,就只需要板级移植了。板级移植需要修改或添加linux/arch/Nios2nommu/scripts目录中的文件,该目录中主要是与具体硬件平台相关的配置,可以利用Nios II自带的SOPC Builder软件生成具体平台对应的配置文件。

      对于uClinux已经支持的硬件架构,移植的过程相对较为简单,主要考虑修改与硬件开发平台相关的具体因素,如内存大小、外围设备的配置等。一般现在做的大部分移植都是平台层次移植和板级移植。

2.1.2. initramfs文件系统

      作者使用的uClinux 2.6操作系统中,用initramfs文件系统取代了以前的romfs文件系统。

      1. romfs文件系统。romfs文件系统是在uClinux 2.4以及之前版本广泛用到的文件系统,这种文件系统相对于一般的ext2/ext3文件系统要求更少的空间。romfs文件系统不支持动态擦写保存,对于系统需要动态保存的数据采用虚拟RAM盘的方法进行处理(RAM盘采用ext2/ext3文件系统)。

      2. initramfs文件系统[2]。initramfs是在2.5版本内核中引入的技术,它的基本思想是:在内核镜像中附加一个cpio包,cpio包中包含了一个小型的文件系统,当内核启动时,内核将cpio包解开,并且将其中包含的文件系统作为初始的根文件系统,内核中的一部分初始化代码会放到这个文件系统中作为用户层进程来执行。这样带来的明显的好处是精简了内核的初始化代码,例如寻找真正的启动盘、启动时的网络安装、ACPI的安装等,这些代码都可以从内核中移出,把它们都转移到用户空间完成,这样使得开发者在用户层就可以定制自己的启动过程,而不需要去修改内核代码,使定制启动过程变得更加容易。

2.2. 开发环境的建立

      1. 建立交叉编译环境。可以在uClinux官方网站下载支持Nios II的交叉编译开发工具包,包括Nios2-linux-uclibc-gcc、Nios2-linux-uclibc-ld、Nios2-linux-uclibc-objdump等。

      安装好交叉编译工具包后,要在宿主PC上的Linux系统的环境变量中(一般修改~/.bash_profile文件),添加对Nios II交叉编译环境的支持,这样在以后的开发中,就可以正常编译在Nios II嵌入式平台下运行的程序了。

      2. 内核的下载和烧写。在最初的调试中,是通过JTAG把内核下载到开发板,Nios II平台的硬件逻辑也是通过JTAG烧进开发板,等到最后硬件逻辑测试没有问题,以及uClinux操作系统调试运行正常后,就可以制作带bootloader的内核,烧入flash中。

2.3. 引导程序

      引导程序(即bootloader)就是在操作系统内核运行之前运行的一段小程序,它在硬件复位后首先被执行。主要工作是初始化硬件设备、建立内存空间的映射图,从而将系统的软硬环境带到一个合适的状态,以便为最终调用操作系统内核准备合适的环境。通常引导程序严重地依赖于硬件,每种CPU体系结构都用不同的启动代码。此外,引导程序还依赖于具体的嵌入式板级设备的配置,如硬件地址分配,RAM芯片类型等。bootloader担负着初始化硬件和引导操作系统的双重责任,也是在特定硬件平台操作系统移植至关重要的一步。

      对于作者使用的Nios II应用开发板,引导程序主要完成以下几项工作:

      1) 矢量表初始化。

      2) 初始化硬件(I/O口和控制器、存储器、时钟)。

      3) 将操作系统内核从Flash指定位置拷贝到RAM中。

      4) 软件初始化:建立堆栈和初始化数据段,建立C的运行环境。

      5) 让CPU转入RAM中指定的位置(即操作系统内核)开始执行。

      其中,第二步主要初始化处理器的一些控制或状态寄存器、时钟、I/O口、RAM等这些内核必须用到的设备。第三步中uClinux内核加载可以直接从flash某个地址开始逐句执行或者加载到内存中运行。作者采用的是后一种方法,即先把flash中的操作系统内核全部复制到内存中,再从内存中运行操作系统,因为内核大小一共不到1.5M字节,从flash复制到RAM中花的时间很少(几百毫秒),很快就会完成,该方法也比较容易实现。

      图1是作者的bootloader运行的主要流程:


2.4 uClinux操作系统映像的构建

      引导程序执行完毕后,处理器就开始执行真正的操作系统,操作系统内核的运行跟开发板的硬件配置有着紧密的联系。只有正确的配置操作系统内核,它才会正确利用硬件资源。由于2.6版本的uClinux已经支持了Nios II处理器,所以移植过程主要是板级移植。

      首先,利用Nios II的配套开发软件Quartus II新建一个工程,用SOPC builder设计好自己的硬件逻辑,编译后会生成两个跟硬件平台相对应的硬件逻辑的文件,其中,*.sof文件是烧入开发板中并运行于其中的硬件逻辑,另外一个*.ptf文件是用于生成跟硬件平台相适应的uClinux内核。

      然后,在宿主PC的Linux环境下,把*.ptf文件通过相关命令导入内核配置中,硬件平台的配置内容就会在linux/arch/Nios2nommu/scripts文件夹下生成,接着就可以通过make menuconfig 命令配置uClinux操作系统内核,具体相关选项的选择,要跟自己的硬件平台相同。
最后,在配置好内核后,就可以直接编译生成uClinux操作系统内核映像文件,把*.sof文件通过JTAG烧入开发板中,把内核映像文件通过JTAG烧入SDRAM中,一个uClinux操作系统就可以在Nios II开发板上运行起来了。

      图2是正确配置uClinux内核后的操作系统启动信息,打印信息是通过串口输出到屏幕上的:



图2  uClinux启动界面

      至此,一个简单的uClinux操作系统在Nios II嵌入式平台上移植完成,这个操作系统经过裁减,去掉了Linux内核中一些不是必须的功能,但是具有一个Linux操作系统的几乎所有的特征。接下来,就可以在建好的开发环境中,开发在此平台上运行的程序了。

3. 结束语

      Altera的Nios II软核处理器性能超过200DMIPS,在Altera FPGA中实现仅需35美分,并且开发者能从无限的系统配置组合中选择满足性能和成本目标的方案,而不必为系统级设计考虑采用ASIC。并且,Nios II处理器还具有完善的软件开发套件。

      此嵌入式平台最终应用于有线数字电视接收系统,主要完成对加密数字电视传输流的实时接收和解扰工作,在实际的测试中,uClinux 2.6操作系统运行良好并且稳定,完全能胜任此类工作。本项目产生经济效益800万元。

      本文作者创新点:在Nios II嵌入式平台上,实现了最新的uClinux 2.6嵌入式操作系统的移植,并对移植过程中的关键部分进行分析,对在Nios II嵌入式平台上的嵌入式系统移植有一定的指导和参考价值。

关键字:嵌入式系统  uClinux  移植  NiosII微处理器 引用地址:uClinux在Nios II嵌入式平台上的移植研究

上一篇:风河推出新版VxWorks 6.7实时操作系统
下一篇:状态机在嵌入式前后台软件系统中的应用

推荐阅读最新更新时间:2024-05-02 20:46

ARM+linux系统移植3G拨号上网收发短信三
一、用text查看模式 下面的 发 是指我敲的命令, 收 是指回车后显示的信息包括其他接收的信息。 ~ : microcom -s 115200 /dev/ttyUSB1 发:at 收:OK 设置成文本模式读: 发:at+cmgf=1 收:OK 将信息保存在SIM卡中: 发:at+cpms= SM , SM , SM 收:+CPMS: 0,50,0,50,0,50 收:OK 等待接收短信。。。。。。 收到了会有这个提示信息: 收:+CMTI: SM ,0 查看信息: 发:at+cmgl= rec unread 收:+CMGL: 0, REC UNREAD , +8613135699576
[单片机]
研华:从工业硬件到工业物联网的华丽转身
在大部分用户的印象中,研华一直致力于工业电脑产品的研发,从1983年到如今已经成立了32年,有着丰富的行业经验和深厚的产品基础。如今物联网产业爆发,很多传统企业都在向物联网转型,以应对客户的未来需求,研华也在2014嵌入式全球经销商大会上宣布,将与微软共建物联网智慧云端平台(IoT WISE-Cloud),双方未来共同开发智慧云端平台及应用在各领域的技术方案、产品,以达成战略合作关系。   研华嵌入式系统事业群华西区销售总监黄荣吉向笔者介绍,“物联网是硬件和软件的结合,研华早期的思维偏硬件,自动化产品是基于PC开发的,用简单的软件控制硬件,但是物联网阶段都会用到云端,我们会将这些进行整合形成方案提供给用户,涉及工业4.0、机器人
[嵌入式]
RyanMqtt移植指南
测试环境:stm32F401RCT6、RT-Thread版本: v4.1.0、RT-Thread Studio版本: 2.2.6、网络硬件使用ec800m移植at_socket使用sal框架。 1、移植介绍 RyanMqtt 库希望应用程序为以下接口提供实现: system 接口 RyanMqtt 需要 RTOS 支持,必须实现如下接口才可以保证 mqtt 客户端的正常运行 network 接口 RyanMqtt 依赖于底层传输接口 API,必须实现该接口 API 才能在网络上发送和接收数据包 MQTT 协议要求基础传输层能够提供有序的、可靠的、双向传输(从客户端到服务端 和从服务端到客户端)的字节流 time 接口
[单片机]
RyanMqtt<font color='red'>移植</font>指南
基于LabVIEW的32位处理器嵌入式系统的开发
随着32位多核处理器应用逐渐走热,设计者正面临着新的挑战, 业内专家指出面向角色(actor-oriented)的图形化方法是更适合嵌入式软件设计的工具。NI 的LabVIEW嵌入式开发模块是LabVIEW图形化编程环境的一款全新附加模块,通过这个软件和图形化系统设计的理念,原先无法利用到嵌入式编程的工程师们都可以进入32位微处理器的领域之中。通过LabVIEW中附加的状态图、控制图表、信号处理库函数等这一完整的工具来设计它们的应用,以解决各种问题。本文对该开发工具进行了介绍。 随着嵌入式系统变得越来越复杂,设计者正面临着新的挑战:随着基于32位微控制器(MCU)的嵌入式系统的成本向16位系统逐步接近,在许多高级应用中8位和16位
[测试测量]
基于LabVIEW的32位处理器<font color='red'>嵌入式系统</font>的开发
TMS320F28x上RTOS移植关键技术研究
TMS320F28x(简称“F28x”)数字信号处理器是TI公司推出的32位定点DSP控制器,其频率高达150 MHz,大大提高了控制系统的精度和芯片的处理能力。在F28x系列DSP上移植实时操作系统,需要对编泽器、系统启动过程、中断处理过程以及整体代码执行流程有一个全面的深入理解。对系统的整个运行过程有清晰的概念是移植实时操作系统的前提条件。本文将对从DSP上电复位到其系统功能实现的整个运行过程进行深入介绍,并在此基础上进一步分析在F28x系列DSP上移植实时操作系统一般原理,详细说明μC/OS-Ⅱ的移植。 1 BootROM及其运行 在F28lx、C28lx、R281x器件中都有一块dK×16位的BootROM。当引脚MP/nM
[嵌入式]
TMS320F28x上RTOS<font color='red'>移植</font>关键技术研究
AMD 以全新第二代 Versal 系列器件扩展领先自适应 SoC 产品组合
AMD 以全新第二代 Versal 系列器件扩展领先自适应 SoC 产品组合,为 AI 驱动型嵌入式系统提供端到端加速 — 第二代 Versal 系列产品组合中首批器件借助下一代 AI 引擎将每瓦 TOPS 提升至高 3 倍,同时将基于 CPU 的标量算力较之第一代提升至高 10 倍 — — 斯巴鲁位列首批宣布计划部署第二代 Versal AI Edge 系列的客户之中,为下一代EyeSight ADAS 视觉系统提供支持 — 2024 年 4 月 9 日,德国纽伦堡(国际嵌入式展)——AMD(超威,纳斯达克股票代码:AMD)今日宣布扩展 AMD Versal™ 自适应片上系统( SoC )产品组合,推出全新第二代 V
[网络通信]
AMD 以全新第二代 Versal 系列器件扩展领先自适应 SoC 产品组合
轻型PPP协议在µC/OS-II操作系统中的实现
1 引言 随着嵌入式技术的发展,让嵌入式设备接入Internet,实现网络资源共享,是未来发展的必然趋势,µC/OS-II操作系统中没有完备的网络协议栈 ,要实现嵌入式设备网络通信,必须要有自己的网络协议。鉴于目前PPP协议使用的普遍性和广泛性 ,本文提出了基于ARM7TDMI处理器的µC/OS-II操作系统上PPP协议的设计与实现。通过PPP协议在µC/OS-II上的实现 ,能让嵌入式设备接入Internet,进行信息互访,为未来的“普适计算”的发展提供了一个有利条件。 2 µC/OS-II移植实现 2.1 编写ARM7TDMI的启动程序 启动代码是芯片复位后进入C语言的main()函数前执行的一段代码,启动代码
[嵌入式]
如何构建eCos嵌入式系统
摘要 eCos是一个优秀的嵌入式实时操作系统。eCos的体系结构是一种分层结构,硬件抽象层将操作系统与硬件隔离开,这为把eCos移植到不同的硬件平台提供了便捷的方法,抽象层就像软件与硬件之间的桥梁。主要的移植思想是,按照eCos的模块化设计,完成硬件抽象层。 关键词 eCos 移植 硬件抽象层 嵌入式 可配置操作系统 引言   目前,嵌入式操作系统的种类较多,其中比较流行的有VxWorks、Windows CE、Psos、Palm OS、嵌入式Linux等。这些嵌入式操作系统在开放性、实用性以及性能等方面各有千秋,但大多数为商用产品。除了商用产品外,还有一些免费的嵌入式操作系统,uClinux是其中比较流行的,而eCos则是另一
[嵌入式]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved