LInux双系统启动,小系统升级方案

        前阵子搞了个Linux应用升级方案:不在应用app下升级(flash和内存不够),放到单独的小系统升级,简单记录一下。海思平台其实已经有了很成熟的方案,但由于老美的打压,产品换平台了,新平台得自己琢磨搞。

        一般正常的Linux应用启动过程是 boot->kernel->rootfs->app,而小系统升级方案启动过程是 boot->loader(小系统)->upgrade_app。其中loader实际上是裁剪过的kernel和rootfs合体(因为需要https下载,要不然如果在应用已经下载完了并且有地方保存的话,直接在boot做判断升级更方便)。

        基本原理:Loader = kernel + rootfs + upgrage_app,boot启动时读取loaderdb的升级标志位,判断是启动单独kernel的地址还是loader下的kernel地址。Loader镜像打包实际上是将upgrade_app放到rootfs,然后将整个rootfs作为initramfs编到kernel,也就是说loader实际上就是带有initramfs的kernel, 实际上每个kernel都有initramfs,只是配置里面为空(如何配置initramfs就不详述了)。Loader跑起来后,会将我们编译到kernel的rootfs解压到内存,然后执行init,我们的升级应用upgrade_app就可以放在etc/profile或者rcS配置起来。

       一切准备好之后,我们只需要在boot启动时判断进入kernel还是进入loader,需要修改部分boot代码。boot启动实际上是读取环境变量里的bootcmd,将flash地址的数据读到内存地址A,然后bootm A。那么我们可以在这里修改它,先读取用来管理升级数据的分区地址 B,取出数据判断,决定读取哪个分区的数据到 A,然后 bootm A。

       boot代码修改 cli_simple.c 的cli_simple_run_command()函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值