嵌入式Linux的安全模式设计
![本系统的架构](http://uphotos.eepw.com.cn/fetch/20130729/150779_2_0.jpg)
产品所使用的flash总大小为16M。
系统包括三大部分,即Bootloader,config, kernel + rootfs:
![系统包括三大部分,即bootloader,config, kernel + rootfs](http://uphotos.eepw.com.cn/fetch/20130729/150779_2_1.jpg)
另外,/dev/mtdblock/0,在系统中对应整个flash block,即整个16M空间。
系统启动时,bootloader将kernel和根文件映象从flash上读取到RAM空间中,为内核设置启动参数,调用内核,进入application,进行媒体文件的播放。
这个通常意义上的嵌入式Linux系统,它是不带safe mode安全模式的。
这样的系统,在做系统更新升级时,主要是对kernel+rootfs部分进行升级,以此来增加系统的功能。
升级时,application主要是操作/dev/mtdblock/3设备文件:
第一步:下载新的firmware到ramfs中,也即ram disk中,比如/tmp目录下,采用的更新方式可以是USB或FTP;
第二步:read /tmp/firmware文件,并write到设备文件/dev/mtdblock/3上,即对已有的firmware进行了更新。
在升级的过程中,我们会提供友好的界面给用户,来提示下载进度与烧写flash的进度,让用户可以看到正在发生的状况。
最后烧写完成后,重新启动系统,即可进入到新的firmware中。
在通常的更新中,用户的产品配置config一般不去修改,保持用户已经做的配置选项,不能破坏。Config内容对应为/dev/mtdblock/2设备文件。
从USB/FTP 上更新时,所使用的firmware文件需要是一个更加完整的image文件,可以包括bootloader, default config, kernel+rootfs,并让application可以做到视image中的标记来决定是否需要更新bootloader、config等内容,这样会更加灵活。
在更新firmware时,如果掉电,那么kernel + rootfs部分将会出现不完整的情况,也就是说只写入了部分内容,而中途中断了,这样的话,一个不完整的系统将无法正常工作。在这样的情况下就需要safe mode安全模式了。
safe mode架构设计
Safe mode的设计中,对原来的系统增加了两个部分的内容:
kernel + rootfs,即简单的UI界面与功能;
magic number,即烧写flash的标记。
![safe mode架构设计](http://uphotos.eepw.com.cn/fetch/20130729/150779_2_2.jpg)
safe mode实际上也是一个kernel + rootfs部分,只是它所具有的功能只包括一些简单的界面,主要是提供网络设置,从USB/FTP下载firmware,完成对flash的烧写。
为了区分,这里,将主功能部分的kernel + rootfs称为master。
我们将safe mode存放在master的后部,预留的flash大小为4M。
Magic number只占用一个字节的大小,是在这4M的最后的部分的一个字节,也即原始系统的15872K的最后一个字节位置处。
在开始烧写flash前,将magic number设置为0x55,表示烧写的开始。烧写正常结束后,将magic number设置为0xAA,表示烧写正常结束。
如果新产品中具备了safe mode模式,那么在以后再次更新升级时,开始烧写flash时,magic number的位置将会有0x55标记,如果烧写中途掉电,在重新启动后,将由Bootloader来检查magic number的值,如果内容为0x55,那么bootloader将从safemode部分读出kernel和根文件映象,再为内核设置启动参数,调用内核,进入safe mode application。
如果bootloader读到magic number为0xAA,那么说明master firmware是正常的,就将直接进入master。
所以涉及到safe mode的地方也包括了对bootloader的修改,需要在系统上电阶段也检查safe mode的magic number,这个过程是必不可少的,只有在启动阶段就检查magic number,才能跳过损坏的master系统,进入安全模式,达到恢复系统的目的。
linux操作系统文章专题:linux操作系统详解(linux不再难懂)
评论