面向机器人应用的嵌入式Linux移植与应用
2018-10-31方超
方超
摘要:本文介绍了机器人技术嵌入式系统中Linux操作系统的筛选、剪裁、移植和应用,结合机器人技术对系统实时性的要求对Linux系统实时性优化做了探讨。
关键词:机器人;Linux内核;移植
中图分类号:TP242 文献标识码:A 文章编号:1007-9416(2018)06-0124-01
1 引言
机器人技术是一种集成了力学、电子学、计算机技术、传感技术、控制理论和人工智能等许多学科于一体的先进技术。机器人技术的发展一直与嵌入式系统的发展密切相关,机器人技术的研究是嵌入式技术的应用,嵌入式技术的发展必将提升机器人的智能水平。20世纪70年代中期以后,由于智能控制理论的发展和微处理器的出现,机器人逐渐成为研究热点并取得了较大的发展。目前,嵌入式系统被广泛用于机器人控制系统中。
2 linux内核的移植
从操作系统的角度来看,完整的嵌入式linux系统一般包括Bootloader、linux内核、根文件系统和用户程序四个部分。由于硬件资源有限,无法将Bootloader和内核文件直接存放到存储系统中,需要针对具体应用的功能需求裁剪Bootloader和linux内核,并选择相应的C语言库文件,针对嵌入式芯片的指令集重新编译内核文件,使其具备完整的操作系统功能[1]。
2.1 交叉编译环境的搭建
在完备系统构建之前,嵌入式linux系统无法正常运行,而且裁剪过的系统一般不能运行大型的调试工具。因此,需要在另外一个平台上搭建一套linux系统开发环境,也叫做交叉编译环境。linux系统中常用的交叉编译工具是GNU工具链,包括binutils、gcc和glibc。构建交叉编译工具的方法主要有:(1)单独编译和安装交叉编译工具链所需要的源代码和库文件,最终生成适用于所用处理器的交叉编译工具;(2)通过Crosstool-ng脚本工具来实现一次编译,生成交叉编译工具。第一种方法相对困难,对于不想了解其内部机理的用户来说可以采用第二种方法。
2.2 Bootloader移植
Bootloader是一段引导内核和文件系统启动的程序,在操作系统上电或者复位之后,初始化硬件设备,建立内存空间的映射图,为调用操作系统内核准备好正确的环境。具体包括配置板载时钟系统、初始化内存、装载内核程序、跳转到内核执行,最后调用Linux操作系统和文件系统。
Bootloader的代码一般存放在FLASH、EEPROM等固态存储器中,其主要的启动模式有两种,启动加载模式和下载模式。其中下载模式是开发人员常用的模式,即建立宿主PC机和板载系统之间的连接,把linux内核以及根文件系统下载到存储器中,再对系统进行测试。
嵌入式系统中常用的引导程序有U-boot和Redboot等。U-boot代码结构与linux类似,因此也是最常用的嵌入式linux系统的引导程序。U-boot的运行主要分为Stage1和Stage2两个部分。Stage1使用汇编语言编写,主要包含依赖于cpu体系结构的代码,而stage2则通常用C语言来实现相对复杂的功能,具有更好的可读性和移植性。要对U-boot进行移植,通常要在U-boot通用代码中添加跟CPU、外设等硬件相关的配置文件,再对代码进行配置编译[2]。
2.3 Linux内核的裁剪与移植
内核是Linux系统的核心程序,内核的移植过程主要包括配置和编译,主要步骤包括:(1)修改内核源码根目录下的makefile文件,增加内核对ARM系列处理器的支持,并指定交叉编译器;(2)将与目标板相关的_deconfig文件拷贝到根目录下.config文件中;(3)配置内核,常用的命令有四种,make xconfig、make oldconfig、make config和make menuconfig,一般使用make menuconfig来生成开发配置界面;(4)编译内核,对配置过程中选择的功能性驱动进行编译,生成可执行的zImage文件,即压缩的内核镜像。
2.4 建立根文件系统
文件系统是存储设备上的文件的组织和目录,每个操作系统都至少有一个文件系统。嵌入式linux根文件系统可以通过busybox软件来完成,具体的步骤包括:(1)安装busybox软件;(2)建立设备节点console和null,即/dev/console和/dev/null两个基本的设备文件;(3)建立根文件系统中其他目录,/mnt,/proc,/sys,/lib等;(4)建立配置文件/etc/inittab,/etc/init.d/rcs和/etc/fstab;(5)安裝库函数,将交叉编译链接库中的所有.so库文件拷贝到根文件系统的lib目录中。
3 基于Linux内核的实时性
Linux已经被证明是适用于多种应用的非常稳定和优秀的内核。但是,由于GNU/ Linux最初设计为类Unix操作系统,因此其内核不能保证实时性能。调度程序延迟问题,即中断发生和负责服务的线程运行之间的延迟在紧急情况下可达到几十毫秒。这个问题主要是运行内核代码时线程无法抢占,以及内核中存在长时间不可中断的关键代码段,解决调度程序延迟问题主要有两种不同的方法[3]。
前一种解决方案最初由RTLinux在1996年提出并开发,其中包括在硬件和Linux之间插入一个称为微内核的高效代码层。微内核负责所有的实时功能,包括中断、调度和高分辨率定时。2002年,在ADEOS项目框架中提出了另一个称为纳米内核的代码层。ADEOS提供了一个硬件抽象层,允许实时内核和通用内核共存。该层的作用是将硬件中断传递给架构中更高层的操作系统内核。ADEOS系统不实现实时操作系统,但提供了以最高优先级将中断传递给实时操作系统的机制。一旦实时任务完成,相同的中断可能会传递给非实时操作系统。解决调度器延迟问题的另一种解决方案是1997年由KURT Linux项目提出的,这种方法包括提供一组内核补丁,以便在标准Linux的结构中直接实现Posix 1003.1d实时扩展(高分辨率定时器,可抢占内核,改进的任务调度器等)。类似的补丁,即所谓的抢占和低延迟补丁集合在一个补丁中,并可作为从Linux发行版2.5.4-pre6开始的标准内核配置选项(CONFIG_PREEMPT)基于为内核调度程序创建机会的想法,该调度程序更经常地运行,从而最小化事件发生和调度程序运行之间的时间。特别是,抢占补丁修改了自旋锁宏和中断返回码,如果可以抢占当前进程并重新调度请求未决,则系统调用调度器。
4 结语
以机器人的应用为背景,在嵌入式系统中引入linux操作系统来完成复杂任务,本文详细介绍了嵌入式linux系统的裁剪和移植详细步骤,并结合机器人应用对实时性的要求探讨了对嵌入式linux系统实时性的优化方法。为机器人的嵌入式应用提供良好的参考资料。
参考文献
[1]王学龙.嵌入式Linux系统设计与应用[M].清华大学出版,2001.
[2]程春雷.ARM平台下Linux移植中BootLoader的原理和技术[J].中国电力教育,2007,(s1):25-27.
[3]李晓宁,李晓峰.基于嵌入式Linux操作系统的研究[J].长春师范大学学报, 2010,(2):48-49.
Abstract:This paper introduces the selection, cutting, transplantation and application of the Linux operating system in the embedded system of robot technology, and discusses the real-time performance optimization of the Linux system based on the requirements of the robot technology to the real-time performance of the system.
Key words:robot; Linux kernel; transplant