当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]嵌入式操作系统休眠唤醒后自动运行程序的方法

为了提高系统的启动速度,通常采用基于休眠技术的方式来实现嵌入式系统的快速启动[1]。例如,在一些数字电视中,采用休眠技术以后的启动时间要比原来的启动时间约快1/3[2]。但基于休眠技术的启动方法有其不足之处:在保存内存内容时只能把内存中的信息以快照的形式保存到磁盘或其他外部存储设备,原来系统内某些正在运行的动态进程及进程本身的执行过程不能被完全保存下来,从而导致系统重新启动后此部分进程不能正常运行;基于休眠技术的启动方式一旦以快照的形式保存后其里面的内容将无法改动。基于此,本文运用一种新方法,实现了基于休眠的嵌入式操作系统启动后,可自动运行任何形式的目标脚本和应用程序

 

1 休眠唤醒后程序自动运行的方法

 

最新的Linux2.6内核都支持休眠和待机机制,PC系统中的实现方式有suspend2、swsusp、TuxOnIce等技术,既可以把镜像文件保存到交换分区,也可以保存到一个文件[3]。Linux中这些休眠的具体实现方式有内核方式和软件方式两种,但两种方式都把休眠过程分为两个阶段:(1)SUSPEND阶段:保存当前系统各种状态到非易失性存储设备并关机;(2)RESUME阶段:系统重新启动,引导后恢复已保存的状态[4]。一般嵌入式操作系统的休眠过程如图1所示,休眠后恢复过程如图2所示。

 

 


 

 

本文提出一种基于休眠开关如图3所示的唤醒后程序自动运行方法。此方法的系统整体框架分为自动执行引擎、开关控制进程、休眠开关和配置文件4个部分。

 

1.1 自动执行引擎

 

自动执行引擎采用守护进程实现的方式。所谓守护进程就是Daemon进程,是Linux中的后台服务程序,是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些事件的发生[5]。守护进程常常在系统引导装入时启动,在系统关闭时终止。把要运行的目标脚本和应用程序放到守护进程中,并定义一个全局变量Autoflg作为标志位。运用此模块的目的是让其在操作系统后台运行,通过标志位实时监控目标脚本和应用程序的运行状态。守护进程的整体结构图如图4所示。

 

 

[!--empirenews.page--]
 

 

1.2 开关控制模块

 

此模块的功能是控制守护进程中的Autoflg标志位,此标志位是在守护进程中的主调函数程序中设置的,用来控制目标脚本和应用程序的运行状态。其具体程序框图如图6所示。

 

1.3 休眠模块

 

此模块实现守护进程和控制模块之间的通信,采用系统调用的方式,目的是通过控制模块的执行来控制守护进程中标志位的变化,而这种控制是通过在内核中插入信号传递模块来实现。

 

1.4 配置文件

 

配置文件(即方法执行)过程:

 

(1)执行时首先运行守护进程,但要通过Autoflg标志位保证目标脚本和应用程序处于不运行状态。

 

(2)运行控制标志位函数修改Autoflg,让其保证目标脚本和应用程序可以运行。

 

(3)执行快速启动,系统执行快速启动程序同时确保保存到磁盘或其他存储设备中的标志位是处于可以使目标脚本和应用程序运行的状态。

 

(4)因为基于休眠的快速启动方法是以快照的方式把内存内容保存到磁盘或其他存储设备中,并且一旦执行,里面的内容将无法修改,所以以后每次操作系统启动时都能保证守护进程的正常运行,同时也能保证守护进程中的标志位处于能够使目标脚本和应用程序处于运行的状态,从而使目标脚本和应用程序能够正常运行。

 

(5)为了提高CPU的运行速度和整个系统的使用效率,本方法设置守护进程在每次启动目标脚本和应用程序后都自动退出。因为设置守护进程的目的就是在每次操作系统启动时,使其启动目标脚本和应用程序,待这项工作完成以后,它的使命也随之完成(即从系统的运行速度和运行效率角度来看,已没有其存在的必要性)。

2 实验分析

 

为了确保本文所提方法的实用性和可靠性,把其应用到海尔数字电视上进行了验证,并对验证结果进行了详细的分析。

 

实验环境如下:

 

(1)硬件环境:MSTAR 6I98电视主板:主频为700 MHz,内存为512 MB,Flash为256 MB,总线为I2C、PCI。

 

(2)软件环境:电视主板中运行Linux-2.6.28.9嵌入式操作系统,串口控制台服务器为Linux操作系统。

 

首先对海尔数字电视采用基于休眠的技术对其操作系统进行改进,实现数字电视的快速启动。但当采用休眠方式启动后,发现一些应用程序(如/applications/df_

logo、/applications/bin/haier_board)都无法正常运行。对此采用ps命令行查看其进程是否存在,发现某些进程(如df_logo)在控制台上有显示,但在实际情况中不能正常运行,而有些进程(如haier_board)根本就没有显示。

 

经研究表明,这些脚本或应用程序不能正常启动的原因是:logo文件的执行过程或haier_board应用程序中的一些动态界面的显示过程在休眠时不能够完全保存到休眠文件中,从而导致在休眠启动后虽然用命令行查看这些程序的进程在控制台上有显示,而电视界面不能按正常的方式显示。为了解决这个问题,把本文方法应用到操作系统中,最后结果显示:df_logo和haier_board两个应用程序在系统启动完成后即能正常启动运行,其效果和采用非休眠方式启动的效果一样,而且电视界面也能够正常显示。

 

实验步骤如下:

 

(1)把不能正常运行的应用程序和脚本文件(df_logo、haier_board)编写成目标脚本并把它放到指定目录下;

 

(2)编写内核模块,并用系统调用的方式把模块插入到内核,用交叉编译生成新的内核和模块的.ko文件;

 

(3)编写守护进程函数,并用交叉编译生成可执行文件;

 

(4)编写控制模块(控制模块里包含可以使操作系统实现快速启动的函数),并用交叉编译生成可执行文件;

 

(5)重新烧写新的内核;

 

(6)在/etc/init.d/文件夹的相应文件里加一句加载上述模块的语句,使其在系统每次启动时都能够自动加载到内核;

 

(7)为此模块建立设备文件;

 

(8)执行守护进程可执行文件,使其在操作系统后台运行;

 

(9)执行控制模块的可执行文件,使其在改变标志位后立即执行快速启动程序,从而保证系统以后每次重启后都能够自动运行目标脚本和应用程序。

 

本文提出了一种新的方法,实现了基于休眠的嵌入式操作系统启动后,自动运行任何形式的目标脚本和应用程序

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