药导

药导

1个粉丝

23

问答

0

专栏

11

资料

药导  发布于  2016-06-16 16:31:36
采纳率 0%
23个问答
4151

升级spi flash内的uImage和文件系统其他应用程序,大家都是怎么做的呢?

 
如题,楼主现在的一个任务就是要做升级程序,我的想法是把flash分成几个区,然后从远程服务器上把升级文件下载下来,擦除相应分区之后,再把下下来的升级文件写到对应的区里面,就像uboot 用 sf 命令烧写flash一样。
大家都是怎么做的呢,我这个方法有没有什么问题呀。
我来回答
回答10个
时间排序
认可量排序

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-06-16 18:15:13
认可0
我做了一个,比较复杂,是在rootfs环境,主应用程序里面做的,感觉容易升级失败。

//////////////主要是升起一旦启动,必须确保,操作系统不能对现有rootfs分区进行任何动作,否则很容易失败。

//还是Uboot升级比较靠谱,但如果flash空间比较充足,那就可以用其他方法了。先把升级包通过网络发送过来,写到flash后半部分去,设定标志位,重启,然后启动中,在Uboot环境下,检查标志位,如果有升级需求,则开始升级。

药导

1个粉丝

23

问答

0

专栏

11

资料

药导 2016-06-17 09:31:19
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=31853&ptid=11626]ngswfx 发表于 2016-6-16 18:15[/url]
我做了一个,比较复杂,是在rootfs环境,主应用程序里面做的,感觉容易升级失败。

//////////////主要是 ...[/quote]

flash不太够用~,我们用的是3518E方案,本身才8M的flash呢,我之前也是建议用uboot来检测升级,不过老大说不用那么麻烦,因为我们是多进程的模式,他的意思是升级时把其他进程干掉,只保留升级进程,然后通过网络把下下来的升级包,覆盖到之前的应用区

goodman

2个粉丝

30

问答

18

专栏

17

资料

goodman 2016-06-17 10:54:49
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=31864&ptid=11626]药导 发表于 2016-6-17 09:31[/url]
flash不太够用~,我们用的是3518E方案,本身才8M的flash呢,我之前也是建议用uboot来检测升级,不过老大 ...[/quote]

这样的升级方式可能会挂的,一旦网络出现问题覆盖一半就会出问题,你们可以吧整个固件包放在内存里(/tmp目录下),然后直接升

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-06-17 15:18:00
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=31864&ptid=11626]药导 发表于 2016-6-17 09:31[/url]
flash不太够用~,我们用的是3518E方案,本身才8M的flash呢,我之前也是建议用uboot来检测升级,不过老大 ...[/quote]

对,一定是先放到内存盘里面,把各种环境东西准备好,还要考虑,一旦开始擦除写入数据,操作系统就不能对rootfs做任何动作了,否则肯定失败。

这种网络升级方式,升级kernel估计还好些,升级rootfs,估计是我的程序哪里还在访问,我把好多线程都停下来,或者退出了,就留下升级管理线程,还在和PC端的升级程序在保持通信。

这种操作系统环境下,升级操作系统本身,不知道怎么彻底禁止对文件系统的读写。否则升级中,只要写一点东西,到内存盘没事,一旦到了实际flash,肯定就完蛋了。因为SPI实际擦除写入很慢,有13M左右的rootfs,2分钟左右了,这段时间,操作系统,是否会写东西到flash,成为关键。

目前我写的那个网络升级,失败几率很高,3次就有一次完蛋。所以暂时放弃了。估计还是没弄对,怎么彻底禁止操作系统对正在升级flash区域的写入。

药导

1个粉丝

23

问答

0

专栏

11

资料

药导 2016-06-17 16:08:55
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=31881&ptid=11626]ngswfx 发表于 2016-6-17 15:18[/url]
对,一定是先放到内存盘里面,把各种环境东西准备好,还要考虑,一旦开始擦除写入数据,操作系统就不能对 ...[/quote]

我是这样想的,在uboot分区的时候,分成uboot,内核,文件系统,应用区,配置区,这个文件系统做成只读的比如squashfs,存放库还有其他一些配置文件,然后我升级只会改应用区的,这样应该就不会有事了吧?

药导

1个粉丝

23

问答

0

专栏

11

资料

药导 2016-06-17 16:09:27
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=31868&ptid=11626]goodman 发表于 2016-6-17 10:54[/url]
这样的升级方式可能会挂的,一旦网络出现问题覆盖一半就会出问题,你们可以吧整个固件包放在内存里(/tmp ...[/quote]

嗯嗯,多谢前辈指教

9crk

1个粉丝

34

问答

0

专栏

6

资料

9crk 2016-06-20 11:31:36
认可0
实验记录:
1.修改uboot启动参数,在root=/dev/mtdblock2 ro rootfstype=jffs2 中间增加了个ro,使得rootfs分区为只读
2.然后通过一次实验,得知最后一个mtdblock是不知道干吗用的,如果你的系统只有3个分区,则会有0-3共4个mtdblock,但只有0-2才分别是uboot,kernel,rootfs,剩下的一个不用管
~ # dd if=/dev/mtdblock0 of=/dev/k0
2048+0 records in
2048+0 records out
1048576 bytes (1.0MB) copied, 0.083930 seconds, 11.9MB/s
~ # dd if=/dev/mtdblock1 of=/dev/k1
8192+0 records in
8192+0 records out
4194304 bytes (4.0MB) copied, 0.335201 seconds, 11.9MB/s
~ # dd if=/dev/mtdblock2 of=/dev/k2
55296+0 records in
55296+0 records out
28311552 bytes (27.0MB) copied, 2.262474 seconds, 11.9MB/s
~ # dd if=/dev/mtdblock3 of=/dev/k3
262144+0 records in
262144+0 records out
134217728 bytes (128.0MB) copied, 11.059590 seconds, 11.6MB/s
3.并且增加一个分区mtdparts=hi_sfc:1M(boot),4M(kernel),20M(rootfs),7M(param)'
4.然后在启动脚本中挂载此分区用于保存参数。

不知道楼上说的squashfs,相比这个ro参数的方法有什么区别?

药导

1个粉丝

23

问答

0

专栏

11

资料

药导 2016-06-20 13:38:59
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=31967&ptid=11626]9crk 发表于 2016-6-20 11:31[/url]
实验记录:
1.修改uboot启动参数,在root=/dev/mtdblock2 ro rootfstype=jffs2 中间增加了个ro,使得rootf ...[/quote]

每台看懂您这是在干什么~

csuzhsh

1个粉丝

14

问答

0

专栏

0

资料

csuzhsh 2016-06-20 13:50:41
认可0
你老大只是让你更新应用程序,其实很容易操作,一个分区只放应用程序之类的文件,每次上电从服务器GET应用程序版本,如果应用程序版本一样,就不更新,如果不一致或者没有,就更新。里面有守护进程就不怕。

逐月小鹏

0个粉丝

9

问答

0

专栏

0

资料

逐月小鹏 2017-06-05 14:16:50
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=31853&ptid=11626]ngswfx 发表于 2016-6-16 18:15[/url]
我做了一个,比较复杂,是在rootfs环境,主应用程序里面做的,感觉容易升级失败。

//////////////主要是 ...[/quote]

你说的设定标志位,然后uboot检查标志位,具体是怎么操作的呢?这不理解,请说明下
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区