uClinux在Nios II嵌入式平台上的移植研究
发布时间:2009/2/18 0:00:00 访问次数:750
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
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
热门点击
- Linux设备驱动程序的函数跳转表
- PIE中断向量的映射方式
- Linux系统调用例程system_call
- PIE模块级中断
- 什么是Linux内核模块
- Linux系统调用接口、系统调用例程和内核服
- ARM复位原理
- Linux系统调用接口、系统调用例程和内核服
- Linux字符设备驱动程序的注册
- Linux外部设备的基本概念
推荐技术资料
- DFRobot—玩的就是
- 如果说新车间的特点是“灵动”,FQPF12N60C那么... [详细]