《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 一種嵌入式操作系統(tǒng)休眠喚醒后程序自動(dòng)運(yùn)行的方法
一種嵌入式操作系統(tǒng)休眠喚醒后程序自動(dòng)運(yùn)行的方法
來(lái)源:微型機(jī)與應(yīng)用2012年第2期
陳 鵬,王樹(shù)志,董孝峰,張全勝
北京中科院軟件中心有限公司,北京100080
摘要: 針對(duì)目前采用休眠方式來(lái)實(shí)現(xiàn)嵌入式系統(tǒng)快速啟動(dòng)后,一些動(dòng)態(tài)進(jìn)程或進(jìn)程的執(zhí)行過(guò)程不能正常恢復(fù)而導(dǎo)致進(jìn)程不能按照原來(lái)的方式正常運(yùn)行的情況,運(yùn)用一種新的方法,實(shí)現(xiàn)了基于休眠的嵌入式操作系統(tǒng)啟動(dòng)后,自動(dòng)運(yùn)行任何形式的目標(biāo)腳本和應(yīng)用程序。
中圖分類號(hào): TP316.6
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2012)02-0011-03
A kind of program′s autorun method after wake from hibernation of embedded system
Chen Peng,Wang Shuzhi,Dong Xiaofeng,Zhang Quansheng
Beijing Software Engineering Center Co., Ltd., Chinese Academy of Sciences,Beijing 100080,China
Abstract: With the conditions that many embedded systems based on hibernation after reboot some dynamic process or the execution process of these process does not resume normal,the result of these leading to these process is not running according to the original situation. The paper introduce a new approach, realized the embedded operating system based on hibernation after reboot can autoexec any form of target scripts and applications automatically.
Key words : hibernation;process switch;daemon;signal transfer

    為了提高系統(tǒng)的啟動(dòng)速度,通常采用基于休眠技術(shù)的方式來(lái)實(shí)現(xiàn)嵌入式系統(tǒng)的快速啟動(dòng)[1]。例如,在一些數(shù)字電視中,采用休眠技術(shù)以后的啟動(dòng)時(shí)間要比原來(lái)的啟動(dòng)時(shí)間約快1/3[2]。但基于休眠技術(shù)的啟動(dòng)方法有其不足之處:在保存內(nèi)存內(nèi)容時(shí)只能把內(nèi)存中的信息以快照的形式保存到磁盤(pán)或其他外部存儲(chǔ)設(shè)備,原來(lái)系統(tǒng)內(nèi)某些正在運(yùn)行的動(dòng)態(tài)進(jìn)程及進(jìn)程本身的執(zhí)行過(guò)程不能被完全保存下來(lái),從而導(dǎo)致系統(tǒng)重新啟動(dòng)后此部分進(jìn)程不能正常運(yùn)行;基于休眠技術(shù)的啟動(dòng)方式一旦以快照的形式保存后其里面的內(nèi)容將無(wú)法改動(dòng)?;诖耍疚倪\(yùn)用一種新方法,實(shí)現(xiàn)了基于休眠的嵌入式操作系統(tǒng)啟動(dòng)后,可自動(dòng)運(yùn)行任何形式的目標(biāo)腳本和應(yīng)用程序。

1 休眠喚醒后程序自動(dòng)運(yùn)行的方法
    最新的Linux2.6內(nèi)核都支持休眠和待機(jī)機(jī)制,PC系統(tǒng)中的實(shí)現(xiàn)方式有suspend2、swsusp、TuxOnIce等技術(shù),既可以把鏡像文件保存到交換分區(qū),也可以保存到一個(gè)文件[3]。Linux中這些休眠的具體實(shí)現(xiàn)方式有內(nèi)核方式和軟件方式兩種,但兩種方式都把休眠過(guò)程分為兩個(gè)階段:(1)SUSPEND階段:保存當(dāng)前系統(tǒng)各種狀態(tài)到非易失性存儲(chǔ)設(shè)備并關(guān)機(jī);(2)RESUME階段:系統(tǒng)重新啟動(dòng),引導(dǎo)后恢復(fù)已保存的狀態(tài)[4]。一般嵌入式操作系統(tǒng)的休眠過(guò)程如圖1所示,休眠后恢復(fù)過(guò)程如圖2所示。


    本文提出一種基于休眠開(kāi)關(guān)如圖3所示的喚醒后程序自動(dòng)運(yùn)行方法。此方法的系統(tǒng)整體框架分為自動(dòng)執(zhí)行引擎、開(kāi)關(guān)控制進(jìn)程、休眠開(kāi)關(guān)和配置文件4個(gè)部分。
