您的位置:首页 > 其它

【UBI】ubi问题总结

2015-08-10 16:28 609 查看
一、挂载成功后,使用正常。有时会出现:
UBIFS error (pid 76): ubifs_read_node: bad node type (255 but expected 1)

UBIFS error (pid 76): ubifs_read_node: bad node at LEB 31:20480, LEB mapping status 0

UBIFS error (pid 76): do_readpage: cannot read page 0 of inode 70, error -22

1.在uboot里,setenv nand_root ubi0:rootfs rw ubi.mtd= (此处对应),2048

2.制作imgae时,mkfs.ubifs -c 这个参数要仔细计算,些参数影响较大,再就是改一下ubinize.cfg这个文件的相关参数,要经过计算
3.看驱动,以用硬件连接,不要造成flash的只读情况出现

二、还是ubifs_read_node 报错,还会有类似oops的错误

UBIFS: default compressor: LZO
UBIFS: reserved for root:  0 bytes (0 KiB)
UBIFS error (pid 0): ubifs_read_node: bad node type (255 but expected 9)
UBIFS error (pid 0): ubifs_read_node: bad node at LEB 85:60448
UBIFS error (pid 0): ubifs_iget: failed to read inode 1, error -22
Machine check in kernel mode.
Caused by (from msr): regs 0fe7ca88 Unknown values in msr
NIP: 0FFB7C80 XER: 00000000 LR: 0FFB7C5C REGS: 0fe7ca88 TRAP: 0200 DAR: 00000000
MSR: 0000b032 EE: 1 PR: 0 FP: 1 ME: 1 IR/DR: 11

GPR00: 0004434C 0FE7CB78 0FE7CF50 FFFF7FFF 0FFF8020 00000000 0FFF8020 FFFF7FF7 

GPR08: 00021AE8 DC0FFF80 0FFF83F8 0FFF83F8 22044024 7037FFBF 0FFFB000 00000000 

GPR16: 0FFECF7C 0FFF691C 00000000 00000000 0FEE1310 0FEDFB28 FFFFF000 0FEE0BA0 

GPR24: 00000000 00000003 0FEE129C 00000001 00000001 0FFF9100 0FFFBFA8 0FEE0C88 

Call backtrace: 
0FEE0C88 0FFCABFC 0FFCBEE8 0FFCC050 0FFB6590 0FFBC468 0FFBBB78 
0FFBBD98 0FFBD728 0FFBC468 0FFBBB78 0FFBBD98 0FFBE7D0 0FFA188C 
0FFA05F0 
machine check
Resetting the board.

解决办法:

关于这个oops的错误参考以下链接的修改
http://lists.denx.de/pipermail/u-boot/2011-October/103864.html
On Tue, Oct 4, 2011 at 6:08 PM, larsi <larsi at atlantis.wh2.tu-dresden.de> wrote:
> This patch fixes an issue when ubifs reads a bad superblock. Later it
> tries to free memory, that was not allocated, which freezes u-boot.
> This is fixed by looking for a non null pointer before free.
>
> Signed-off-by: Lars Poeschel <larsi at wh2.tu-dresden.de>
> Cc: Kyungmin Park <kmpark at infradead.org>
> ---
> The message I got before u-boot freezes:
> UBI: max/mean erase counter: 53/32
> UBIFS: mounted UBI device 0, volume 1, name "rootfs"
> UBIFS: mounted read-only
> UBIFS: file system size:   49140 bytes (50319360 KiB, 0 MiB, 49140 LEBs)
> UBIFS: journal size:       49 bytes (6838272 KiB, 0 MiB, 6678 LEBs)
> UBIFS: media format:       w4/r0 (latest is w4/r0)
> UBIFS: default compressor: LZO
> UBIFS: reserved for root:  0 bytes (0 KiB)
> UBIFS error (pid 0): ubifs_read_node: bad node type (255 but expected 9)
> UBIFS error (pid 0): ubifs_read_node: bad node at LEB 330:13104
> UBIFS error (pid 0): ubifs_iget: failed to read inode 1, error -22
> Error reading superblock on volume 'ubi:rootfs'!
>
>  fs/ubifs/super.c |    6 ++++--
>  1 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c
> index 63b2164..20fb244 100644
> --- a/fs/ubifs/super.c
> +++ b/fs/ubifs/super.c
> @@ -848,8 +848,10 @@ void ubifs_umount(struct ubifs_info *c)
>        ubifs_debugging_exit(c);
>
>        /* Finally free U-Boot's global copy of superblock */
> -       free(ubifs_sb->s_fs_info);
> -       free(ubifs_sb);
> +       if (ubifs_sb != null) {
> +               free(ubifs_sb->s_fs_info);
> +               free(ubifs_sb);
> +       }
Which statement is problem? Basically free() check the null address.
so If ubifs_sb->s_fs_info doesn't have value its skipped. and ubifs_sb
is similar.

Thank you,
Kyungmin Park
>  }

但是关于ubifs_read_node: bad node type (255 but expected 9)

这个错误一直没找到精准的解决办法,开始的时候怀疑mkfs.ubifs的参数问题,各种修改也没好转

后来发现kernel的大小(烧写的时候的大小)不对,

kernel_img=a36800(写入大小)

ubi write 0x3000000 kernel$kernel_img

Load address: 0x3000000
Loading: #################################################################
         #################################################################
         #####################
done
Bytes transferred = 10792960 (a4b000 hex)(实际大小)

我记得修改过这个参数啊,唉

但不可否认的是改了这两个地方后,问题就解决了,如果写入的文件不完全或被破坏,ubimount时就会出错
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: