方超
摘要:本文介紹了機器人技術嵌入式系統中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