qn1540561804

qn1540561804

0个粉丝

12

问答

0

专栏

1

资料

qn1540561804  发布于  2019-09-20 18:12:07
采纳率 0%
12个问答
2172

如何实现nandflash文件系统升级功能

 
本帖最后由 qn1540561804 于 2019-9-20 18:31 编辑

如题,环境如下:
Hi3519A,nandflash,
bootargs=mem=256M console=ttyAMA0,115200 clk_ignore_unused root=/dev/mtdblock3 rw rootfstype=yaffs2 mtdparts=hinand:1M(boot),4M(kernel),2M(config),32M(rootfs),32M(rootfsbak),185M(reserve)




问题:是否不能烧写当前正在工作的分区?
我来回答
回答6个
时间排序
认可量排序

qn1540561804

0个粉丝

12

问答

0

专栏

1

资料

qn1540561804 2019-09-20 18:18:41
认可0
本帖最后由 qn1540561804 于 2019-9-20 18:19 编辑

在rootfs下,使用busybox中的nandwrite命令烧写rootfsbak分区,rootfsbak分区已经提前擦除,修改bootargs从rootfsbak启动,文件系统启动异常???

qn1540561804

0个粉丝

12

问答

0

专栏

1

资料

qn1540561804 2019-09-20 18:20:02
认可0
本帖最后由 qn1540561804 于 2019-9-20 18:22 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=147857&ptid=75921]qn1540561804 发表于 2019-9-20 18:18[/url]
在rootfs下,使用busybox中的nandwrite命令烧写rootfsbak分区,rootfsbak分区已经提前擦除,修改bootargs从 ...[/quote]

续,
重新rootfs启动,使用nanddump命令输出rootfsbak分区的数据到文件,和mkyaffs2image100制作的镜像对比,发现nandwrite将ecc数据当做data写入page,busybox带的nandwrite命令不支持-o选项
重新交叉编译mtd-utils工具,使用新的nandwrite -o烧写rootfsbak分区,同样nanddump发现和镜像一致,从rootfsbak分区启动正常

qn1540561804

0个粉丝

12

问答

0

专栏

1

资料

