本系统的架构如下图:

产品所使用的flash总大小为16M。

系统包括三大部分,即Bootloader,config, kernel + rootfs:

另外,/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实际上也是一个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的安全模式设计 - 嵌入式操作系统 - 电子发烧友网...相关推荐

  1. 嵌入式linux系统电源管理器,嵌入式Linux系统的动态电源管理技 - 嵌入式操作系统 - 电子发烧友网...

    嵌入式Linux系统的动态电源管理技术 通过用户层制定策略与内核提供管理功能交互,实时调整电源参数而同时满足系统实时应用的需求,允许电源管理参数在短时间的空闲或任务运行在低电源需求时,可以被频繁地.低 ...

  2. can总线linux程序,CAN通信卡的Linux设备驱动程序 - 嵌入式操作系统 - 电子发烧友网...

    CAN通信卡的Linux设备驱动程序设计实现 目前,许多工业现场如电力系统.化工系统等大量使用控制器局部网(CAN--Controller Area Network)现场总线网络,CAN通信卡作为计算 ...

  3. linux如何改文件内容,linux下用命令修改文件内容

    linux下vi命令修改文件及保存的使用方法 进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi n filename :打开文件,并将光标置于第n行首 vi fil ...

  4. 智能硬件Linux效能更高,Android软硬件巧妙整合的开发技 - 嵌入式操作系统 - 电子发烧友网...

    1.Linux驱动程序的导入 由于Android是根源于Linux所延伸出来的操作系统,因此各种关键功能的驱动程序也必须要能顺利的写入其中,举凡像是字符设备.存储器的空间配置.中断处理.网路通信.萤幕 ...

  5. linux步进电机驱动程序,基于Linux的步进电机驱动程序设 - 嵌入式操作系统 - 电子发烧友网...

    定义时钟节拍函数time_tick() static void time_tick(unsigned long data) { static int i=0; switch(status) { cas ...

  6. linux的八进制文件模式,linux od-输出文件的八进制、十六进制等格式编码的字节...

    博主推荐:获取更多 linux文件内容查看命令 收藏:linux命令大全 od命令用于输出文件的八进制.十六进制或其它格式编码的字节,通常用于显示或查看文件中不能直接显示在终端的字符. 常见的文件为文 ...

  7. linux如何改文件用户组权限,linux修改文件权限和用户组管理小结

    如何在linux下修改组权限 chmod g+r path/file 加读权限 当前目录 chmod -R g+r path/file 加读权限 当前目录以及子目录 g-r 减读权限 g+w 加写权限 ...

  8. linux轮训创建文件夹,Linux文件和目录管理相关命令(三)

    通过前两篇的文章分享大家是否对Linux文件和目录管理的相关命令有所了解了呢?今天小编将继续为大家带来Linux文件和目录管理相关命令的第三篇文章,想要做Linux运维工程师的小伙伴,来看一看,希望能 ...

  9. linux如何进入文件编辑,Linux 文件编辑工具

    Linux 一切皆文件, 所有配置都需要改文件. 一般可以把文件用sftp方式下载下来,在本地电脑修改好后再上传上去, 但有时候可能必须在linux里面修改,所以这里介绍两个常用linux端文本编辑工 ...

最新文章

  1. 学习一个 Linux 命令:shutdown 命令
  2. 网站本地测试安装流程
  3. 推荐一本DD刚撸完的书,顺便送一波!
  4. [原创]微软拼音输入法2007(含64位版)
  5. 【Elasticsearch】bulk default_local reports failures when export documents
  6. mysql 冗余字段_18.3.3 增加冗余字段
  7. [CTO札记]电纸书,将成为教学、阅读潮流
  8. 怎么给图片或视频添加夜视效果?
  9. Fbinst增强版 命令详解
  10. 幅相曲线渐近线_第十讲 频域分析法(Nyquist曲线)
  11. 华为自带浏览器书签删除了怎么恢复_1 秒钟,这个工具能导出你浏览器全部重要数据...
  12. 没听过33大原则,赶紧偷偷学习一下:JS开发者不得不知的33大原则!
  13. weblogic12c补丁安装
  14. oracle游标添加数据,Oracle使用游标更新数据
  15. 【linux 释放内存】linux释放内存骚操作
  16. 电脑与手机文件互传机制
  17. Python基础:面向对象编程实战——简易图书管理系统
  18. 【BZOJ3698】XWW的难题 有上下界的最大流
  19. [原创]下一代Web 应用程序安全性测试工具HP WebInspect简介
  20. CSS(简介、基础选择器、字体属性、文本属性、引入方式)

热门文章

  1. opencv rect画旋转矩形_在opencv c中绘制旋转的矩形
  2. 1535C. Unstable String
  3. C# Task异步编程
  4. RT-Thread I2C设备驱动框架的对接使用
  5. python生成器迭代_python中的生成器和迭代器
  6. activex控件 新对象 ocx 初始化_Office已经支持64位的树控件Treeview了
  7. linux fb应用例子,Linux下利用framebuffer画点的程序小例子
  8. mfc cimage加载显示图片_在微信小程序里实现图片预加载组件
  9. matlab 矢量化,matlab矢量化编程简要
  10. 介绍最全的LVS负载均衡技术