嵌入式Linux的电子操作系统及其外部监控模块的控制方法与流程

文档序号:17397671发布日期:2019-04-13 00:57阅读:389来源:国知局
嵌入式Linux的电子操作系统及其外部监控模块的控制方法与流程

本发明涉及嵌入式领域,更具体地,涉及一种嵌入式linux的电子操作系统外部监控模块的控制方法。



背景技术:

在嵌入式linux操作系统中,为了使系统在异常情况下能自动恢复,一般都会加入独立的外部硬件watchdog(看门狗)功能模块。嵌入式linux系统正常运行时,需要在watchdog模块允许的时间间隔内对watchdog计数器清零也即喂狗,不让复位信号产生。当前在带linux操作系统的嵌入式系统中,由于linux操作系统加载时间较长(如10~20s),一般都超过看门狗的时间间隔(典型值为1.6s),如果不采取特殊措施,系统会在linux操作系统加载过程中复位,linux操作系统永远无法加载成功。

为了解决上述问题,当下常用的有如下两种解决方案:1.做一个时间间隔更长的复杂watchdog硬件电路模块;2.修改内核,在linuxkernel启动过程中将watchdog设成无效。方案1虽然可以解决嵌入式linux系统在系统启动阶段的失效问题,但是设计繁琐的硬件watchdog功能电路无形中增加了产品的成本,若大规模量产的产品采用此方案对企业来说是一笔不小的支出。方案2在linux系统启动阶段屏蔽了watchdog模块的功能,忽视了嵌入式linux系统在操作系统启动阶段的失效问题,降低了系统可靠性。



技术实现要素:

本发明为克服上述现有技术所述的设计繁琐导致的成本增加以及可能出现的watchdog模块在操作系统启动阶段的存在的失效问题的缺陷,提供一种嵌入式linux的电子操作系统及其外部监控模块的控制方法。

本发明旨在至少在一定程度上解决上述技术问题。

为解决上述技术问题,本发明的技术方案如下:一种嵌入式电子操作系统,包括电源模块、外设模块、操作系统核心控制模块和外部看门狗模块;

所述电源模块用于给系统的各个工作模块供电;

所述外设模块是用于控制核心模块与外部设备的信息交互的通道;

所述系统控制核心模块用于负责整体系统的调度;

所述外部watchdog模块用于对linux系统的整体监控。。

优选地,所述系统控制核心模块运行嵌入式linux操作系统。

一种嵌入式linux的电子操作系统的外部监控模块的控制方法,包括以下步骤:

s1:在bootloader(引导加载程序)阶段,调用gpio(通用输入/输出)的库函数,直接取反中央处理器的gpio的状态寄存器;

s2:在bootloader阶段后的linux内核阶段,在其watchdog驱动加载前,采取调用gpio库函数,直接取反中央处理器的gpio的状态寄存器,创建并注册wdi字符设备驱动,创建循环对watchdog计数器清零功能的内核定时器并启动;

s3:在linux内核阶段的watchdog驱动加载后,内核定时器间歇循环调用wdi驱动对watchdog计数器清零;

s4:在linux内核阶段后的应用程序运行阶段,应用程序中的喂狗程序采取在守护进程调用watchdog驱动的方法进行。

本发明采用watchdog芯片组成硬件看门狗电路,在linux操作系统程序和应用程序中插入watchdog功能程序,这些watchdog功能程序运行时间间隔小于外部硬件watchdog功能模块的时间间隔。如果嵌入式linux系统正常工作,系统可以在合理的时间间隔内不断进行外部硬件watchdog功能模块触发动作,外部硬件watchdog的计数器不断清零,不产生复位信号;如果嵌入式linux系统非正常工作,喂狗动作失效,外部硬件watchdog的计数器一定时间后溢出,对cpu产生复位信号使嵌入式linux系统重启。

优选地,步骤s1的具体步骤为:

s11:设置wdi(看门狗复位输入)引脚的io功能。

s12:在bootloader的第二阶段入口处加入嵌入式linux外部硬件watchdog功能代码;

s13:在外部设备的初始化时加入嵌入式linux外部硬件watchdog功能代码;

s14:将内核整体下载改为分片下载;

s15:复制内核代码到ram空间时加入嵌入式linux外部硬件watchdog功能代码;

s16:为启动内核做准备也就是内核阶段的入口处等待处加入嵌入式linux外部硬件watchdog功能代码;

其中bootloader包括两个阶段,其第一阶段包括是对设备初始化、加载缓存空间并将引导加载程序加载到缓存中,第二阶段包括初始化系统时钟和串口,检测内存映射,设置引导加载程序的命令格式,设置内核启动参数。

优选地,所述linux内核阶段包括linux内核引导阶段、linux内核加载阶段,linux内核加载阶段又分为watchdog驱动加载前、watchdog驱动加载后。

优选地,步骤s2的具体步骤为:

s21:watchdog驱动加载前加入嵌入式linux外部watchdog操作功能代码;

s22:在dts(设备树源文件)中参照led字符设备驱动插入wdi的设备驱动,并且将它注册进linux内核。

优选地,步骤s3的具体步骤为:

