隨著嵌入式系統(tǒng)的迅速發(fā)展和廣泛應(yīng)用,嵌入式Linux以其強(qiáng)大的性能和開放性,越來越被開發(fā)人員所推崇。以CAI、IBM等公司和組織所建立的Embedded Linux Consortium(ELC)的成立更標(biāo)志著嵌入式Linux已經(jīng)走向標(biāo)準(zhǔn)化階段。現(xiàn)在,各種基于Linux的嵌入式系統(tǒng)已被用于各行各業(yè)中。基于源代碼完全開放的優(yōu)勢(shì)和可以與商業(yè)操作系統(tǒng)相媲美的良好性能,人們對(duì)基于嵌入式實(shí)時(shí)Linux平臺(tái)的開放性的數(shù)控系統(tǒng)展開了很多的研究和探討。國際上一些組織和研究機(jī)構(gòu)在利用嵌入式Linux方面構(gòu)建中高檔數(shù)控方面已經(jīng)取得了一些實(shí)質(zhì)上的突破和進(jìn)展[6]。
系統(tǒng)構(gòu)建方法與策略
目前,作為世界上最大的開源項(xiàng)目,Linux技術(shù)取得了飛速的發(fā)展,在桌面應(yīng)用、海量運(yùn)算、消費(fèi)類電子及工控產(chǎn)品等領(lǐng)域都有著廣泛的應(yīng)用。由于具有非常重要的實(shí)際價(jià)值,微型Linux系統(tǒng)構(gòu)建一直被當(dāng)作嵌入式領(lǐng)域的一個(gè)研究熱點(diǎn),也取得了一些研究成果,如基于軟盤的小型Linux系統(tǒng)(floppy disk Linux project)、自啟動(dòng)U盤Linux項(xiàng)目(tiny Linux system with flash card)等等[1]。
基于實(shí)際系統(tǒng)開發(fā)的需要,在借鑒國際上一些優(yōu)秀的開源項(xiàng)目的基礎(chǔ)上,本文作者給出了一整套構(gòu)建專用實(shí)時(shí)數(shù)控系統(tǒng)平臺(tái)(Real time numerical control system platform -RCNCP)的方案和策略。
構(gòu)建該實(shí)時(shí)數(shù)控系統(tǒng)平臺(tái)的兩個(gè)主要目標(biāo)分別是:為達(dá)到驗(yàn)證應(yīng)用程序接口的目的,研發(fā)一整套能實(shí)現(xiàn)所有數(shù)控模塊功能的軟件;建立一個(gè)媒介平臺(tái),在此基礎(chǔ)上進(jìn)行二次開發(fā),可以方便的實(shí)現(xiàn)對(duì)機(jī)床、機(jī)器人、坐標(biāo)測(cè)量機(jī)等自動(dòng)化設(shè)備的實(shí)時(shí)控制[2]。
基于RCNCP作為一個(gè)控制系統(tǒng)軟件平臺(tái)特性,筆者著重從是實(shí)時(shí)內(nèi)核裁減與構(gòu)建、Linux系統(tǒng)整合等兩個(gè)方面。
實(shí)時(shí)內(nèi)核裁減與構(gòu)建
考慮到源代碼的開放性及實(shí)時(shí)LINUX系統(tǒng)的迅速發(fā)展,筆者采用了REALTIME-LINUX作為 RCNCP控制系統(tǒng)的底層平臺(tái)。具體適用版本Rtlinux-3.1和Linux核心2.4.16。
具體實(shí)現(xiàn)步驟如下:
獲得需要的源代碼文件:
Linux-2.4.16.tar.gz Linux核心
Rtlinux-3.1.tar.gz Rtlinux源代碼
patch_rtl-2.4.16、patch_rtlinux-3.1 補(bǔ)丁文件
解壓縮源代碼并給打補(bǔ)丁
tar-zxvf /tmp/rtlinux-3.1.tar.gz
tar zxvf /tmp/linux-2.4.16.tar.gz
patch p1patch p1
編譯Linux系統(tǒng)核心
make menuconfig(或者make xconfig),在相應(yīng)出現(xiàn)的選擇界面上選中rtlinux所需的特性。如Disable APM feature、Disable SMP feature、Enable RTC at the character device section (實(shí)時(shí)時(shí)鐘)
Enable Frame-buffer support。然后執(zhí)行編譯操作
make dep、make bzImage、make modules、make modules_install。
最后得到一個(gè)可啟動(dòng)的系統(tǒng)核心bzImage。
編譯Rtlinux系統(tǒng)核心
用剛才得到的系統(tǒng)核心重新引導(dǎo)系統(tǒng),進(jìn)入Rtlinux-3.1目錄下, 執(zhí)行以下操作:
make config、make、make devices、make install
最后輸入rtlinux start腳本文件,就會(huì)在屏幕上看到相應(yīng)的rtlinux 啟動(dòng)信息。
Linux系統(tǒng)整合
一個(gè)穩(wěn)定的實(shí)時(shí)內(nèi)核是整個(gè)系統(tǒng)工作的重要基礎(chǔ)。但是僅僅有內(nèi)核系統(tǒng)是不能工作的,必須配以完整的啟動(dòng)引導(dǎo)程序、文件系統(tǒng)、人機(jī)界面等支持。
考慮到實(shí)際工程需要,筆者采用Compact Flash card作為媒介來存儲(chǔ)Linux系統(tǒng)和應(yīng)用程序,采用GRUB為系統(tǒng)引導(dǎo)程序,采用有“瑞士軍刀”美譽(yù)的BusyBox提供文件系統(tǒng)支持。
具體實(shí)現(xiàn)步驟如下:
系統(tǒng)分區(qū)及格式化
首先筆者需要一個(gè)Compact-Flash Card Reader來連接CF卡和宿主計(jì)算機(jī),市場上一般提供USB接口的讀卡器。
首先,通過讀卡器將CF卡插入U(xiǎn)SB接口,使用下面的命令對(duì)其進(jìn)行分區(qū)和格式化:
fdisk/dev/sda
其中/dev/sda設(shè)備指用戶的優(yōu)盤。如果用戶的機(jī)器中還有其它的SCSI設(shè)備,那么可能是/dev/sdb等。用戶使用“fdisk”刪除原來的所有分區(qū),并將所有的空間都分成一個(gè)Linux基本分區(qū)。接下來用戶要將其格式化為Ext2文件系統(tǒng),可以使用以下命令:
mkfs.ext2/dev/sda1
通過上述命令我們就得到一個(gè)完整Linux分區(qū)存儲(chǔ)盤。
引導(dǎo)程序GRUB的編譯與安裝
可以采用從源代碼方式安裝,也可以采由宿主機(jī)上直接利用GRUB命令來給CF卡上安裝引導(dǎo)程序,為方便起見,采用了后者。
首先,要將格式化好的優(yōu)盤上的文件系統(tǒng)掛載到當(dāng)前的Linux系統(tǒng)中。命令如下:
mount/dev/sda1/usb
接著,要建立GRUB所需要的目錄,并將當(dāng)前使用的Linux系統(tǒng)中的GRUB相關(guān)文件(/boot/grub/目錄下的stage1和stage2)復(fù)制到CF卡的/usb/boot/grub下。命令如下:
mkdir/usb; mkdir/usb/boot; mkdir/usb/boot/;
cp/boot/grub/stage* /usb/boot/grub;
然后,使用“grub”命令將GRUB引導(dǎo)程序安裝在優(yōu)盤上。
具體可以參考如下:
grub>root(hd2,0)
Filesystem type is ext2fs, partition type 0x83
grub>setup (hd2)
Checking if“/boot/grub/stage1” exists... yes
Checking if“/boot/grub/stage2”exists... yes
Checking if“/boot/grub/e2fs_stage1_5”exists... no
Install /boot/grub/stage1(hd2)/boot/grub/stage2/boot/grub/grub.conf... succeeded Done.
grub>quit
這樣就成功的把GRUB引導(dǎo)程序安裝到CF卡上了,CF卡也成為可獨(dú)立啟動(dòng)的媒介了。
文件系統(tǒng)建立
作為對(duì)嵌入式Linux系統(tǒng)支持的一個(gè)重要部分,筆者采用BusyBox來這一小巧工具來完成這一功能。其實(shí)現(xiàn)方法也很簡單:
tar-zxf busybox-0.60.5.tar.gz;
cd busybox-0.60.5;make;make install
然后把BusyBox安裝到Compact Flash:上
cp-r install/*/mnt/flash;
安裝完成之后,就可以使用BusyBox提供系統(tǒng)支持了。
具體應(yīng)用
考慮到數(shù)控設(shè)備行業(yè)系統(tǒng)軟件應(yīng)用特點(diǎn),基于分布式控制的思想,在已經(jīng)構(gòu)建的實(shí)時(shí)Linux系統(tǒng)基礎(chǔ)上,采用組件化設(shè)計(jì)方法,整個(gè)控制系統(tǒng)軟件按其功能分類可以劃分為四個(gè)部分GUI(Graphical User Interfaces)人機(jī)界面、動(dòng)作控制器Motion Controller(MOT)、輸入輸出控制器Discrete I/O Controller(IO)和任務(wù)指派器Task Executor(TASK),其系統(tǒng)工作流程圖如圖1所示。