《電子技術應用》
您所在的位置:首頁 > 嵌入式技术 > 设计应用 > 一种嵌入式操作系统休眠唤醒后程序自动运行的方法
一种嵌入式操作系统休眠唤醒后程序自动运行的方法
来源:微型机与应用2012年第2期
陈 鹏,王树志,董孝峰,张全胜
北京中科院软件中心有限公司,北京100080
摘要: 针对目前采用休眠方式来实现嵌入式系统快速启动后,一些动态进程或进程的执行过程不能正常恢复而导致进程不能按照原来的方式正常运行的情况,运用一种新的方法,实现了基于休眠的嵌入式操作系统启动后,自动运行任何形式的目标脚本和应用程序。
中圖分類號: TP316.6
文獻標識碼: 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)的啟動速度,通常采用基于休眠技術的方式來實現(xiàn)嵌入式系統(tǒng)的快速啟動[1]。例如,在一些數(shù)字電視中,采用休眠技術以后的啟動時間要比原來的啟動時間約快1/3[2]。但基于休眠技術的啟動方法有其不足之處:在保存內存內容時只能把內存中的信息以快照的形式保存到磁盤或其他外部存儲設備,原來系統(tǒng)內某些正在運行的動態(tài)進程及進程本身的執(zhí)行過程不能被完全保存下來,從而導致系統(tǒng)重新啟動后此部分進程不能正常運行;基于休眠技術的啟動方式一旦以快照的形式保存后其里面的內容將無法改動?;诖?,本文運用一種新方法,實現(xiàn)了基于休眠的嵌入式操作系統(tǒng)啟動后,可自動運行任何形式的目標腳本和應用程序。

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


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

    守護進程模塊分主調函數(shù)生成守護進程的Daemon程序和主調函數(shù)程序兩部分,通過執(zhí)行這兩個程序最終生成在操作系統(tǒng)后臺一直運行的守護進程。其執(zhí)行的程序框圖如圖5所示。

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

 


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

此內容為AET網站原創(chuàng),未經授權禁止轉載。

相關內容