s31:watchdog驱动加载后,编写内核定时器程序单元,启动内核定时器,在定时器的功能模块定时调用wdi驱动端口,控制外部io引脚进行watchdog控制;

s32:定时器处理函数中调用gpio驱动,中断喂狗若干次以保证喂狗到内核启动结束并挂载好根文件系统。

优选地,步骤s4具体步骤为:创建守护进程,在该进程内进行循环喂狗处理,即在watchdog模块允许的时间间隔内对watchdog计数器清零,如果有某个进程出现故障,守护进程重启该进程,如果监控线程自身出现故障,watchdog也会自动复位重启。

优选地,应用程序阶段喂狗的方法是利用shell脚本制作系统自启动守护进程,其喂狗间隔可为1s或者为小于看门狗芯片间隔的任意值。

与现有技术相比,本发明技术方案的有益效果是:本发明能够有效解决嵌入式linux系统在启动过程中对系统的异常状态的监控;其电路精简,能够显著降低嵌入式linux外部硬件watchdog硬件模块的成本;通过引入外部硬件watchdog功能模块相比soc自身watchdog来说够稳定可靠。

附图说明

图1为本发明系统框图。

图2为本发明嵌入式linux系统外部watchdog模块的整体控制策略。

图3为本发明应用程序阶段的嵌入式linux系统外部watchdog模块的控制策略。

具体实施方式

附图仅用于示例性说明,不能理解为对本专利的限制;

下面结合附图和实施例对本发明的技术方案做进一步的说明。

实施例1

如图1所示的系统架构中,本发明包括电源模块、外设模块、操作系统核心控制模块和外部看门狗模块;其中电源模块用于给系统的各个工作模块供电;外设模块是控制核心与平台外部的信息交互的通道;系统控制核心模块是运行嵌入式linux操作系统的用于负责整体系统的调度;外部watchdog(看门狗)模块用于对linux系统的整体监控。

如图3所示的嵌入式linux系统外部watchdog模块的整体控制策略,在具体实施过程中,在bootloader阶段,外部硬件watchdog控制方法是在bootloader的程序启动过程中不同位置均匀插入watchdog喂狗程序。鉴于bootoader第一阶段的运行时间远远低于看门狗复位时间,因此只需在bootoader的第二阶段,如flash读写、crc校验、循环等待等处均匀插入喂狗代码。

在bootloader阶段,watchdog喂狗代码采用将对应的引脚设置为gpio功能,添加调用gpio库函数驱动进行操作:在特定平台的c代码中加入定义gpio功能的驱动代码,在flash读写、crc校验、循环等待、内核启动入口等处插入watchdog喂狗代码。

第1步:设置对应wdi引脚的io功能。

第2步:bootloader的第二阶段入口处加入嵌入式linux外部硬件watchdog功能代码;

第3步:外部设备的初始化时加入嵌入式linux外部硬件watchdog功能代码;

第4步:将内核整体下载改为分片下载;

第5步:复制内核代码到ram空间时加入嵌入式linux外部硬件watchdog功能代码;

第6步:为启动内核做准备也就是内核阶段的入口处等待处加入嵌入式linux外部硬件watchdog功能代码。

linux内核阶段可划分为两个大的阶段:linux内核引导阶段、linux内核加载阶段,而linux内核加载阶段中以watchdog驱动的加载为标志将linux内核加载阶段划分为两步:watchdog驱动加载前、watchdog驱动加载后。

linux内核vmlinux.lds链接文件中指定了内核的入口函数kernel_entry,此函数被定义在head.s中,由于linux内核引导阶段耗费时间短暂,此阶段可忽略对外部看门狗的控制,故可以跳过此阶段。只对linux内核加载及运行阶段进行外部watchdog处理。

第1步:watchdog驱动加载前加入嵌入式linux外部watchdog操作功能代码;

方法是在平台相关的设备树代码arch/arm/mach-xxx/mach-xxxx.c中均匀加入喂狗程序,随设备驱动一起注册进内核,具体方法是调用gpio库函数进行操作并添加头文件声明。

第2步:在设备树相关的dts文件中参照led字符设备驱动插入wdi的设备驱动,并且将它注册进内核;

第3步:watchdog驱动加载后,编写内核定时器程序单元,启动内核定时器,在定时器的功能模块定时调用wdi驱动端口,控制外部io引脚进行watchdog控制;

第4部:定时器处理函数中调用gpio驱动,中断喂狗8次(小于1.6s/每次),此处8次为实验测试得出,可以保证喂狗到内核启动结束并挂载好根文件系统。

在多进程应用程序运行阶段嵌入式linux外部硬件watchdog控制喂狗方法是创建一个守护进程,它的优先级高于其他进程。守护进程在其他被监控的进程正常工作的情况下,一定时间内循环对watchdog模块进行喂狗操作,喂狗操作通过调用wdi驱动来完成。如果某个进程出现故障,守护进程重启该进程。如果监控线程自身出现故障,不能及时执行喂狗操作,看门狗也自动复位重启。

在内核启动阶段已经制作了wdi的驱动,在应用程序阶段喂狗的方法是利用shell脚本制作系统自启动守护进程,喂狗间隔为1s,其控制图如图3所示。

显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1