《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 一種嵌入式操作系統(tǒng)休眠喚醒后程序自動運(yùn)行的方法
一種嵌入式操作系統(tǒng)休眠喚醒后程序自動運(yùn)行的方法
來源:微型機(jī)與應(yīng)用2012年第2期
陳 鵬,王樹志,董孝峰,張全勝
北京中科院軟件中心有限公司,北京100080
摘要: 針對目前采用休眠方式來實(shí)現(xiàn)嵌入式系統(tǒng)快速啟動后,一些動態(tài)進(jìn)程或進(jìn)程的執(zhí)行過程不能正?;謴?fù)而導(dǎo)致進(jìn)程不能按照原來的方式正常運(yùn)行的情況,運(yùn)用一種新的方法,實(shí)現(xiàn)了基于休眠的嵌入式操作系統(tǒng)啟動后,自動運(yùn)行任何形式的目標(biāo)腳本和應(yīng)用程序。
中圖分類號: TP316.6
文獻(xiàn)標(biāo)識碼: A
文章編號: 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)的啟動速度,通常采用基于休眠技術(shù)的方式來實(shí)現(xiàn)嵌入式系統(tǒng)的快速啟動[1]。例如,在一些數(shù)字電視中,采用休眠技術(shù)以后的啟動時(shí)間要比原來的啟動時(shí)間約快1/3[2]。但基于休眠技術(shù)的啟動方法有其不足之處:在保存內(nèi)存內(nèi)容時(shí)只能把內(nèi)存中的信息以快照的形式保存到磁盤或其他外部存儲設(shè)備,原來系統(tǒng)內(nèi)某些正在運(yùn)行的動態(tài)進(jìn)程及進(jìn)程本身的執(zhí)行過程不能被完全保存下來,從而導(dǎo)致系統(tǒng)重新啟動后此部分進(jìn)程不能正常運(yùn)行;基于休眠技術(shù)的啟動方式一旦以快照的形式保存后其里面的內(nèi)容將無法改動?;诖?,本文運(yùn)用一種新方法,實(shí)現(xiàn)了基于休眠的嵌入式操作系統(tǒng)啟動后,可自動運(yùn)行任何形式的目標(biāo)腳本和應(yīng)用程序。

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


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

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

 


    配置文件(即方法執(zhí)行)過程:
    (1)執(zhí)行時(shí)首先運(yùn)行守護(hù)進(jìn)程,但要通過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í)行快速啟動,系統(tǒng)執(zhí)行快速啟動程序同時(shí)確保保存到磁盤或其他存儲設(shè)備中的標(biāo)志位是處于可以使目標(biāo)腳本和應(yīng)用程序運(yùn)行的狀態(tài)。
    (4)因?yàn)榛谛菝叩目焖賳臃椒ㄊ且钥煺盏姆绞桨褍?nèi)存內(nèi)容保存到磁盤或其他存儲設(shè)備中,并且一旦執(zhí)行,里面的內(nèi)容將無法修改,所以以后每次操作系統(tǒ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)行速度和整個系統(tǒng)的使用效率,本方法設(shè)置守護(hù)進(jìn)程在每次啟動目標(biāo)腳本和應(yīng)用程序后都自動退出。因?yàn)樵O(shè)置守護(hù)進(jìn)程的目的就是在每次操作系統(tǒng)啟動時(shí),使其啟動目標(biāo)腳本和應(yīng)用程序,待這項(xiàng)工作完成以后,它的使命也隨之完成(即從系統(tǒng)的運(yùn)行速度和運(yùn)行效率角度來看,已沒有其存在的必要性)。
2 實(shí)驗(yàn)分析
    為了確保本文所提方法的實(shí)用性和可靠性,把其應(yīng)用到海爾數(shù)字電視上進(jìn)行了驗(yàn)證,并對驗(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),串口控制臺服務(wù)器為Linux操作系統(tǒng)。
    首先對海爾數(shù)字電視采用基于休眠的技術(shù)對其操作系統(tǒng)進(jìn)行改進(jìn),實(shí)現(xiàn)數(shù)字電視的快速啟動。但當(dāng)采用休眠方式啟動后,發(fā)現(xiàn)一些應(yīng)用程序(如/applications/df_
logo、/applications/bin/haier_board)都無法正常運(yùn)行。對此采用ps命令行查看其進(jìn)程是否存在,發(fā)現(xiàn)某些進(jìn)程(如df_logo)在控制臺上有顯示,但在實(shí)際情況中不能正常運(yùn)行,而有些進(jìn)程(如haier_board)根本就沒有顯示。
    經(jīng)研究表明,這些腳本或應(yīng)用程序不能正常啟動的原因是:logo文件的執(zhí)行過程或haier_board應(yīng)用程序中的一些動態(tài)界面的顯示過程在休眠時(shí)不能夠完全保存到休眠文件中,從而導(dǎo)致在休眠啟動后雖然用命令行查看這些程序的進(jìn)程在控制臺上有顯示,而電視界面不能按正常的方式顯示。為了解決這個問題,把本文方法應(yīng)用到操作系統(tǒng)中,最后結(jié)果顯示:df_logo和haier_board兩個應(yīng)用程序在系統(tǒng)啟動完成后即能正常啟動運(yùn)行,其效果和采用非休眠方式啟動的效果一樣,而且電視界面也能夠正常顯示。
    實(shí)驗(yàn)步驟如下:
    (1)把不能正常運(yùn)行的應(yīng)用程序和腳本文件(df_logo、haier_board)編寫成目標(biāo)腳本并把它放到指定目錄下;(2)編寫內(nèi)核模塊,并用系統(tǒng)調(diào)用的方式把模塊插入到內(nèi)核,用交叉編譯生成新的內(nèi)核和模塊的.ko文件;(3)編寫守護(hù)進(jìn)程函數(shù),并用交叉編譯生成可執(zhí)行文件;(4)編寫控制模塊(控制模塊里包含可以使操作系統(tǒng)實(shí)現(xiàn)快速啟動的函數(shù)),并用交叉編譯生成可執(zhí)行文件;(5)重新燒寫新的內(nèi)核;(6)在/etc/init.d/文件夾的相應(yīng)文件里加一句加載上述模塊的語句,使其在系統(tǒng)每次啟動時(shí)都能夠自動加載到內(nèi)核;(7)為此模塊建立設(shè)備文件;(8)執(zhí)行守護(hù)進(jìn)程可執(zhí)行文件,使其在操作系統(tǒng)后臺運(yùn)行;(9)執(zhí)行控制模塊的可執(zhí)行文件,使其在改變標(biāo)志位后立即執(zhí)行快速啟動程序,從而保證系統(tǒng)以后每次重啟后都能夠自動運(yùn)行目標(biāo)腳本和應(yīng)用程序。
    本文提出了一種新的方法,實(shí)現(xiàn)了基于休眠的嵌入式操作系統(tǒ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é)橋,徐本福,賈小愛.基于XIP和休眠技術(shù)的嵌入式Linux快速啟動優(yōu)化研究[J].電子技術(shù),2010(47):11-12.
[3] 左大全,吳剛.嵌入式Linux快速啟動與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)載。