1.1 自動(dòng)執(zhí)行引擎
    自動(dòng)執(zhí)行引擎采用守護(hù)進(jìn)程實(shí)現(xiàn)的方式。所謂守護(hù)進(jìn)程就是Daemon進(jìn)程,是Linux中的后臺(tái)服務(wù)程序,是一個(gè)生存期較長(zhǎng)的進(jìn)程,通常獨(dú)立于控制終端并且周期性地執(zhí)行某種任務(wù)或等待處理某些事件的發(fā)生[5]。守護(hù)進(jìn)程常常在系統(tǒng)引導(dǎo)裝入時(shí)啟動(dòng),在系統(tǒng)關(guān)閉時(shí)終止。把要運(yùn)行的目標(biāo)腳本和應(yīng)用程序放到守護(hù)進(jìn)程中,并定義一個(gè)全局變量Autoflg作為標(biāo)志位。運(yùn)用此模塊的目的是讓其在操作系統(tǒng)后臺(tái)運(yùn)行,通過(guò)標(biāo)志位實(shí)時(shí)監(jiān)控目標(biāo)腳本和應(yīng)用程序的運(yùn)行狀態(tài)。守護(hù)進(jìn)程的整體結(jié)構(gòu)圖如圖4所示。

    守護(hù)進(jìn)程模塊分主調(diào)函數(shù)生成守護(hù)進(jìn)程的Daemon程序和主調(diào)函數(shù)程序兩部分,通過(guò)執(zhí)行這兩個(gè)程序最終生成在操作系統(tǒng)后臺(tái)一直運(yùn)行的守護(hù)進(jìn)程。其執(zhí)行的程序框圖如圖5所示。

1.2 開(kāi)關(guān)控制模塊
    此模塊的功能是控制守護(hù)進(jìn)程中的Autoflg標(biāo)志位,此標(biāo)志位是在守護(hù)進(jìn)程中的主調(diào)函數(shù)程序中設(shè)置的,用來(lái)控制目標(biāo)腳本和應(yīng)用程序的運(yùn)行狀態(tài)。其具體程序框圖如圖6所示。
1.3 休眠模塊
    此模塊實(shí)現(xiàn)守護(hù)進(jìn)程和控制模塊之間的通信,采用系統(tǒng)調(diào)用的方式,目的是通過(guò)控制模塊的執(zhí)行來(lái)控制守護(hù)進(jìn)程中標(biāo)志位的變化,而這種控制是通過(guò)在內(nèi)核中插入信號(hào)傳遞模塊來(lái)實(shí)現(xiàn)。
1.4 配置文件

 


    配置文件(即方法執(zhí)行)過(guò)程:
    (1)執(zhí)行時(shí)首先運(yùn)行守護(hù)進(jìn)程,但要通過(guò)Autoflg標(biāo)志位保證目標(biāo)腳本和應(yīng)用程序處于不運(yùn)行狀態(tài)。
    (2)運(yùn)行控制標(biāo)志位函數(shù)修改Autoflg,讓其保證目標(biāo)腳本和應(yīng)用程序可以運(yùn)行。
    (3)執(zhí)行快速啟動(dòng),系統(tǒng)執(zhí)行快速啟動(dòng)程序同時(shí)確保保存到磁盤(pán)或其他存儲(chǔ)設(shè)備中的標(biāo)志位是處于可以使目標(biāo)腳本和應(yīng)用程序運(yùn)行的狀態(tài)。
    (4)因?yàn)榛谛菝叩目焖賳?dòng)方法是以快照的方式把內(nèi)存內(nèi)容保存到磁盤(pán)或其他存儲(chǔ)設(shè)備中,并且一旦執(zhí)行,里面的內(nèi)容將無(wú)法修改,所以以后每次操作系統(tǒng)啟動(dòng)時(shí)都能保證守護(hù)進(jìn)程的正常運(yùn)行,同時(shí)也能保證守護(hù)進(jìn)程中的標(biāo)志位處于能夠使目標(biāo)腳本和應(yīng)用程序處于運(yùn)行的狀態(tài),從而使目標(biāo)腳本和應(yīng)用程序能夠正常運(yùn)行。
    (5)為了提高CPU的運(yùn)行速度和整個(gè)系統(tǒng)的使用效率,本方法設(shè)置守護(hù)進(jìn)程在每次啟動(dòng)目標(biāo)腳本和應(yīng)用程序后都自動(dòng)退出。因?yàn)樵O(shè)置守護(hù)進(jìn)程的目的就是在每次操作系統(tǒng)啟動(dòng)時(shí),使其啟動(dòng)目標(biāo)腳本和應(yīng)用程序,待這項(xiàng)工作完成以后,它的使命也隨之完成(即從系統(tǒng)的運(yùn)行速度和運(yùn)行效率角度來(lái)看,已沒(méi)有其存在的必要性)。
