Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1254022
  • 博文数量: 479
  • 博客积分: 12240
  • 博客等级: 上将
  • 技术积分: 4999
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-24 17:12
文章分类

全部博文(479)

文章存档

2014年(1)

2013年(1)

2012年(1)

2011年(95)

2010年(177)

2009年(167)

2008年(16)

2007年(21)

分类: LINUX

2010-12-14 16:25:11



前段时间移植了Linux-2.6.31到LPC3250上,但是在使用ubifs的时候遇到了一些问题。
原来在2.7.27.8上,ubifs没有任何问题就跑起来了,可是为何在这里却不行?摸索了大半天,终于搞定了,下面是过程。

主要现象是在linux-2.6.27上,ubi信息是:
Creating 1 MTD partitions on "nand0":
0x000000600000-0x000001600000 : "mtd=3"
device_name0:mtd=3
UBI: attaching mtd1 to ubi0
UBI: physical eraseblock size:   131072 bytes (128 KiB)
UBI: logical eraseblock size:    129024 bytes
UBI: smallest flash I/O unit:    2048
UBI: sub-page size:              512
UBI: VID header offset:          512 (aligned 512)
UBI: data offset:                2048
scanning error 0
UBI: attached mtd1 to ubi0
UBI: MTD device name:            "mtd=3"
UBI: MTD device size:            16 MiB
UBI: number of good PEBs:        127
UBI: number of bad PEBs:         1
UBI: max. allowed volumes:       128
UBI: wear-leveling threshold:    4096
UBI: number of internal volumes: 1
UBI: number of user volumes:     1
UBI: available PEBs:             0
UBI: total number of reserved PEBs: 127
UBI: number of PEBs reserved for bad PEB handling: 2
UBI: max/mean erase counter: 4/1

在2.6.27上,UBI识别到了sub-page,VID header offset是512.

[    1.191000] UBI: attaching mtd3 to ubi0
[    1.195000] UBI: physical eraseblock size:   131072 bytes (128 KiB)
[    1.201000] UBI: logical eraseblock size:    126976 bytes
[    1.207000] UBI: smallest flash I/O unit:    2048
[    1.212000] UBI: VID header offset:          2048 (aligned 2048)
[    1.218000] UBI: data offset:                4096
[    1.407000] UBI: attached mtd3 to ubi0
[    1.411000] UBI: MTD device name:            "safefs"
[    1.416000] UBI: MTD device size:            16 MiB
[    1.421000] UBI: number of good PEBs:        128
[    1.426000] UBI: number of bad PEBs:         0
[    1.430000] UBI: max. allowed volumes:       128
[    1.435000] UBI: wear-leveling threshold:    4096
[    1.440000] UBI: number of internal volumes: 1
[    1.444000] UBI: number of user volumes:     1
[    1.449000] UBI: available PEBs:             0
[    1.453000] UBI: total number of reserved PEBs: 128
[    1.458000] UBI: number of PEBs reserved for bad PEB handling: 2
[    1.464000] UBI: max/mean erase counter: 2125/17
[    1.469000] UBI: image sequence number: 0
[    1.473000] UBI: background thread "ubi_bgt0d" started, PID 325

而在linux-2.6.31上,却没有识别到sub-page,VID header offset是2048。

可是使用的是同一块NAND FLASH,怎么会差别这么大?应该是MTD驱动的原因,暂时不深究了。
当然,上面的对比信息是正确启动后的完整信息。

最初的ubi出错信息是:
[    1.168000] UBI: attaching mtd3 to ubi0
[    1.172000] UBI: physical eraseblock size:   131072 bytes (128 KiB)
[    1.179000] UBI: logical eraseblock size:    126976 bytes
[    1.184000] UBI: smallest flash I/O unit:    2048
[    1.189000] UBI: VID header offset:          2048 (aligned 2048)
[    1.195000] UBI: data offset:                4096
[    1.201000] UBI error: validate_ec_hdr: bad VID header offset 512, expected 2
048
[    1.209000] UBI error: validate_ec_hdr: bad EC header
[    1.214000] UBI error: ubi_io_read_ec_hdr: validation failed for PEB 0
[    1.221000] UBI error: ubi_init: cannot attach mtd3
[    1.228000] UBI error: ubi_init: UBI error: cannot initialize UBI, error -22

解决过程:

(1)在U-Boot生成ubi分区,加上2048的VID offset:

ubi part safefs 2048

之后出现的信息是:
但是内核还是无法起来。但是,出现的错误是:
[    1.122000] Creating 5 MTD partitions on "NAND 256MiB 3,3V 8-bit":
[    1.129000] 0x000000000000-0x000000180000 : "boot"
[    1.141000] 0x000000180000-0x0000001c0000 : "prms"
[    1.152000] 0x000000200000-0x000000600000 : "kernel"
[    1.163000] 0x000000600000-0x000001600000 : "safefs"
[    1.174000] 0x000001600000-0x000010000000 : "rootfs"
[    1.191000] UBI: attaching mtd3 to ubi0
[    1.195000] UBI: physical eraseblock size:   131072 bytes (128 KiB)
[    1.202000] UBI: logical eraseblock size:    126976 bytes
[    1.207000] UBI: smallest flash I/O unit:    2048
[    1.212000] UBI: VID header offset:          2048 (aligned 2048)
[    1.218000] UBI: data offset:                4096
[    1.408000] UBI: attached mtd3 to ubi0
[    1.412000] UBI: MTD device name:            "safefs"
[    1.417000] UBI: MTD device size:            16 MiB
[    1.422000] UBI: number of good PEBs:        128
[    1.426000] UBI: number of bad PEBs:         0
[    1.431000] UBI: max. allowed volumes:       128
[    1.435000] UBI: wear-leveling threshold:    4096
[    1.440000] UBI: number of internal volumes: 1
[    1.445000] UBI: number of user volumes:     1
[    1.449000] UBI: available PEBs:             0
[    1.454000] UBI: total number of reserved PEBs: 128
[    1.458000] UBI: number of PEBs reserved for bad PEB handling: 2
[    1.465000] UBI: max/mean erase counter: 4/1
[    1.469000] UBI: image sequence number: 0
[    1.473000] UBI: background thread "ubi_bgt0d" started, PID 325

[    2.431000] UBIFS error (pid 1): validate_sb: LEB size mismatch: 129024 in su
perblock, 126976 real
[    2.440000] UBIFS error (pid 1): validate_sb: bad superblock, error 1
     显然,ubi已经没有问题,现在是ubifs出现问题,问题出现在制作ubifs时候的参数不对,该用内核提示的126976,而不是原来512的时候的129024啦!

(2)修改制作ubi镜像的参数:

命令改为:
mkfs.ubifs -r safefs -m 2048 -e 126976 -c 128 -o safefs.ubi
     重新制作安全文件系统,安全文件系统正常启动!

制作ubi镜像:
mkfs.ubifs -r rootfs -m 2048 -e 126976 -c 1872 -o rootfs.img
ubinize -o ubi.img -m 2048 -p 128KiB -s 2048 ubi.cfg

(3)修改烧写ubi镜像的参数:

烧写ubi镜像:
ubiformat /dev/mtd4 -s 2048  -f ubi.img >  /dev/null 2>&1

之后,问题解决,系统成功启动。








阅读(4702) | 评论(1) | 转发(3) |
给主人留下些什么吧!~~

feixiangsmile2012-03-09 20:44:21

你好!我是linux移植新手,请问 一个新内核 要移植到smartarm3250板子上的话,需要做哪些工作呀?跪求指导呀