摘 要:嵌入式Linux操作系統相對WinCE、pSOS、Palm OS有很多優點,有取代其他嵌入式操作系統的趨勢;使得構造一個大型機器的復雜控制系統變得簡單和容易。本文結合注塑機的工藝特點,研究將嵌入式Linux操作系統應用到塑料成型控制系統中的一些關鍵問題,來構造其控制器的軟、硬件設計思路方法。
關鍵詞:嵌入式操作系統 實時內核 注塑機控制
注塑機由模具鎖模機構、高分子塑料在螺桿加熱、液壓射膠、保壓成型等工序組成。精密注塑需要控制的參數多,對實時性能、控制精度、安全性、可靠性的要求較高。傳統的控制系統雖然可以達到上述要求,但卻存在著開發成本高、開發時間過長、擴展性差、軟件升級困難、兼容性和可移植性差、網絡功能有限等缺點。隨著嵌入式Linux的應用,其控制系統的開發變得簡單和容易。
嵌入式Linux由一個Kernel(內核)及一些根據注塑機控制需要定制的模塊組成。Kernel很小,一般只有幾百KB,即使加上其他必需的模塊和應用程序,所需的存儲空間也很小。它有多任務、多進程的系統特征,另外還具有實時性。一個小型的嵌入式Linux系統只需要引導程序、Linux微內核、初始化進程3個基本元素。運行嵌入式Linux的CPU可以是x86、Alpha、Sparc、MIPS、PPC等。與這些芯片搭配的主板都很小,與一張PCI卡大小相當,有的甚至更小。嵌入式Linux所需的存儲器不是軟磁盤、硬盤、Zip盤、CD-ROM、DVD這些眾所周知的常規存儲器,它使用Rom、CompactFlash機和M-Systems的DiskOnChip、Sony的MemoryStick、IBM的MicroDrive等體積極?。ㄅc主板上的BIOS大小相近),存儲容量不太大的存儲器。它的內存可以使用普通的內存,也可以使用專用的RAM。正是這些優點,使得塑料成型控制系統的研究開發變得越來越容易和簡單。
1 嵌入式Linux內核體系結構
嵌入式Linux的內核體系結構如圖1所示,內核職能有4點。
?、?硬件抽象層(HAL)包含了所有和硬件平臺相關的代碼,如上下文切換和I/O寄存器訪問等。它存在于嵌入式Linux的層,直接訪問和控制硬件,對其上層的硬件提供訪問和控制服務。這樣,可以簡化內核的移植工作,除了設備驅動程序之外,在移植的時候只須修改HAL的代碼即可。
?、?內核是用來為大多數程序乃至OS(網絡、文件系統、驅動程序)構建一系列在抽象的文件上工作的抽象機,使用戶程序及上層OS組件對系統設備透明。這個內核主要實現如下一些接口:多任務、中斷、異常及定時器函數,標準C函數庫,應用程序的動態加載/卸載等等。
?、?實時內核提供對事件優先級的調度和搶占支持,增加系統實時調度的能力。
④ 對應用程序提供的函數接口,專門為用戶定制網絡、圖形、視頻等接口。
嵌入式Linux內核的實現為微內核的體系結構,如圖1所示。使用微內核的體系結構,使得嵌入式Linux的體積很小,便于直接放在ROM中,實現ROM固化;同時,方便進行模塊化的擴展。
2 硬件設計體系結構
硬件體系結構如圖2所示。
圖2中,微處理器選用Intel的X86芯片;Flash Memory/ROM和RAM采用我們開發的電子盤來實現(電子盤加載驅動程序后就可以取代硬盤,作用是引導和啟動嵌入式Linux操作系統,實時內核和所有的應用程序都固化在這個電子盤上);以太網接口用標準的網卡來實現;并口和串口都是采用標準的硬件芯片來實現,采用32位系統總線(可以根據需要改為其他的);其他外設如液晶顯示屏等,根據需要可以很方便地添加。
3 構造嵌入式Linux內核
對構造嵌入式Linux內核框架須考慮下面幾個元素:
?、?引導Linux內核(采用BIOS引導特征標志55、AA代碼);
?、?Linux微內核由內存管理、進程管理和事務處理構成;
?、?初始化進程;
?、?硬件設備驅動程序(盡量利用現有標準化的設備驅動程序);
?、?實時內核模塊(從RTLinux來定制裁剪);
?、?提供所需功能的應用程序(即控制程序、控制算法的計算機實現);
⑦ 精簡的TCP/IP網絡協議棧(對標準TCP/IP網絡協議棧進行裁剪定制得到)。
實現的方法,是從標準的Linux系統資源,按照微內核(Kernel)的需求來減少,以適應諸如電子盤容量、內存容量、處理器速度以及節能限制來定制嵌入式Linux內核。系統實現步驟如下:
?、?重新編譯Linux內核,去掉內核中不需要的模塊,諸如PCMCIA之類的外設支持模塊等,加入自己編寫的內核模塊;
?、?編寫Boot Loader,制作電子盤用于加載嵌入式Linux內核到內存中;
?、?重新設計以太網驅動程序、串/并口驅動程序以及I/O卡驅動程序;
?、?設計嵌入式Linux應用程序,管理打印服務的應用。
4 實時內核的實現
要將Linux應用到工業控制系統中,首先要解決的問題就是其實時性問題。
本系統的實時內核是通過內核模塊編程的方法來實現的。實現的途徑,是參考美國新墨西哥州大學計算機科學系Victor Yodaiken和Michael Brananov開發的RTLinux,并在RTLinux的源代碼基礎上,結合POSIX.1b的實時擴展規范,對其定制成標準的Linux可加載/卸載的內核模塊。這個模塊主要提供一些必要的功能,如底層任務創建、中斷服務程序,并且為底層任務、ISR和Linux進程之間進行通信排隊。
實時內核模塊提供了實時任務的編程和控制接口(API)。通過使用這些API,可以提供對實時任務的創建和刪除、任務調度和控制等功能,從而實現工業上的實時控制。
實時內核提供的編程和控制接口(API)模塊主要有:
① 中斷控制API函數;
?、?時鐘控制和獲??;
?、?線程的創建和刪除以及線程優先級和調度策略的控制API函數;
?、?POSIX方式的驅動接口;
⑤ FIFO設備驅動程序;
?、?串口驅動程序的API函數;
?、?mbuff驅動API函數;
?、?浮點運算API函數。
一些主要的任務處理函數:rt_task_init()用來創建并開始一個任務,能指定堆棧的大小和優先級;rt_task_make_periodic()以一定間隔周期性地設置任務運行;rt_task_wait()阻塞任務。實時任務與Linux進程之間通信的主要方法是FIFO:rtf_create()創建 一個一定大小的FIFO,用rtf_put()將數據送入FIFO,如果FIFO滿,則返回一個錯誤。類似地,rtf_get()從FIFO中取出數據,如果FIFO空,則返回一個錯誤。線程管理:pthread_create()創建一個線程,pthread_delete()刪除一個線程,并且釋放該線程的所有資源,pthread_setschedparam()設置一個線程的調度參數。時鐘函數:clock_getres()獲得clock時鐘的解析度,等等。
5 實驗和程序調試方法
實驗裝置采用486/586微機主板作為注塑機的硬件電路,用電子盤作為嵌入式操作系統的引導和啟動設備,去掉硬盤、軟盤和其他設備,TCP/IP接口用標準網卡來實現,調試程序的時候可以加上鍵盤和顯示器,驅動信號從并口/串口輸出(調試時)。
以上方法,在標準Linux環境下,編寫好電子盤的設備驅動程序和控制算法的計算機程序(外加I/O板時還需要I/O板的驅動程序),定制好嵌入式Linux內核和實時內核(為zImage),并將電子盤(在Linux中是ram)Mount到/RamDisk上,在電子盤上制作引導和啟動盤。具體制作方法如下:
?、?修改LILO.CONF,使得系統可以直接從電子盤啟動;
?、?創建一個內核文件系統ext2:mke2fs -i 8192 -m 0 /dev/ram 50;
?、?在/RamDisk目錄下,建立運行系統所必需的目錄文件:bin dev etc lib mnt proc sbin tmp usr var,以及各個目錄下必要的文件,特別是應用程序所需要的庫文件;
?、?設置內核鏡像文件中的ramdisk的偏移量,以指出如何確定定位根文件系統,可以通過命令rdev來設置;
?、?將內核文件放到RamDisk中:
#dd if=zImage of=/dev/ram bs=1k
?、?加載根系統文件:
#dd if=/tmp/ram_image.gz of=/dev/fd0 bs=1k seek=內核數據塊數
其中ram_image.gz壓縮后的根系統文件,內核數據塊數就是內核的大小。
這樣就做成了系統啟動盤,可以去掉硬盤、軟盤等部件,直接從電子盤來啟動系統。在根文件系統中存放有RT Linux的啟動模塊和各種控制算法應用程序,再接上控制信號的驅動裝置和一些其他必要的裝置,就可以直接對機器的各個參數進行控制了。
6 小 結
嵌入式Linux的出現使得構造工業控制系統有了更好的選擇。Linux操作系統的高性能、高可靠性、眾多高效免費的開發工具和應用程序,使得可以在很短的時間內設計出一個強大、高效、復雜、低成本的控制系統。
參考文獻
1 Mantegazza P,et al. RTAI: Real-Time Application Interface
2 Rick Lehrbaum. Using Linux in Embedded and Real-time Systems. http://www.linuxdevices.com