2 實(shí)驗(yàn)分析
    為了確保本文所提方法的實(shí)用性和可靠性,把其應(yīng)用到海爾數(shù)字電視上進(jìn)行了驗(yàn)證,并對(duì)驗(yàn)證結(jié)果進(jìn)行了詳細(xì)的分析。
    實(shí)驗(yàn)環(huán)境如下:
    (1)硬件環(huán)境:MSTAR 6I98電視主板:主頻為700 MHz,內(nèi)存為512 MB,F(xiàn)lash為256 MB,總線為I2C、PCI。
    (2)軟件環(huán)境:電視主板中運(yùn)行Linux-2.6.28.9嵌入式操作系統(tǒng),串口控制臺(tái)服務(wù)器為L(zhǎng)inux操作系統(tǒng)。
    首先對(duì)海爾數(shù)字電視采用基于休眠的技術(shù)對(duì)其操作系統(tǒng)進(jìn)行改進(jìn),實(shí)現(xiàn)數(shù)字電視的快速啟動(dòng)。但當(dāng)采用休眠方式啟動(dòng)后,發(fā)現(xiàn)一些應(yīng)用程序(如/applications/df_
logo、/applications/bin/haier_board)都無(wú)法正常運(yùn)行。對(duì)此采用ps命令行查看其進(jìn)程是否存在,發(fā)現(xiàn)某些進(jìn)程(如df_logo)在控制臺(tái)上有顯示,但在實(shí)際情況中不能正常運(yùn)行,而有些進(jìn)程(如haier_board)根本就沒(méi)有顯示。
    經(jīng)研究表明,這些腳本或應(yīng)用程序不能正常啟動(dòng)的原因是:logo文件的執(zhí)行過(guò)程或haier_board應(yīng)用程序中的一些動(dòng)態(tài)界面的顯示過(guò)程在休眠時(shí)不能夠完全保存到休眠文件中,從而導(dǎo)致在休眠啟動(dòng)后雖然用命令行查看這些程序的進(jìn)程在控制臺(tái)上有顯示,而電視界面不能按正常的方式顯示。為了解決這個(gè)問(wèn)題,把本文方法應(yīng)用到操作系統(tǒng)中,最后結(jié)果顯示:df_logo和haier_board兩個(gè)應(yīng)用程序在系統(tǒng)啟動(dòng)完成后即能正常啟動(dòng)運(yùn)行,其效果和采用非休眠方式啟動(dòng)的效果一樣,而且電視界面也能夠正常顯示。
    實(shí)驗(yàn)步驟如下:
    (1)把不能正常運(yùn)行的應(yīng)用程序和腳本文件(df_logo、haier_board)編寫(xiě)成目標(biāo)腳本并把它放到指定目錄下;(2)編寫(xiě)內(nèi)核模塊,并用系統(tǒng)調(diào)用的方式把模塊插入到內(nèi)核,用交叉編譯生成新的內(nèi)核和模塊的.ko文件;(3)編寫(xiě)守護(hù)進(jìn)程函數(shù),并用交叉編譯生成可執(zhí)行文件;(4)編寫(xiě)控制模塊(控制模塊里包含可以使操作系統(tǒng)實(shí)現(xiàn)快速啟動(dòng)的函數(shù)),并用交叉編譯生成可執(zhí)行文件;(5)重新燒寫(xiě)新的內(nèi)核;(6)在/etc/init.d/文件夾的相應(yīng)文件里加一句加載上述模塊的語(yǔ)句,使其在系統(tǒng)每次啟動(dòng)時(shí)都能夠自動(dòng)加載到內(nèi)核;(7)為此模塊建立設(shè)備文件;(8)執(zhí)行守護(hù)進(jìn)程可執(zhí)行文件,使其在操作系統(tǒng)后臺(tái)運(yùn)行;(9)執(zhí)行控制模塊的可執(zhí)行文件,使其在改變標(biāo)志位后立即執(zhí)行快速啟動(dòng)程序,從而保證系統(tǒng)以后每次重啟后都能夠自動(dòng)運(yùn)行目標(biāo)腳本和應(yīng)用程序。
    本文提出了一種新的方法,實(shí)現(xiàn)了基于休眠的嵌入式操作系統(tǒng)啟動(dòng)后,自動(dòng)運(yùn)行任何形式的目標(biāo)腳本和應(yīng)用程序。
參考文獻(xiàn)
[1] BAIK K,KIM S,WOO S,et al.Boosting up embedded  Linux device:experience on Linux-based Smartphone[J]. Proceedings of the Linux Symposium,2010(6).
[2] 李學(xué)橋,徐本福,賈小愛(ài).基于XIP和休眠技術(shù)的嵌入式Linux快速啟動(dòng)優(yōu)化研究[J].電子技術(shù),2010(47):11-12.
[3] 左大全,吳剛.嵌入式Linux快速啟動(dòng)與XIP應(yīng)用[J].計(jì)算機(jī)工程與科學(xué),2006(12):136-13.
[4] 趙炯.Linux內(nèi)核完全剖析[M].北京:機(jī)械工業(yè)出版社,2006.
[5] Lin Tao,Liu Jiehua,Ran Yaohan,et al.Research & implementation of daemon process communication based on proc VFS[J].INSPEC,2009(11):177-180.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。