qn1540561804 2019-09-20 18:27:27
认可0
续,
重新rootfs启动,使用新的nandwrite -o烧写rootfs分区,无法正常启动[code]yaffs: dev is 32505859 name is "mtdblock3" rw
yaffs: passed flags ""
------------[ cut here ]------------
kernel BUG at fs/yaffs2/yaffs_verify.c:473!
Internal error: Oops - BUG: 0 [#1] SMP ARM
Modules linked in:
CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.9.37 #5
Hardware name: Generic DT based system
task: ce848000 task.stack: ce842000
PC is at yaffs_verify_dir+0xc0/0xdc
LR is at yaffs_remove_obj_from_dir+0x1c/0x68
pc : []    lr : []    psr: 60000013
sp : ce843c40  ip : 610d4021  fp : 000000e2
r10: ceb76000  r9 : 00000027  r8 : cebe6708
r7 : 00000000  r6 : ceb76000  r5 : 00000000  r4 : cebeb498
r3 : f0000010  r2 : cebeb498  r1 : f0000010  r0 : 00000000
Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
Control: 10c5383d  Table: 2200406a  DAC: 00000051
Process swapper/0 (pid: 1, stack limit = 0xce842210)
Stack: (0xce843c40 to 0xce844000)
3c40: cebeb498 00000000 ceb76000 00000000 cebe6708 c02fa1c0 cebeb498 cebeb278
3c60: cebeb278 c02fb188 cebcd800 c0910f30 cebeb278 c0306964 000038a7 c06d6b3f
3c80: c0938ea4 cebeb498 0003ffff cebe76f0 000000dd 000000e1 cebe6000 c06d89a0
3ca0: 00000000 00000000 cebcd800 cebe7000 610d4021 00450150 00000000 00000000
3cc0: 25481120 c06d88f8 00000003 00000000 ce843cd0 ce843cd0 00000001 00000003
3ce0: 00000000 00000800 00000001 00000000 00000000 00000000 0000100c 00000000
3d00: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
3d20: ceb76000 00000000 00000001 ceb76000 ceb76d6c 00000f30 00000001 00000000
3d40: ceb7616c c0300aa0 c06d6b10 ce843d6c ceb3cc00 cebbb800 ceb76000 c0910f2c
3d60: cebd2300 00000000 ceb3cc00 00000000 00000000 c02f9aa0 ffff0a00 c095e930
3d80: 6d90d0a4 6c626474 336b636f c06c6100 ce843e00 cebbbaa8 c06c618a 00000002
3da0: ce843db8 00000000 00000000 00000000 00000000 00000000 00000000 00000000
3dc0: 00000000 00000000 00000000 00000000 ce40906c cebbb800 ce409000 00000083
3de0: ce40906c 00008000 00000000 00000001 cebd3000 c02f9ea8 cebbb800 c01d9498
3e00: ce409000 c095fea8 c095feac c02f67a0 cebb5200 c0911050 c0911050 00000000
3e20: 00008000 c02f67b8 c02f9e94 c0911050 cebb5200 c01d9e9c c0911050 00000000
3e40: cebb40c0 cebb5200 00008000 c01f4b90 c0911050 00000000 cebb5200 cebb51c0
3e60: 00000020 c01f79fc 00000000 00000000 ce829010 ce410990 0000000a c06b77cc
3e80: cebb5200 c06b77d0 00008000 cebb5200 cebb51c0 00000000 c06b77d0 00008000
3ea0: 00008000 c06b77cc cebd3000 c01f8810 00000000 cefc8a60 cebd3000 cefc8a60
3ec0: cebd3007 c06b77d0 c082f85c c08010f8 00000000 00006180 00000000 ffffff9c
3ee0: ce45b000 00006000 00006180 00000000 ffffff9c c01e5660 ce829010 ce410880
3f00: ce843f28 01f00003 c09060c0 c0930024 c082f838 c082f83c 00000008 00000008
3f20: 00000000 c0801464 6264746d 6b636f6c 00000033 00000000 c082f85c c0930024
3f40: 000000ac c082f838 c082f83c 00000008 00000008 c08015dc c082f838 c082f83c
3f60: c0930000 c0930000 000000ac c0800dc8 00000007 00000007 00000000 c08005ac
3f80: 00000000 00000000 c05fade4 00000000 00000000 00000000 00000000 00000000
3fa0: 00000000 c05fadec 00000000 c01074f8 00000000 00000000 00000000 00000000
3fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
3fe0: 00000000 00000000 00000000 00000000 00000013 00000000 94979699 90939295
[] (yaffs_verify_dir) from [] (yaffs_remove_obj_from_dir+0x1c/0x68)
[] (yaffs_remove_obj_from_dir) from [] (yaffs_add_obj_to_dir+0x34/0x100)
[] (yaffs_add_obj_to_dir) from [] (yaffs2_scan_backwards+0x828/0xf90)
[] (yaffs2_scan_backwards) from [] (yaffs_guts_initialise+0x834/0x878)
[] (yaffs_guts_initialise) from [] (yaffs_internal_read_super.constprop.6+0x3c4/0x794)
[] (yaffs_internal_read_super.constprop.6) from [] (yaffs2_internal_read_super_mtd+0x14/0x24)
[] (yaffs2_internal_read_super_mtd) from [] (mount_bdev+0x15c/0x188)
[] (mount_bdev) from [] (yaffs2_mount+0x18/0x20)
[] (yaffs2_mount) from [] (mount_fs+0x14/0xa4)
[] (mount_fs) from [] (vfs_kern_mount+0x48/0x100)
[] (vfs_kern_mount) from [] (do_mount+0x154/0xbd0)
[] (do_mount) from [] (SyS_mount+0x8c/0xb4)
[] (SyS_mount) from [] (mount_block_root+0x108/0x268)
[] (mount_block_root) from [] (mount_root+0x120/0x128)
[] (mount_root) from [] (prepare_namespace+0x170/0x1b8)
[] (prepare_namespace) from [] (kernel_init_freeable+0x1d0/0x1e0)
[] (kernel_init_freeable) from [] (kernel_init+0x8/0x114)
[] (kernel_init) from [] (ret_from_fork+0x14/0x3c)
Code: e3080f48 e34c006d ebfa2975 eafffff9 (e7f001f2)
---[ end trace c4a85a1f8e4f72df ]---
Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b

---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b[/code]

qn1540561804

0个粉丝

12

问答

0

专栏

1

资料

qn1540561804 2019-09-20 18:33:57
认可0
当然,可以借助rootfsbak分区实现在uboot中更新rootfs分区,实现系统镜像的升级,uboot、kernel类似

我想知道是否是由于当前分区flash存在写入操作,导致无法重新烧写?

cowboy

0个粉丝

9

问答

0

专栏

5

资料

cowboy 2019-09-21 10:59:05
认可0
我们的方式先存在某个分区内,然后在特定位置打标记。在下次启动时根据标记自动升级。  跟现在android OTA类似。我们只在启动的时候升级,工作过程中干这个事情还是比较危险的。应用程序可以这么干

qn1540561804

0个粉丝

12

问答

0

专栏

1

资料

qn1540561804 2019-09-23 09:34:55
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=147877&ptid=75921]cowboy 发表于 2019-9-21 10:59[/url]
我们的方式先存在某个分区内,然后在特定位置打标记。在下次启动时根据标记自动升级。  跟现在android OTA ...[/quote]

感谢回复
我知道可以使用中间分区来实现升级功能,但是我不太明白为什么不能直接烧写当前分区
我的理解是除了烧写的应用还有其他地方存在对flash的操作
我将启动脚本恢复到hisi默认的,不再启动我的业务,只做烧写当前分区的操作,分区仍然会无法启动
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区