0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用Nios-DEVKIT-2C35开发板实现uClinux嵌入式操作系统的移植

电子设计 来源:微计算机信息 作者:余腊生,洪飞 2020-10-09 10:27 次阅读

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文件系统。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运行的主要流程:

利用Nios-DEVKIT-2C35开发板实现uClinux嵌入式操作系统的移植

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内核后的操作系统启动信息,打印信息是通过串口输出到屏幕上的:

图2uClinux启动界面

至此,一个简单的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嵌入式平台上的嵌入式系统移植有一定的指导和参考价值。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5056

    文章

    18950

    浏览量

    301468
  • 操作系统
    +关注

    关注

    37

    文章

    6651

    浏览量

    123094
  • Nios II
    +关注

    关注

    1

    文章

    65

    浏览量

    20886
  • 开发板
    +关注

    关注

    25

    文章

    4872

    浏览量

    96971
  • uClinux
    +关注

    关注

    3

    文章

    75

    浏览量

    42858
收藏 人收藏

    评论

    相关推荐

    基于FPGA的uClinux系统移植实现web-server[1]

    web-server的实现   一.NIOS2 IDE下实现 uClinux嵌入 引言:1.为
    发表于 08-20 16:57

    μC/OS-II 在Nios上的移植

    首先介绍嵌入式实时操作系统μC/OS-II 和Nios 嵌入式处理器, 分析μC/O
    发表于 03-08 09:31 90次下载

    μC OS-II 在Nios 上的移植1

    首先介绍嵌入式实时操作系统μC/OS-II 和Nios 嵌入式处理器, 分析μC/OS-II
    发表于 05-16 14:32 28次下载

    嵌入式OS-uClinux软件开发环境的建立及应用程序开发

    本文介绍了在mcf5272嵌入式硬件开发板基础上如何移植uClinux操作系统以及开发用户应用程
    发表于 07-30 13:45 26次下载

    基于NIOS软核处理器的uClinux移植

    本文介绍基于 NIOS开发过程,以及详细介绍向该开发板移植uClinux 操作系统和引导代码
    发表于 08-24 09:11 25次下载

    嵌入式操作系统uClinux和eCos的比较

    uClinux和eCos操作系统是两种性能优良、源码公开且被广泛应用的免费嵌入式操作系统。本文通过对uclinux和eCos的对比,分析和总
    发表于 04-18 08:36 1678次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>操作系统</b><b class='flag-5'>uClinux</b>和eCos的比较

    基于Chirp函数的Nios嵌入式实现

    分析Chirp函数在频域上的一般特性,提出利用FPGA的嵌入式软核NiosⅡ处理器在嵌入式操作系统μC
    发表于 06-15 11:02 1138次阅读
    基于Chirp函数的<b class='flag-5'>Nios</b> Ⅱ<b class='flag-5'>嵌入式</b><b class='flag-5'>实现</b>

    嵌入式操作系统移植

    嵌入式操作系统移植,感兴趣的小伙伴们可以看看。
    发表于 11-08 18:13 3次下载

    嵌入式操作系统uCLinux详解

    1 引言 嵌入式操作系统嵌入式系统的灵魂,而且在同一个硬件平台上可以嵌入不同的嵌入式
    发表于 11-02 10:42 0次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>操作系统</b><b class='flag-5'>uCLinux</b>详解

    uClinux嵌入式系统中的移植

    1 引言 uClinux作为Linux衍生操作系统,具有支持多任务、内核精简、高效、稳定和源代码开放等优点,专门应用于无MMU微处理器的嵌入式系统[1]。将
    发表于 11-06 10:30 5次下载
    <b class='flag-5'>uClinux</b>在<b class='flag-5'>嵌入式</b><b class='flag-5'>系统</b>中的<b class='flag-5'>移植</b>

    嵌入式操作系统uClinux和eCos的比较

    1 两种开源嵌入式操作系统介绍 uClinux是一种优秀的嵌入式Linux版本。uClinux是micro-Conrol-linux的缩写。
    发表于 12-01 17:12 510次阅读
     <b class='flag-5'>嵌入式</b><b class='flag-5'>操作系统</b><b class='flag-5'>uClinux</b>和eCos的比较

    嵌入式操作系统FREERTOS的移植.

    嵌入式操作系统FREERTOS的移植.(济南嵌入式开发招聘)-嵌入式操作系统FREERTOS
    发表于 07-30 12:01 15次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>操作系统</b>FREERTOS的<b class='flag-5'>移植</b>.

    嵌入式实时操作系统FreeRTOS在ARM7上移植实现

    嵌入式实时操作系统FreeRTOS在ARM7上移植实现(嵌入式开发工程师待遇)-嵌入式实时
    发表于 07-30 12:05 20次下载
    <b class='flag-5'>嵌入式</b>实时<b class='flag-5'>操作系统</b>FreeRTOS在ARM7上<b class='flag-5'>移植</b><b class='flag-5'>实现</b>

    嵌入式操作系统FreeRTOS的原理与移植实现

    嵌入式操作系统FreeRTOS的原理与移植实现(嵌入式开发真的很难吗)-随着嵌入式技术的不断发展
    发表于 08-04 13:50 16次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>操作系统</b>FreeRTOS的原理与<b class='flag-5'>移植</b><b class='flag-5'>实现</b>

    课堂笔记之嵌入式Linux操作系统

    嵌入式操作系统开发工具、系统应用开发(&GUI)、系统
    发表于 11-02 09:51 15次下载
    课堂笔记之<b class='flag-5'>嵌入式</b>Linux<b class='flag-5'>操作系统</b>